mirror of
https://github.com/corundum/corundum.git
synced 2025-01-16 08:12:53 +08:00
Add log_desc_block_size to driver
This commit is contained in:
parent
9e64d19ea5
commit
a2ce454c22
@ -153,6 +153,9 @@ struct mqnic_ring {
|
|||||||
u32 mtu;
|
u32 mtu;
|
||||||
u32 page_order;
|
u32 page_order;
|
||||||
|
|
||||||
|
u32 desc_block_size;
|
||||||
|
u32 log_desc_block_size;
|
||||||
|
|
||||||
size_t buf_size;
|
size_t buf_size;
|
||||||
u8 *buf;
|
u8 *buf;
|
||||||
dma_addr_t buf_dma_addr;
|
dma_addr_t buf_dma_addr;
|
||||||
|
@ -50,6 +50,10 @@ int mqnic_create_rx_ring(struct mqnic_priv *priv, struct mqnic_ring **ring_ptr,
|
|||||||
ring->size_mask = ring->size-1;
|
ring->size_mask = ring->size-1;
|
||||||
ring->stride = roundup_pow_of_two(stride);
|
ring->stride = roundup_pow_of_two(stride);
|
||||||
|
|
||||||
|
ring->desc_block_size = ring->stride/MQNIC_DESC_SIZE;
|
||||||
|
ring->log_desc_block_size = ring->desc_block_size < 2 ? 0 : ilog2(ring->desc_block_size-1)+1;
|
||||||
|
ring->desc_block_size = 1 << ring->log_desc_block_size;
|
||||||
|
|
||||||
ring->rx_info = kvzalloc(sizeof(*ring->rx_info)*ring->size, GFP_KERNEL);
|
ring->rx_info = kvzalloc(sizeof(*ring->rx_info)*ring->size, GFP_KERNEL);
|
||||||
if (!ring->rx_info)
|
if (!ring->rx_info)
|
||||||
{
|
{
|
||||||
@ -87,7 +91,7 @@ int mqnic_create_rx_ring(struct mqnic_priv *priv, struct mqnic_ring **ring_ptr,
|
|||||||
iowrite32(ring->head_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_HEAD_PTR_REG);
|
iowrite32(ring->head_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_HEAD_PTR_REG);
|
||||||
iowrite32(ring->tail_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_TAIL_PTR_REG);
|
iowrite32(ring->tail_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_TAIL_PTR_REG);
|
||||||
// set size
|
// set size
|
||||||
iowrite32(ilog2(ring->size), ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
iowrite32(ilog2(ring->size) | (ring->log_desc_block_size << 8), ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
||||||
|
|
||||||
*ring_ptr = ring;
|
*ring_ptr = ring;
|
||||||
return 0;
|
return 0;
|
||||||
@ -130,7 +134,7 @@ int mqnic_activate_rx_ring(struct mqnic_priv *priv, struct mqnic_ring *ring, int
|
|||||||
iowrite32(ring->head_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_HEAD_PTR_REG);
|
iowrite32(ring->head_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_HEAD_PTR_REG);
|
||||||
iowrite32(ring->tail_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_TAIL_PTR_REG);
|
iowrite32(ring->tail_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_TAIL_PTR_REG);
|
||||||
// set size and activate queue
|
// set size and activate queue
|
||||||
iowrite32(ilog2(ring->size) | MQNIC_QUEUE_ACTIVE_MASK, ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
iowrite32(ilog2(ring->size) | (ring->log_desc_block_size << 8) | MQNIC_QUEUE_ACTIVE_MASK, ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
||||||
|
|
||||||
mqnic_refill_rx_buffers(priv, ring);
|
mqnic_refill_rx_buffers(priv, ring);
|
||||||
|
|
||||||
@ -140,7 +144,7 @@ int mqnic_activate_rx_ring(struct mqnic_priv *priv, struct mqnic_ring *ring, int
|
|||||||
void mqnic_deactivate_rx_ring(struct mqnic_priv *priv, struct mqnic_ring *ring)
|
void mqnic_deactivate_rx_ring(struct mqnic_priv *priv, struct mqnic_ring *ring)
|
||||||
{
|
{
|
||||||
// deactivate queue
|
// deactivate queue
|
||||||
iowrite32(ilog2(ring->size), ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
iowrite32(ilog2(ring->size) | (ring->log_desc_block_size << 8), ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool mqnic_is_rx_ring_empty(const struct mqnic_ring *ring)
|
bool mqnic_is_rx_ring_empty(const struct mqnic_ring *ring)
|
||||||
|
@ -52,6 +52,10 @@ int mqnic_create_tx_ring(struct mqnic_priv *priv, struct mqnic_ring **ring_ptr,
|
|||||||
ring->size_mask = ring->size-1;
|
ring->size_mask = ring->size-1;
|
||||||
ring->stride = roundup_pow_of_two(stride);
|
ring->stride = roundup_pow_of_two(stride);
|
||||||
|
|
||||||
|
ring->desc_block_size = ring->stride/MQNIC_DESC_SIZE;
|
||||||
|
ring->log_desc_block_size = ring->desc_block_size < 2 ? 0 : ilog2(ring->desc_block_size-1)+1;
|
||||||
|
ring->desc_block_size = 1 << ring->log_desc_block_size;
|
||||||
|
|
||||||
ring->tx_info = kvzalloc(sizeof(*ring->tx_info)*ring->size, GFP_KERNEL);
|
ring->tx_info = kvzalloc(sizeof(*ring->tx_info)*ring->size, GFP_KERNEL);
|
||||||
if (!ring->tx_info)
|
if (!ring->tx_info)
|
||||||
{
|
{
|
||||||
@ -89,7 +93,7 @@ int mqnic_create_tx_ring(struct mqnic_priv *priv, struct mqnic_ring **ring_ptr,
|
|||||||
iowrite32(ring->head_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_HEAD_PTR_REG);
|
iowrite32(ring->head_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_HEAD_PTR_REG);
|
||||||
iowrite32(ring->tail_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_TAIL_PTR_REG);
|
iowrite32(ring->tail_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_TAIL_PTR_REG);
|
||||||
// set size
|
// set size
|
||||||
iowrite32(ilog2(ring->size), ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
iowrite32(ilog2(ring->size) | (ring->log_desc_block_size << 8), ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
||||||
|
|
||||||
*ring_ptr = ring;
|
*ring_ptr = ring;
|
||||||
return 0;
|
return 0;
|
||||||
@ -132,7 +136,7 @@ int mqnic_activate_tx_ring(struct mqnic_priv *priv, struct mqnic_ring *ring, int
|
|||||||
iowrite32(ring->head_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_HEAD_PTR_REG);
|
iowrite32(ring->head_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_HEAD_PTR_REG);
|
||||||
iowrite32(ring->tail_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_TAIL_PTR_REG);
|
iowrite32(ring->tail_ptr & ring->hw_ptr_mask, ring->hw_addr+MQNIC_QUEUE_TAIL_PTR_REG);
|
||||||
// set size and activate queue
|
// set size and activate queue
|
||||||
iowrite32(ilog2(ring->size) | MQNIC_QUEUE_ACTIVE_MASK, ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
iowrite32(ilog2(ring->size) | (ring->log_desc_block_size << 8) | MQNIC_QUEUE_ACTIVE_MASK, ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -140,7 +144,7 @@ int mqnic_activate_tx_ring(struct mqnic_priv *priv, struct mqnic_ring *ring, int
|
|||||||
void mqnic_deactivate_tx_ring(struct mqnic_priv *priv, struct mqnic_ring *ring)
|
void mqnic_deactivate_tx_ring(struct mqnic_priv *priv, struct mqnic_ring *ring)
|
||||||
{
|
{
|
||||||
// deactivate queue
|
// deactivate queue
|
||||||
iowrite32(ilog2(ring->size), ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
iowrite32(ilog2(ring->size) | (ring->log_desc_block_size << 8), ring->hw_addr+MQNIC_QUEUE_ACTIVE_LOG_SIZE_REG);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool mqnic_is_tx_ring_empty(const struct mqnic_ring *ring)
|
bool mqnic_is_tx_ring_empty(const struct mqnic_ring *ring)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user