diff options
author | Himanshu Madhani <himanshu.madhani@qlogic.com> | 2013-11-04 13:31:31 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-11-04 15:33:19 -0500 |
commit | 34e8c406fda5b5a9d2e126a92bab84cd28e3b5fa (patch) | |
tree | 7867f7b76c97c693425d76e424ce54aa7e0dcbd2 /drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | |
parent | f27c75b3903ab02bfe295aa58ad61ef5b756b065 (diff) |
qlcnic: refactor Tx/SDS ring calculation and validation in driver.
o Current driver has duplicate code for validating user input
for changing Tx/SDS rings using set_channel ethtool interface.
This patch removes duplicate code and refactored Tx/SDS ring
validation for 82xx/83xx/84xx series adapter.
o Refactored code now calculates maximum Tx/Rx ring driver can
support based on Default, NPAR and SRIOV PF/VF mode of driver.
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c index 86850dd633a1..859cb161fc63 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | |||
@@ -270,7 +270,7 @@ int qlcnic_82xx_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter) | |||
270 | int err; | 270 | int err; |
271 | 271 | ||
272 | nrds_rings = adapter->max_rds_rings; | 272 | nrds_rings = adapter->max_rds_rings; |
273 | nsds_rings = adapter->max_sds_rings; | 273 | nsds_rings = adapter->drv_sds_rings; |
274 | 274 | ||
275 | rq_size = SIZEOF_HOSTRQ_RX(struct qlcnic_hostrq_rx_ctx, nrds_rings, | 275 | rq_size = SIZEOF_HOSTRQ_RX(struct qlcnic_hostrq_rx_ctx, nrds_rings, |
276 | nsds_rings); | 276 | nsds_rings); |
@@ -475,7 +475,7 @@ int qlcnic_82xx_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter, | |||
475 | 475 | ||
476 | if (qlcnic_check_multi_tx(adapter) && | 476 | if (qlcnic_check_multi_tx(adapter) && |
477 | !adapter->ahw->diag_test) { | 477 | !adapter->ahw->diag_test) { |
478 | temp_nsds_rings = adapter->max_sds_rings; | 478 | temp_nsds_rings = adapter->drv_sds_rings; |
479 | index = temp_nsds_rings + ring; | 479 | index = temp_nsds_rings + ring; |
480 | msix_id = ahw->intr_tbl[index].id; | 480 | msix_id = ahw->intr_tbl[index].id; |
481 | prq->msi_index = cpu_to_le16(msix_id); | 481 | prq->msi_index = cpu_to_le16(msix_id); |
@@ -512,7 +512,7 @@ int qlcnic_82xx_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter, | |||
512 | if (qlcnic_check_multi_tx(adapter) && | 512 | if (qlcnic_check_multi_tx(adapter) && |
513 | !adapter->ahw->diag_test && | 513 | !adapter->ahw->diag_test && |
514 | (adapter->flags & QLCNIC_MSIX_ENABLED)) { | 514 | (adapter->flags & QLCNIC_MSIX_ENABLED)) { |
515 | index = adapter->max_sds_rings + ring; | 515 | index = adapter->drv_sds_rings + ring; |
516 | intr_mask = ahw->intr_tbl[index].src; | 516 | intr_mask = ahw->intr_tbl[index].src; |
517 | tx_ring->crb_intr_mask = ahw->pci_base0 + intr_mask; | 517 | tx_ring->crb_intr_mask = ahw->pci_base0 + intr_mask; |
518 | } | 518 | } |
@@ -582,7 +582,7 @@ int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter) | |||
582 | 582 | ||
583 | recv_ctx = adapter->recv_ctx; | 583 | recv_ctx = adapter->recv_ctx; |
584 | 584 | ||
585 | for (ring = 0; ring < adapter->max_drv_tx_rings; ring++) { | 585 | for (ring = 0; ring < adapter->drv_tx_rings; ring++) { |
586 | tx_ring = &adapter->tx_ring[ring]; | 586 | tx_ring = &adapter->tx_ring[ring]; |
587 | ptr = (__le32 *)dma_alloc_coherent(&pdev->dev, sizeof(u32), | 587 | ptr = (__le32 *)dma_alloc_coherent(&pdev->dev, sizeof(u32), |
588 | &tx_ring->hw_cons_phys_addr, | 588 | &tx_ring->hw_cons_phys_addr, |
@@ -616,7 +616,7 @@ int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter) | |||
616 | 616 | ||
617 | } | 617 | } |
618 | 618 | ||
619 | for (ring = 0; ring < adapter->max_sds_rings; ring++) { | 619 | for (ring = 0; ring < adapter->drv_sds_rings; ring++) { |
620 | sds_ring = &recv_ctx->sds_rings[ring]; | 620 | sds_ring = &recv_ctx->sds_rings[ring]; |
621 | 621 | ||
622 | addr = dma_alloc_coherent(&adapter->pdev->dev, | 622 | addr = dma_alloc_coherent(&adapter->pdev->dev, |
@@ -664,7 +664,7 @@ int qlcnic_fw_create_ctx(struct qlcnic_adapter *dev) | |||
664 | if (err) | 664 | if (err) |
665 | goto err_out; | 665 | goto err_out; |
666 | 666 | ||
667 | for (ring = 0; ring < dev->max_drv_tx_rings; ring++) { | 667 | for (ring = 0; ring < dev->drv_tx_rings; ring++) { |
668 | err = qlcnic_fw_cmd_create_tx_ctx(dev, | 668 | err = qlcnic_fw_cmd_create_tx_ctx(dev, |
669 | &dev->tx_ring[ring], | 669 | &dev->tx_ring[ring], |
670 | ring); | 670 | ring); |
@@ -703,7 +703,7 @@ void qlcnic_fw_destroy_ctx(struct qlcnic_adapter *adapter) | |||
703 | 703 | ||
704 | if (test_and_clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state)) { | 704 | if (test_and_clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state)) { |
705 | qlcnic_fw_cmd_del_rx_ctx(adapter); | 705 | qlcnic_fw_cmd_del_rx_ctx(adapter); |
706 | for (ring = 0; ring < adapter->max_drv_tx_rings; ring++) | 706 | for (ring = 0; ring < adapter->drv_tx_rings; ring++) |
707 | qlcnic_fw_cmd_del_tx_ctx(adapter, | 707 | qlcnic_fw_cmd_del_tx_ctx(adapter, |
708 | &adapter->tx_ring[ring]); | 708 | &adapter->tx_ring[ring]); |
709 | 709 | ||
@@ -733,7 +733,7 @@ void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter) | |||
733 | 733 | ||
734 | recv_ctx = adapter->recv_ctx; | 734 | recv_ctx = adapter->recv_ctx; |
735 | 735 | ||
736 | for (ring = 0; ring < adapter->max_drv_tx_rings; ring++) { | 736 | for (ring = 0; ring < adapter->drv_tx_rings; ring++) { |
737 | tx_ring = &adapter->tx_ring[ring]; | 737 | tx_ring = &adapter->tx_ring[ring]; |
738 | if (tx_ring->hw_consumer != NULL) { | 738 | if (tx_ring->hw_consumer != NULL) { |
739 | dma_free_coherent(&adapter->pdev->dev, sizeof(u32), | 739 | dma_free_coherent(&adapter->pdev->dev, sizeof(u32), |
@@ -764,7 +764,7 @@ void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter) | |||
764 | } | 764 | } |
765 | } | 765 | } |
766 | 766 | ||
767 | for (ring = 0; ring < adapter->max_sds_rings; ring++) { | 767 | for (ring = 0; ring < adapter->drv_sds_rings; ring++) { |
768 | sds_ring = &recv_ctx->sds_rings[ring]; | 768 | sds_ring = &recv_ctx->sds_rings[ring]; |
769 | 769 | ||
770 | if (sds_ring->desc_head != NULL) { | 770 | if (sds_ring->desc_head != NULL) { |
@@ -895,6 +895,8 @@ int qlcnic_82xx_get_nic_info(struct qlcnic_adapter *adapter, | |||
895 | npar_info->max_rx_ques = le16_to_cpu(nic_info->max_rx_ques); | 895 | npar_info->max_rx_ques = le16_to_cpu(nic_info->max_rx_ques); |
896 | npar_info->capabilities = le32_to_cpu(nic_info->capabilities); | 896 | npar_info->capabilities = le32_to_cpu(nic_info->capabilities); |
897 | npar_info->max_mtu = le16_to_cpu(nic_info->max_mtu); | 897 | npar_info->max_mtu = le16_to_cpu(nic_info->max_mtu); |
898 | adapter->max_tx_rings = npar_info->max_tx_ques; | ||
899 | adapter->max_sds_rings = npar_info->max_rx_ques; | ||
898 | } | 900 | } |
899 | 901 | ||
900 | qlcnic_free_mbx_args(&cmd); | 902 | qlcnic_free_mbx_args(&cmd); |