netxen: refactor netxen_recv_context struct
o move related fields into netxen_recv_context struct. o allocate rx buffer and descriptor rings dynamically. Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
5103c9f787
commit
4ea528a151
@@ -323,7 +323,8 @@ nx_fw_cmd_create_tx_ctx(struct netxen_adapter *adapter)
|
||||
int err = 0;
|
||||
u64 offset, phys_addr;
|
||||
dma_addr_t rq_phys_addr, rsp_phys_addr;
|
||||
struct nx_host_tx_ring *tx_ring = &adapter->tx_ring;
|
||||
struct nx_host_tx_ring *tx_ring = adapter->tx_ring;
|
||||
struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
|
||||
|
||||
rq_size = SIZEOF_HOSTRQ_TX(nx_hostrq_tx_ctx_t);
|
||||
rq_addr = pci_alloc_consistent(adapter->pdev,
|
||||
@@ -358,7 +359,7 @@ nx_fw_cmd_create_tx_ctx(struct netxen_adapter *adapter)
|
||||
|
||||
prq->dummy_dma_addr = cpu_to_le64(adapter->dummy_dma.phys_addr);
|
||||
|
||||
offset = adapter->ctx_desc_phys_addr+sizeof(struct netxen_ring_ctx);
|
||||
offset = recv_ctx->phys_addr + sizeof(struct netxen_ring_ctx);
|
||||
prq->cmd_cons_dma_addr = cpu_to_le64(offset);
|
||||
|
||||
prq_cds = &prq->cds_ring;
|
||||
@@ -541,14 +542,16 @@ netxen_init_old_ctx(struct netxen_adapter *adapter)
|
||||
struct nx_host_tx_ring *tx_ring;
|
||||
int ring;
|
||||
int port = adapter->portnum;
|
||||
struct netxen_ring_ctx *hwctx = adapter->ctx_desc;
|
||||
struct netxen_ring_ctx *hwctx;
|
||||
u32 signature;
|
||||
|
||||
tx_ring = &adapter->tx_ring;
|
||||
tx_ring = adapter->tx_ring;
|
||||
recv_ctx = &adapter->recv_ctx;
|
||||
hwctx = recv_ctx->hwctx;
|
||||
|
||||
hwctx->cmd_ring_addr = cpu_to_le64(tx_ring->phys_addr);
|
||||
hwctx->cmd_ring_size = cpu_to_le32(tx_ring->num_desc);
|
||||
|
||||
recv_ctx = &adapter->recv_ctx;
|
||||
|
||||
for (ring = 0; ring < adapter->max_rds_rings; ring++) {
|
||||
rds_ring = &recv_ctx->rds_rings[ring];
|
||||
@@ -576,9 +579,9 @@ netxen_init_old_ctx(struct netxen_adapter *adapter)
|
||||
NETXEN_CTX_SIGNATURE_V2 : NETXEN_CTX_SIGNATURE;
|
||||
|
||||
NXWR32(adapter, CRB_CTX_ADDR_REG_LO(port),
|
||||
lower32(adapter->ctx_desc_phys_addr));
|
||||
lower32(recv_ctx->phys_addr));
|
||||
NXWR32(adapter, CRB_CTX_ADDR_REG_HI(port),
|
||||
upper32(adapter->ctx_desc_phys_addr));
|
||||
upper32(recv_ctx->phys_addr));
|
||||
NXWR32(adapter, CRB_CTX_SIGNATURE_REG(port),
|
||||
signature | port);
|
||||
return 0;
|
||||
@@ -592,25 +595,28 @@ int netxen_alloc_hw_resources(struct netxen_adapter *adapter)
|
||||
struct netxen_recv_context *recv_ctx;
|
||||
struct nx_host_rds_ring *rds_ring;
|
||||
struct nx_host_sds_ring *sds_ring;
|
||||
struct nx_host_tx_ring *tx_ring = &adapter->tx_ring;
|
||||
struct nx_host_tx_ring *tx_ring;
|
||||
|
||||
struct pci_dev *pdev = adapter->pdev;
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
int port = adapter->portnum;
|
||||
|
||||
recv_ctx = &adapter->recv_ctx;
|
||||
tx_ring = adapter->tx_ring;
|
||||
|
||||
addr = pci_alloc_consistent(pdev,
|
||||
sizeof(struct netxen_ring_ctx) + sizeof(uint32_t),
|
||||
&adapter->ctx_desc_phys_addr);
|
||||
|
||||
&recv_ctx->phys_addr);
|
||||
if (addr == NULL) {
|
||||
dev_err(&pdev->dev, "failed to allocate hw context\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
memset(addr, 0, sizeof(struct netxen_ring_ctx));
|
||||
adapter->ctx_desc = (struct netxen_ring_ctx *)addr;
|
||||
adapter->ctx_desc->ctx_id = cpu_to_le32(port);
|
||||
adapter->ctx_desc->cmd_consumer_offset =
|
||||
cpu_to_le64(adapter->ctx_desc_phys_addr +
|
||||
recv_ctx->hwctx = (struct netxen_ring_ctx *)addr;
|
||||
recv_ctx->hwctx->ctx_id = cpu_to_le32(port);
|
||||
recv_ctx->hwctx->cmd_consumer_offset =
|
||||
cpu_to_le64(recv_ctx->phys_addr +
|
||||
sizeof(struct netxen_ring_ctx));
|
||||
tx_ring->hw_consumer =
|
||||
(__le32 *)(((char *)addr) + sizeof(struct netxen_ring_ctx));
|
||||
@@ -627,8 +633,6 @@ int netxen_alloc_hw_resources(struct netxen_adapter *adapter)
|
||||
|
||||
tx_ring->desc_head = (struct cmd_desc_type0 *)addr;
|
||||
|
||||
recv_ctx = &adapter->recv_ctx;
|
||||
|
||||
for (ring = 0; ring < adapter->max_rds_rings; ring++) {
|
||||
rds_ring = &recv_ctx->rds_rings[ring];
|
||||
addr = pci_alloc_consistent(adapter->pdev,
|
||||
@@ -713,16 +717,18 @@ void netxen_free_hw_resources(struct netxen_adapter *adapter)
|
||||
netxen_api_unlock(adapter);
|
||||
}
|
||||
|
||||
if (adapter->ctx_desc != NULL) {
|
||||
recv_ctx = &adapter->recv_ctx;
|
||||
|
||||
if (recv_ctx->hwctx != NULL) {
|
||||
pci_free_consistent(adapter->pdev,
|
||||
sizeof(struct netxen_ring_ctx) +
|
||||
sizeof(uint32_t),
|
||||
adapter->ctx_desc,
|
||||
adapter->ctx_desc_phys_addr);
|
||||
adapter->ctx_desc = NULL;
|
||||
recv_ctx->hwctx,
|
||||
recv_ctx->phys_addr);
|
||||
recv_ctx->hwctx = NULL;
|
||||
}
|
||||
|
||||
tx_ring = &adapter->tx_ring;
|
||||
tx_ring = adapter->tx_ring;
|
||||
if (tx_ring->desc_head != NULL) {
|
||||
pci_free_consistent(adapter->pdev,
|
||||
TX_DESC_RINGSIZE(tx_ring),
|
||||
@@ -730,7 +736,6 @@ void netxen_free_hw_resources(struct netxen_adapter *adapter)
|
||||
tx_ring->desc_head = NULL;
|
||||
}
|
||||
|
||||
recv_ctx = &adapter->recv_ctx;
|
||||
for (ring = 0; ring < adapter->max_rds_rings; ring++) {
|
||||
rds_ring = &recv_ctx->rds_rings[ring];
|
||||
|
||||
|
Reference in New Issue
Block a user