qla3xxx: Clean up receive process.

Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Ron Mercer and committed by Jeff Garzik 97916330 1357bfcf

+24 -54
+24 -54
drivers/net/qla3xxx.c
··· 1746 atomic_inc(&qdev->tx_count); 1747 } 1748 1749 /* 1750 * The difference between 3022 and 3032 for inbound completions: 1751 * 3022 uses two buffers per completion. The first buffer contains ··· 1778 static void ql_process_mac_rx_intr(struct ql3_adapter *qdev, 1779 struct ib_mac_iocb_rsp *ib_mac_rsp_ptr) 1780 { 1781 - long int offset; 1782 - u32 lrg_buf_phy_addr_low = 0; 1783 struct ql_rcv_buf_cb *lrg_buf_cb1 = NULL; 1784 struct ql_rcv_buf_cb *lrg_buf_cb2 = NULL; 1785 - u32 *curr_ial_ptr; 1786 struct sk_buff *skb; 1787 u16 length = le16_to_cpu(ib_mac_rsp_ptr->length); 1788 1789 /* 1790 * Get the inbound address list (small buffer). 1791 */ 1792 - offset = qdev->small_buf_index * QL_SMALL_BUFFER_SIZE; 1793 - if (++qdev->small_buf_index == NUM_SMALL_BUFFERS) 1794 - qdev->small_buf_index = 0; 1795 1796 - curr_ial_ptr = (u32 *) (qdev->small_buf_virt_addr + offset); 1797 - qdev->last_rsp_offset = qdev->small_buf_phy_addr_low + offset; 1798 - qdev->small_buf_release_cnt++; 1799 - 1800 - if (qdev->device_id == QL3022_DEVICE_ID) { 1801 - /* start of first buffer (3022 only) */ 1802 - lrg_buf_phy_addr_low = le32_to_cpu(*curr_ial_ptr); 1803 - lrg_buf_cb1 = &qdev->lrg_buf[qdev->lrg_buf_index]; 1804 - qdev->lrg_buf_release_cnt++; 1805 - if (++qdev->lrg_buf_index == qdev->num_large_buffers) { 1806 - qdev->lrg_buf_index = 0; 1807 - } 1808 - curr_ial_ptr++; /* 64-bit pointers require two incs. */ 1809 - curr_ial_ptr++; 1810 - } 1811 1812 /* start of second buffer */ 1813 - lrg_buf_phy_addr_low = le32_to_cpu(*curr_ial_ptr); 1814 - lrg_buf_cb2 = &qdev->lrg_buf[qdev->lrg_buf_index]; 1815 - 1816 - /* 1817 - * Second buffer gets sent up the stack. 1818 - */ 1819 - qdev->lrg_buf_release_cnt++; 1820 - if (++qdev->lrg_buf_index == qdev->num_large_buffers) 1821 - qdev->lrg_buf_index = 0; 1822 skb = lrg_buf_cb2->skb; 1823 1824 qdev->stats.rx_packets++; ··· 1820 static void ql_process_macip_rx_intr(struct ql3_adapter *qdev, 1821 struct ib_ip_iocb_rsp *ib_ip_rsp_ptr) 1822 { 1823 - long int offset; 1824 - u32 lrg_buf_phy_addr_low = 0; 1825 struct ql_rcv_buf_cb *lrg_buf_cb1 = NULL; 1826 struct ql_rcv_buf_cb *lrg_buf_cb2 = NULL; 1827 - u32 *curr_ial_ptr; 1828 struct sk_buff *skb1 = NULL, *skb2; 1829 struct net_device *ndev = qdev->ndev; 1830 u16 length = le16_to_cpu(ib_ip_rsp_ptr->length); ··· 1831 * Get the inbound address list (small buffer). 1832 */ 1833 1834 - offset = qdev->small_buf_index * QL_SMALL_BUFFER_SIZE; 1835 - if (++qdev->small_buf_index == NUM_SMALL_BUFFERS) 1836 - qdev->small_buf_index = 0; 1837 - curr_ial_ptr = (u32 *) (qdev->small_buf_virt_addr + offset); 1838 - qdev->last_rsp_offset = qdev->small_buf_phy_addr_low + offset; 1839 - qdev->small_buf_release_cnt++; 1840 1841 if (qdev->device_id == QL3022_DEVICE_ID) { 1842 /* start of first buffer on 3022 */ 1843 - lrg_buf_phy_addr_low = le32_to_cpu(*curr_ial_ptr); 1844 - lrg_buf_cb1 = &qdev->lrg_buf[qdev->lrg_buf_index]; 1845 - qdev->lrg_buf_release_cnt++; 1846 - if (++qdev->lrg_buf_index == qdev->num_large_buffers) 1847 - qdev->lrg_buf_index = 0; 1848 skb1 = lrg_buf_cb1->skb; 1849 - curr_ial_ptr++; /* 64-bit pointers require two incs. */ 1850 - curr_ial_ptr++; 1851 size = ETH_HLEN; 1852 if (*((u16 *) skb1->data) != 0xFFFF) 1853 size += VLAN_ETH_HLEN - ETH_HLEN; 1854 } 1855 1856 /* start of second buffer */ 1857 - lrg_buf_phy_addr_low = le32_to_cpu(*curr_ial_ptr); 1858 - lrg_buf_cb2 = &qdev->lrg_buf[qdev->lrg_buf_index]; 1859 skb2 = lrg_buf_cb2->skb; 1860 - qdev->lrg_buf_release_cnt++; 1861 - if (++qdev->lrg_buf_index == qdev->num_large_buffers) 1862 - qdev->lrg_buf_index = 0; 1863 1864 skb_put(skb2, length); /* Just the second buffer length here. */ 1865 pci_unmap_single(qdev->pdev, ··· 2383 return; 2384 } 2385 if(qdev->lrg_buf) kfree(qdev->lrg_buf); 2386 - 2387 pci_free_consistent(qdev->pdev, 2388 qdev->lrg_buf_q_alloc_size, 2389 qdev->lrg_buf_q_alloc_virt_addr, ··· 2426 qdev->small_buf_phy_addr_high = MS_64BITS(qdev->small_buf_phy_addr); 2427 2428 small_buf_q_entry = qdev->small_buf_q_virt_addr; 2429 - 2430 - qdev->last_rsp_offset = qdev->small_buf_phy_addr_low; 2431 2432 /* Initialize the small buffer queue. */ 2433 for (i = 0; i < (QL_ADDR_ELE_PER_BUFQ_ENTRY * NUM_SBUFQ_ENTRIES); i++) {
··· 1746 atomic_inc(&qdev->tx_count); 1747 } 1748 1749 + void ql_get_sbuf(struct ql3_adapter *qdev) 1750 + { 1751 + if (++qdev->small_buf_index == NUM_SMALL_BUFFERS) 1752 + qdev->small_buf_index = 0; 1753 + qdev->small_buf_release_cnt++; 1754 + } 1755 + 1756 + struct ql_rcv_buf_cb *ql_get_lbuf(struct ql3_adapter *qdev) 1757 + { 1758 + struct ql_rcv_buf_cb *lrg_buf_cb = NULL; 1759 + lrg_buf_cb = &qdev->lrg_buf[qdev->lrg_buf_index]; 1760 + qdev->lrg_buf_release_cnt++; 1761 + if (++qdev->lrg_buf_index == qdev->num_large_buffers) 1762 + qdev->lrg_buf_index = 0; 1763 + return(lrg_buf_cb); 1764 + } 1765 + 1766 /* 1767 * The difference between 3022 and 3032 for inbound completions: 1768 * 3022 uses two buffers per completion. The first buffer contains ··· 1761 static void ql_process_mac_rx_intr(struct ql3_adapter *qdev, 1762 struct ib_mac_iocb_rsp *ib_mac_rsp_ptr) 1763 { 1764 struct ql_rcv_buf_cb *lrg_buf_cb1 = NULL; 1765 struct ql_rcv_buf_cb *lrg_buf_cb2 = NULL; 1766 struct sk_buff *skb; 1767 u16 length = le16_to_cpu(ib_mac_rsp_ptr->length); 1768 1769 /* 1770 * Get the inbound address list (small buffer). 1771 */ 1772 + ql_get_sbuf(qdev); 1773 1774 + if (qdev->device_id == QL3022_DEVICE_ID) 1775 + lrg_buf_cb1 = ql_get_lbuf(qdev); 1776 1777 /* start of second buffer */ 1778 + lrg_buf_cb2 = ql_get_lbuf(qdev); 1779 skb = lrg_buf_cb2->skb; 1780 1781 qdev->stats.rx_packets++; ··· 1829 static void ql_process_macip_rx_intr(struct ql3_adapter *qdev, 1830 struct ib_ip_iocb_rsp *ib_ip_rsp_ptr) 1831 { 1832 struct ql_rcv_buf_cb *lrg_buf_cb1 = NULL; 1833 struct ql_rcv_buf_cb *lrg_buf_cb2 = NULL; 1834 struct sk_buff *skb1 = NULL, *skb2; 1835 struct net_device *ndev = qdev->ndev; 1836 u16 length = le16_to_cpu(ib_ip_rsp_ptr->length); ··· 1843 * Get the inbound address list (small buffer). 1844 */ 1845 1846 + ql_get_sbuf(qdev); 1847 1848 if (qdev->device_id == QL3022_DEVICE_ID) { 1849 /* start of first buffer on 3022 */ 1850 + lrg_buf_cb1 = ql_get_lbuf(qdev); 1851 skb1 = lrg_buf_cb1->skb; 1852 size = ETH_HLEN; 1853 if (*((u16 *) skb1->data) != 0xFFFF) 1854 size += VLAN_ETH_HLEN - ETH_HLEN; 1855 } 1856 1857 /* start of second buffer */ 1858 + lrg_buf_cb2 = ql_get_lbuf(qdev); 1859 skb2 = lrg_buf_cb2->skb; 1860 1861 skb_put(skb2, length); /* Just the second buffer length here. */ 1862 pci_unmap_single(qdev->pdev, ··· 2410 return; 2411 } 2412 if(qdev->lrg_buf) kfree(qdev->lrg_buf); 2413 pci_free_consistent(qdev->pdev, 2414 qdev->lrg_buf_q_alloc_size, 2415 qdev->lrg_buf_q_alloc_virt_addr, ··· 2454 qdev->small_buf_phy_addr_high = MS_64BITS(qdev->small_buf_phy_addr); 2455 2456 small_buf_q_entry = qdev->small_buf_q_virt_addr; 2457 2458 /* Initialize the small buffer queue. */ 2459 for (i = 0; i < (QL_ADDR_ELE_PER_BUFQ_ENTRY * NUM_SBUFQ_ENTRIES); i++) {