diff options
author | Michael Chan <mchan@broadcom.com> | 2009-08-26 05:49:22 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-29 02:47:10 -0400 |
commit | ec0248ea35f6e1fc7426f377a7df071d997bdedd (patch) | |
tree | 1836d5c4f5568a45fbdb4085ebcffff5046f8ead /drivers/net/cnic.c | |
parent | 3d1427f87002735aa54c370558e0c2bacc61f31e (diff) |
cnic: Put rx/tx ring allocation in separate function.
This will allow the 10G iSCSI code to reuse the function.
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/cnic.c')
-rw-r--r-- | drivers/net/cnic.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c index 4869d77cbe91..039900c41699 100644 --- a/drivers/net/cnic.c +++ b/drivers/net/cnic.c | |||
@@ -742,6 +742,26 @@ static int cnic_alloc_context(struct cnic_dev *dev) | |||
742 | return 0; | 742 | return 0; |
743 | } | 743 | } |
744 | 744 | ||
745 | static int cnic_alloc_l2_rings(struct cnic_dev *dev, int pages) | ||
746 | { | ||
747 | struct cnic_local *cp = dev->cnic_priv; | ||
748 | |||
749 | cp->l2_ring_size = pages * BCM_PAGE_SIZE; | ||
750 | cp->l2_ring = pci_alloc_consistent(dev->pcidev, cp->l2_ring_size, | ||
751 | &cp->l2_ring_map); | ||
752 | if (!cp->l2_ring) | ||
753 | return -ENOMEM; | ||
754 | |||
755 | cp->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; | ||
756 | cp->l2_buf_size = PAGE_ALIGN(cp->l2_buf_size); | ||
757 | cp->l2_buf = pci_alloc_consistent(dev->pcidev, cp->l2_buf_size, | ||
758 | &cp->l2_buf_map); | ||
759 | if (!cp->l2_buf) | ||
760 | return -ENOMEM; | ||
761 | |||
762 | return 0; | ||
763 | } | ||
764 | |||
745 | static int cnic_alloc_bnx2_resc(struct cnic_dev *dev) | 765 | static int cnic_alloc_bnx2_resc(struct cnic_dev *dev) |
746 | { | 766 | { |
747 | struct cnic_local *cp = dev->cnic_priv; | 767 | struct cnic_local *cp = dev->cnic_priv; |
@@ -762,17 +782,8 @@ static int cnic_alloc_bnx2_resc(struct cnic_dev *dev) | |||
762 | if (ret) | 782 | if (ret) |
763 | goto error; | 783 | goto error; |
764 | 784 | ||
765 | cp->l2_ring_size = 2 * BCM_PAGE_SIZE; | 785 | ret = cnic_alloc_l2_rings(dev, 2); |
766 | cp->l2_ring = pci_alloc_consistent(dev->pcidev, cp->l2_ring_size, | 786 | if (ret) |
767 | &cp->l2_ring_map); | ||
768 | if (!cp->l2_ring) | ||
769 | goto error; | ||
770 | |||
771 | cp->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; | ||
772 | cp->l2_buf_size = PAGE_ALIGN(cp->l2_buf_size); | ||
773 | cp->l2_buf = pci_alloc_consistent(dev->pcidev, cp->l2_buf_size, | ||
774 | &cp->l2_buf_map); | ||
775 | if (!cp->l2_buf) | ||
776 | goto error; | 787 | goto error; |
777 | 788 | ||
778 | uinfo = kzalloc(sizeof(*uinfo), GFP_ATOMIC); | 789 | uinfo = kzalloc(sizeof(*uinfo), GFP_ATOMIC); |