aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/atm/he.c152
-rw-r--r--drivers/atm/he.h26
2 files changed, 0 insertions, 178 deletions
diff --git a/drivers/atm/he.c b/drivers/atm/he.c
index ea495b21f916..bdbad7edf682 100644
--- a/drivers/atm/he.c
+++ b/drivers/atm/he.c
@@ -75,14 +75,8 @@
75#include <linux/atm.h> 75#include <linux/atm.h>
76#include <linux/sonet.h> 76#include <linux/sonet.h>
77 77
78#define USE_TASKLET
79#undef USE_SCATTERGATHER 78#undef USE_SCATTERGATHER
80#undef USE_CHECKSUM_HW /* still confused about this */ 79#undef USE_CHECKSUM_HW /* still confused about this */
81#define USE_RBPS
82#undef USE_RBPS_POOL /* if memory is tight try this */
83#undef USE_RBPL_POOL /* if memory is tight try this */
84#define USE_TPD_POOL
85/* #undef CONFIG_ATM_HE_USE_SUNI */
86/* #undef HE_DEBUG */ 80/* #undef HE_DEBUG */
87 81
88#include "he.h" 82#include "he.h"
@@ -388,9 +382,7 @@ he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent)
388 he_dev->atm_dev->dev_data = he_dev; 382 he_dev->atm_dev->dev_data = he_dev;
389 atm_dev->dev_data = he_dev; 383 atm_dev->dev_data = he_dev;
390 he_dev->number = atm_dev->number; 384 he_dev->number = atm_dev->number;
391#ifdef USE_TASKLET
392 tasklet_init(&he_dev->tasklet, he_tasklet, (unsigned long) he_dev); 385 tasklet_init(&he_dev->tasklet, he_tasklet, (unsigned long) he_dev);
393#endif
394 spin_lock_init(&he_dev->global_lock); 386 spin_lock_init(&he_dev->global_lock);
395 387
396 if (he_start(atm_dev)) { 388 if (he_start(atm_dev)) {
@@ -787,23 +779,13 @@ he_init_group(struct he_dev *he_dev, int group)
787{ 779{
788 int i; 780 int i;
789 781
790#ifdef USE_RBPS
791 /* small buffer pool */ 782 /* small buffer pool */
792#ifdef USE_RBPS_POOL
793 he_dev->rbps_pool = pci_pool_create("rbps", he_dev->pci_dev, 783 he_dev->rbps_pool = pci_pool_create("rbps", he_dev->pci_dev,
794 CONFIG_RBPS_BUFSIZE, 8, 0); 784 CONFIG_RBPS_BUFSIZE, 8, 0);
795 if (he_dev->rbps_pool == NULL) { 785 if (he_dev->rbps_pool == NULL) {
796 hprintk("unable to create rbps pages\n"); 786 hprintk("unable to create rbps pages\n");
797 return -ENOMEM; 787 return -ENOMEM;
798 } 788 }
799#else /* !USE_RBPS_POOL */
800 he_dev->rbps_pages = pci_alloc_consistent(he_dev->pci_dev,
801 CONFIG_RBPS_SIZE * CONFIG_RBPS_BUFSIZE, &he_dev->rbps_pages_phys);
802 if (he_dev->rbps_pages == NULL) {
803 hprintk("unable to create rbps page pool\n");
804 return -ENOMEM;
805 }
806#endif /* USE_RBPS_POOL */
807 789
808 he_dev->rbps_base = pci_alloc_consistent(he_dev->pci_dev, 790 he_dev->rbps_base = pci_alloc_consistent(he_dev->pci_dev,
809 CONFIG_RBPS_SIZE * sizeof(struct he_rbp), &he_dev->rbps_phys); 791 CONFIG_RBPS_SIZE * sizeof(struct he_rbp), &he_dev->rbps_phys);
@@ -818,14 +800,9 @@ he_init_group(struct he_dev *he_dev, int group)
818 dma_addr_t dma_handle; 800 dma_addr_t dma_handle;
819 void *cpuaddr; 801 void *cpuaddr;
820 802
821#ifdef USE_RBPS_POOL
822 cpuaddr = pci_pool_alloc(he_dev->rbps_pool, GFP_KERNEL|GFP_DMA, &dma_handle); 803 cpuaddr = pci_pool_alloc(he_dev->rbps_pool, GFP_KERNEL|GFP_DMA, &dma_handle);
823 if (cpuaddr == NULL) 804 if (cpuaddr == NULL)
824 return -ENOMEM; 805 return -ENOMEM;
825#else
826 cpuaddr = he_dev->rbps_pages + (i * CONFIG_RBPS_BUFSIZE);
827 dma_handle = he_dev->rbps_pages_phys + (i * CONFIG_RBPS_BUFSIZE);
828#endif
829 806
830 he_dev->rbps_virt[i].virt = cpuaddr; 807 he_dev->rbps_virt[i].virt = cpuaddr;
831 he_dev->rbps_base[i].status = RBP_LOANED | RBP_SMALLBUF | (i << RBP_INDEX_OFF); 808 he_dev->rbps_base[i].status = RBP_LOANED | RBP_SMALLBUF | (i << RBP_INDEX_OFF);
@@ -844,30 +821,14 @@ he_init_group(struct he_dev *he_dev, int group)
844 RBP_QSIZE(CONFIG_RBPS_SIZE - 1) | 821 RBP_QSIZE(CONFIG_RBPS_SIZE - 1) |
845 RBP_INT_ENB, 822 RBP_INT_ENB,
846 G0_RBPS_QI + (group * 32)); 823 G0_RBPS_QI + (group * 32));
847#else /* !USE_RBPS */
848 he_writel(he_dev, 0x0, G0_RBPS_S + (group * 32));
849 he_writel(he_dev, 0x0, G0_RBPS_T + (group * 32));
850 he_writel(he_dev, 0x0, G0_RBPS_QI + (group * 32));
851 he_writel(he_dev, RBP_THRESH(0x1) | RBP_QSIZE(0x0),
852 G0_RBPS_BS + (group * 32));
853#endif /* USE_RBPS */
854 824
855 /* large buffer pool */ 825 /* large buffer pool */
856#ifdef USE_RBPL_POOL
857 he_dev->rbpl_pool = pci_pool_create("rbpl", he_dev->pci_dev, 826 he_dev->rbpl_pool = pci_pool_create("rbpl", he_dev->pci_dev,
858 CONFIG_RBPL_BUFSIZE, 8, 0); 827 CONFIG_RBPL_BUFSIZE, 8, 0);
859 if (he_dev->rbpl_pool == NULL) { 828 if (he_dev->rbpl_pool == NULL) {
860 hprintk("unable to create rbpl pool\n"); 829 hprintk("unable to create rbpl pool\n");
861 return -ENOMEM; 830 return -ENOMEM;
862 } 831 }
863#else /* !USE_RBPL_POOL */
864 he_dev->rbpl_pages = (void *) pci_alloc_consistent(he_dev->pci_dev,
865 CONFIG_RBPL_SIZE * CONFIG_RBPL_BUFSIZE, &he_dev->rbpl_pages_phys);
866 if (he_dev->rbpl_pages == NULL) {
867 hprintk("unable to create rbpl pages\n");
868 return -ENOMEM;
869 }
870#endif /* USE_RBPL_POOL */
871 832
872 he_dev->rbpl_base = pci_alloc_consistent(he_dev->pci_dev, 833 he_dev->rbpl_base = pci_alloc_consistent(he_dev->pci_dev,
873 CONFIG_RBPL_SIZE * sizeof(struct he_rbp), &he_dev->rbpl_phys); 834 CONFIG_RBPL_SIZE * sizeof(struct he_rbp), &he_dev->rbpl_phys);
@@ -882,14 +843,9 @@ he_init_group(struct he_dev *he_dev, int group)
882 dma_addr_t dma_handle; 843 dma_addr_t dma_handle;
883 void *cpuaddr; 844 void *cpuaddr;
884 845
885#ifdef USE_RBPL_POOL
886 cpuaddr = pci_pool_alloc(he_dev->rbpl_pool, GFP_KERNEL|GFP_DMA, &dma_handle); 846 cpuaddr = pci_pool_alloc(he_dev->rbpl_pool, GFP_KERNEL|GFP_DMA, &dma_handle);
887 if (cpuaddr == NULL) 847 if (cpuaddr == NULL)
888 return -ENOMEM; 848 return -ENOMEM;
889#else
890 cpuaddr = he_dev->rbpl_pages + (i * CONFIG_RBPL_BUFSIZE);
891 dma_handle = he_dev->rbpl_pages_phys + (i * CONFIG_RBPL_BUFSIZE);
892#endif
893 849
894 he_dev->rbpl_virt[i].virt = cpuaddr; 850 he_dev->rbpl_virt[i].virt = cpuaddr;
895 he_dev->rbpl_base[i].status = RBP_LOANED | (i << RBP_INDEX_OFF); 851 he_dev->rbpl_base[i].status = RBP_LOANED | (i << RBP_INDEX_OFF);
@@ -1475,7 +1431,6 @@ he_start(struct atm_dev *dev)
1475 1431
1476 he_init_tpdrq(he_dev); 1432 he_init_tpdrq(he_dev);
1477 1433
1478#ifdef USE_TPD_POOL
1479 he_dev->tpd_pool = pci_pool_create("tpd", he_dev->pci_dev, 1434 he_dev->tpd_pool = pci_pool_create("tpd", he_dev->pci_dev,
1480 sizeof(struct he_tpd), TPD_ALIGNMENT, 0); 1435 sizeof(struct he_tpd), TPD_ALIGNMENT, 0);
1481 if (he_dev->tpd_pool == NULL) { 1436 if (he_dev->tpd_pool == NULL) {
@@ -1484,20 +1439,6 @@ he_start(struct atm_dev *dev)
1484 } 1439 }
1485 1440
1486 INIT_LIST_HEAD(&he_dev->outstanding_tpds); 1441 INIT_LIST_HEAD(&he_dev->outstanding_tpds);
1487#else
1488 he_dev->tpd_base = (void *) pci_alloc_consistent(he_dev->pci_dev,
1489 CONFIG_NUMTPDS * sizeof(struct he_tpd), &he_dev->tpd_base_phys);
1490 if (!he_dev->tpd_base)
1491 return -ENOMEM;
1492
1493 for (i = 0; i < CONFIG_NUMTPDS; ++i) {
1494 he_dev->tpd_base[i].status = (i << TPD_ADDR_SHIFT);
1495 he_dev->tpd_base[i].inuse = 0;
1496 }
1497
1498 he_dev->tpd_head = he_dev->tpd_base;
1499 he_dev->tpd_end = &he_dev->tpd_base[CONFIG_NUMTPDS - 1];
1500#endif
1501 1442
1502 if (he_init_group(he_dev, 0) != 0) 1443 if (he_init_group(he_dev, 0) != 0)
1503 return -ENOMEM; 1444 return -ENOMEM;
@@ -1606,9 +1547,7 @@ he_stop(struct he_dev *he_dev)
1606 gen_cntl_0 &= ~(INT_PROC_ENBL | INIT_ENB); 1547 gen_cntl_0 &= ~(INT_PROC_ENBL | INIT_ENB);
1607 pci_write_config_dword(pci_dev, GEN_CNTL_0, gen_cntl_0); 1548 pci_write_config_dword(pci_dev, GEN_CNTL_0, gen_cntl_0);
1608 1549
1609#ifdef USE_TASKLET
1610 tasklet_disable(&he_dev->tasklet); 1550 tasklet_disable(&he_dev->tasklet);
1611#endif
1612 1551
1613 /* disable recv and transmit */ 1552 /* disable recv and transmit */
1614 1553
@@ -1638,7 +1577,6 @@ he_stop(struct he_dev *he_dev)
1638 he_dev->hsp, he_dev->hsp_phys); 1577 he_dev->hsp, he_dev->hsp_phys);
1639 1578
1640 if (he_dev->rbpl_base) { 1579 if (he_dev->rbpl_base) {
1641#ifdef USE_RBPL_POOL
1642 int i; 1580 int i;
1643 1581
1644 for (i = 0; i < CONFIG_RBPL_SIZE; ++i) { 1582 for (i = 0; i < CONFIG_RBPL_SIZE; ++i) {
@@ -1647,22 +1585,14 @@ he_stop(struct he_dev *he_dev)
1647 1585
1648 pci_pool_free(he_dev->rbpl_pool, cpuaddr, dma_handle); 1586 pci_pool_free(he_dev->rbpl_pool, cpuaddr, dma_handle);
1649 } 1587 }
1650#else
1651 pci_free_consistent(he_dev->pci_dev, CONFIG_RBPL_SIZE
1652 * CONFIG_RBPL_BUFSIZE, he_dev->rbpl_pages, he_dev->rbpl_pages_phys);
1653#endif
1654 pci_free_consistent(he_dev->pci_dev, CONFIG_RBPL_SIZE 1588 pci_free_consistent(he_dev->pci_dev, CONFIG_RBPL_SIZE
1655 * sizeof(struct he_rbp), he_dev->rbpl_base, he_dev->rbpl_phys); 1589 * sizeof(struct he_rbp), he_dev->rbpl_base, he_dev->rbpl_phys);
1656 } 1590 }
1657 1591
1658#ifdef USE_RBPL_POOL
1659 if (he_dev->rbpl_pool) 1592 if (he_dev->rbpl_pool)
1660 pci_pool_destroy(he_dev->rbpl_pool); 1593 pci_pool_destroy(he_dev->rbpl_pool);
1661#endif
1662 1594
1663#ifdef USE_RBPS
1664 if (he_dev->rbps_base) { 1595 if (he_dev->rbps_base) {
1665#ifdef USE_RBPS_POOL
1666 int i; 1596 int i;
1667 1597
1668 for (i = 0; i < CONFIG_RBPS_SIZE; ++i) { 1598 for (i = 0; i < CONFIG_RBPS_SIZE; ++i) {
@@ -1671,20 +1601,12 @@ he_stop(struct he_dev *he_dev)
1671 1601
1672 pci_pool_free(he_dev->rbps_pool, cpuaddr, dma_handle); 1602 pci_pool_free(he_dev->rbps_pool, cpuaddr, dma_handle);
1673 } 1603 }
1674#else
1675 pci_free_consistent(he_dev->pci_dev, CONFIG_RBPS_SIZE
1676 * CONFIG_RBPS_BUFSIZE, he_dev->rbps_pages, he_dev->rbps_pages_phys);
1677#endif
1678 pci_free_consistent(he_dev->pci_dev, CONFIG_RBPS_SIZE 1604 pci_free_consistent(he_dev->pci_dev, CONFIG_RBPS_SIZE
1679 * sizeof(struct he_rbp), he_dev->rbps_base, he_dev->rbps_phys); 1605 * sizeof(struct he_rbp), he_dev->rbps_base, he_dev->rbps_phys);
1680 } 1606 }
1681 1607
1682#ifdef USE_RBPS_POOL
1683 if (he_dev->rbps_pool) 1608 if (he_dev->rbps_pool)
1684 pci_pool_destroy(he_dev->rbps_pool); 1609 pci_pool_destroy(he_dev->rbps_pool);
1685#endif
1686
1687#endif /* USE_RBPS */
1688 1610
1689 if (he_dev->rbrq_base) 1611 if (he_dev->rbrq_base)
1690 pci_free_consistent(he_dev->pci_dev, CONFIG_RBRQ_SIZE * sizeof(struct he_rbrq), 1612 pci_free_consistent(he_dev->pci_dev, CONFIG_RBRQ_SIZE * sizeof(struct he_rbrq),
@@ -1698,14 +1620,8 @@ he_stop(struct he_dev *he_dev)
1698 pci_free_consistent(he_dev->pci_dev, CONFIG_TBRQ_SIZE * sizeof(struct he_tbrq), 1620 pci_free_consistent(he_dev->pci_dev, CONFIG_TBRQ_SIZE * sizeof(struct he_tbrq),
1699 he_dev->tpdrq_base, he_dev->tpdrq_phys); 1621 he_dev->tpdrq_base, he_dev->tpdrq_phys);
1700 1622
1701#ifdef USE_TPD_POOL
1702 if (he_dev->tpd_pool) 1623 if (he_dev->tpd_pool)
1703 pci_pool_destroy(he_dev->tpd_pool); 1624 pci_pool_destroy(he_dev->tpd_pool);
1704#else
1705 if (he_dev->tpd_base)
1706 pci_free_consistent(he_dev->pci_dev, CONFIG_NUMTPDS * sizeof(struct he_tpd),
1707 he_dev->tpd_base, he_dev->tpd_base_phys);
1708#endif
1709 1625
1710 if (he_dev->pci_dev) { 1626 if (he_dev->pci_dev) {
1711 pci_read_config_word(he_dev->pci_dev, PCI_COMMAND, &command); 1627 pci_read_config_word(he_dev->pci_dev, PCI_COMMAND, &command);
@@ -1720,7 +1636,6 @@ he_stop(struct he_dev *he_dev)
1720static struct he_tpd * 1636static struct he_tpd *
1721__alloc_tpd(struct he_dev *he_dev) 1637__alloc_tpd(struct he_dev *he_dev)
1722{ 1638{
1723#ifdef USE_TPD_POOL
1724 struct he_tpd *tpd; 1639 struct he_tpd *tpd;
1725 dma_addr_t dma_handle; 1640 dma_addr_t dma_handle;
1726 1641
@@ -1735,27 +1650,6 @@ __alloc_tpd(struct he_dev *he_dev)
1735 tpd->iovec[2].addr = 0; tpd->iovec[2].len = 0; 1650 tpd->iovec[2].addr = 0; tpd->iovec[2].len = 0;
1736 1651
1737 return tpd; 1652 return tpd;
1738#else
1739 int i;
1740
1741 for (i = 0; i < CONFIG_NUMTPDS; ++i) {
1742 ++he_dev->tpd_head;
1743 if (he_dev->tpd_head > he_dev->tpd_end) {
1744 he_dev->tpd_head = he_dev->tpd_base;
1745 }
1746
1747 if (!he_dev->tpd_head->inuse) {
1748 he_dev->tpd_head->inuse = 1;
1749 he_dev->tpd_head->status &= TPD_MASK;
1750 he_dev->tpd_head->iovec[0].addr = 0; he_dev->tpd_head->iovec[0].len = 0;
1751 he_dev->tpd_head->iovec[1].addr = 0; he_dev->tpd_head->iovec[1].len = 0;
1752 he_dev->tpd_head->iovec[2].addr = 0; he_dev->tpd_head->iovec[2].len = 0;
1753 return he_dev->tpd_head;
1754 }
1755 }
1756 hprintk("out of tpds -- increase CONFIG_NUMTPDS (%d)\n", CONFIG_NUMTPDS);
1757 return NULL;
1758#endif
1759} 1653}
1760 1654
1761#define AAL5_LEN(buf,len) \ 1655#define AAL5_LEN(buf,len) \
@@ -1804,11 +1698,9 @@ he_service_rbrq(struct he_dev *he_dev, int group)
1804 RBRQ_CON_CLOSED(he_dev->rbrq_head) ? " CON_CLOSED" : "", 1698 RBRQ_CON_CLOSED(he_dev->rbrq_head) ? " CON_CLOSED" : "",
1805 RBRQ_HBUF_ERR(he_dev->rbrq_head) ? " HBUF_ERR" : ""); 1699 RBRQ_HBUF_ERR(he_dev->rbrq_head) ? " HBUF_ERR" : "");
1806 1700
1807#ifdef USE_RBPS
1808 if (RBRQ_ADDR(he_dev->rbrq_head) & RBP_SMALLBUF) 1701 if (RBRQ_ADDR(he_dev->rbrq_head) & RBP_SMALLBUF)
1809 rbp = &he_dev->rbps_base[RBP_INDEX(RBRQ_ADDR(he_dev->rbrq_head))]; 1702 rbp = &he_dev->rbps_base[RBP_INDEX(RBRQ_ADDR(he_dev->rbrq_head))];
1810 else 1703 else
1811#endif
1812 rbp = &he_dev->rbpl_base[RBP_INDEX(RBRQ_ADDR(he_dev->rbrq_head))]; 1704 rbp = &he_dev->rbpl_base[RBP_INDEX(RBRQ_ADDR(he_dev->rbrq_head))];
1813 1705
1814 buf_len = RBRQ_BUFLEN(he_dev->rbrq_head) * 4; 1706 buf_len = RBRQ_BUFLEN(he_dev->rbrq_head) * 4;
@@ -1887,12 +1779,10 @@ he_service_rbrq(struct he_dev *he_dev, int group)
1887 1779
1888 for (iov = he_vcc->iov_head; 1780 for (iov = he_vcc->iov_head;
1889 iov < he_vcc->iov_tail; ++iov) { 1781 iov < he_vcc->iov_tail; ++iov) {
1890#ifdef USE_RBPS
1891 if (iov->iov_base & RBP_SMALLBUF) 1782 if (iov->iov_base & RBP_SMALLBUF)
1892 memcpy(skb_put(skb, iov->iov_len), 1783 memcpy(skb_put(skb, iov->iov_len),
1893 he_dev->rbps_virt[RBP_INDEX(iov->iov_base)].virt, iov->iov_len); 1784 he_dev->rbps_virt[RBP_INDEX(iov->iov_base)].virt, iov->iov_len);
1894 else 1785 else
1895#endif
1896 memcpy(skb_put(skb, iov->iov_len), 1786 memcpy(skb_put(skb, iov->iov_len),
1897 he_dev->rbpl_virt[RBP_INDEX(iov->iov_base)].virt, iov->iov_len); 1787 he_dev->rbpl_virt[RBP_INDEX(iov->iov_base)].virt, iov->iov_len);
1898 } 1788 }
@@ -1937,11 +1827,9 @@ return_host_buffers:
1937 1827
1938 for (iov = he_vcc->iov_head; 1828 for (iov = he_vcc->iov_head;
1939 iov < he_vcc->iov_tail; ++iov) { 1829 iov < he_vcc->iov_tail; ++iov) {
1940#ifdef USE_RBPS
1941 if (iov->iov_base & RBP_SMALLBUF) 1830 if (iov->iov_base & RBP_SMALLBUF)
1942 rbp = &he_dev->rbps_base[RBP_INDEX(iov->iov_base)]; 1831 rbp = &he_dev->rbps_base[RBP_INDEX(iov->iov_base)];
1943 else 1832 else
1944#endif
1945 rbp = &he_dev->rbpl_base[RBP_INDEX(iov->iov_base)]; 1833 rbp = &he_dev->rbpl_base[RBP_INDEX(iov->iov_base)];
1946 1834
1947 rbp->status &= ~RBP_LOANED; 1835 rbp->status &= ~RBP_LOANED;
@@ -1977,9 +1865,7 @@ he_service_tbrq(struct he_dev *he_dev, int group)
1977 he_dev->hsp->group[group].tbrq_tail); 1865 he_dev->hsp->group[group].tbrq_tail);
1978 struct he_tpd *tpd; 1866 struct he_tpd *tpd;
1979 int slot, updated = 0; 1867 int slot, updated = 0;
1980#ifdef USE_TPD_POOL
1981 struct he_tpd *__tpd; 1868 struct he_tpd *__tpd;
1982#endif
1983 1869
1984 /* 2.1.6 transmit buffer return queue */ 1870 /* 2.1.6 transmit buffer return queue */
1985 1871
@@ -1991,7 +1877,6 @@ he_service_tbrq(struct he_dev *he_dev, int group)
1991 TBRQ_TPD(he_dev->tbrq_head), 1877 TBRQ_TPD(he_dev->tbrq_head),
1992 TBRQ_EOS(he_dev->tbrq_head) ? " EOS" : "", 1878 TBRQ_EOS(he_dev->tbrq_head) ? " EOS" : "",
1993 TBRQ_MULTIPLE(he_dev->tbrq_head) ? " MULTIPLE" : ""); 1879 TBRQ_MULTIPLE(he_dev->tbrq_head) ? " MULTIPLE" : "");
1994#ifdef USE_TPD_POOL
1995 tpd = NULL; 1880 tpd = NULL;
1996 list_for_each_entry(__tpd, &he_dev->outstanding_tpds, entry) { 1881 list_for_each_entry(__tpd, &he_dev->outstanding_tpds, entry) {
1997 if (TPD_ADDR(__tpd->status) == TBRQ_TPD(he_dev->tbrq_head)) { 1882 if (TPD_ADDR(__tpd->status) == TBRQ_TPD(he_dev->tbrq_head)) {
@@ -2006,9 +1891,6 @@ he_service_tbrq(struct he_dev *he_dev, int group)
2006 TBRQ_TPD(he_dev->tbrq_head)); 1891 TBRQ_TPD(he_dev->tbrq_head));
2007 goto next_tbrq_entry; 1892 goto next_tbrq_entry;
2008 } 1893 }
2009#else
2010 tpd = &he_dev->tpd_base[ TPD_INDEX(TBRQ_TPD(he_dev->tbrq_head)) ];
2011#endif
2012 1894
2013 if (TBRQ_EOS(he_dev->tbrq_head)) { 1895 if (TBRQ_EOS(he_dev->tbrq_head)) {
2014 HPRINTK("wake_up(tx_waitq) cid 0x%x\n", 1896 HPRINTK("wake_up(tx_waitq) cid 0x%x\n",
@@ -2038,12 +1920,8 @@ he_service_tbrq(struct he_dev *he_dev, int group)
2038 } 1920 }
2039 1921
2040next_tbrq_entry: 1922next_tbrq_entry:
2041#ifdef USE_TPD_POOL
2042 if (tpd) 1923 if (tpd)
2043 pci_pool_free(he_dev->tpd_pool, tpd, TPD_ADDR(tpd->status)); 1924 pci_pool_free(he_dev->tpd_pool, tpd, TPD_ADDR(tpd->status));
2044#else
2045 tpd->inuse = 0;
2046#endif
2047 he_dev->tbrq_head = (struct he_tbrq *) 1925 he_dev->tbrq_head = (struct he_tbrq *)
2048 ((unsigned long) he_dev->tbrq_base | 1926 ((unsigned long) he_dev->tbrq_base |
2049 TBRQ_MASK(++he_dev->tbrq_head)); 1927 TBRQ_MASK(++he_dev->tbrq_head));
@@ -2086,7 +1964,6 @@ he_service_rbpl(struct he_dev *he_dev, int group)
2086 he_writel(he_dev, RBPL_MASK(he_dev->rbpl_tail), G0_RBPL_T); 1964 he_writel(he_dev, RBPL_MASK(he_dev->rbpl_tail), G0_RBPL_T);
2087} 1965}
2088 1966
2089#ifdef USE_RBPS
2090static void 1967static void
2091he_service_rbps(struct he_dev *he_dev, int group) 1968he_service_rbps(struct he_dev *he_dev, int group)
2092{ 1969{
@@ -2113,7 +1990,6 @@ he_service_rbps(struct he_dev *he_dev, int group)
2113 if (moved) 1990 if (moved)
2114 he_writel(he_dev, RBPS_MASK(he_dev->rbps_tail), G0_RBPS_T); 1991 he_writel(he_dev, RBPS_MASK(he_dev->rbps_tail), G0_RBPS_T);
2115} 1992}
2116#endif /* USE_RBPS */
2117 1993
2118static void 1994static void
2119he_tasklet(unsigned long data) 1995he_tasklet(unsigned long data)
@@ -2124,9 +2000,7 @@ he_tasklet(unsigned long data)
2124 int updated = 0; 2000 int updated = 0;
2125 2001
2126 HPRINTK("tasklet (0x%lx)\n", data); 2002 HPRINTK("tasklet (0x%lx)\n", data);
2127#ifdef USE_TASKLET
2128 spin_lock_irqsave(&he_dev->global_lock, flags); 2003 spin_lock_irqsave(&he_dev->global_lock, flags);
2129#endif
2130 2004
2131 while (he_dev->irq_head != he_dev->irq_tail) { 2005 while (he_dev->irq_head != he_dev->irq_tail) {
2132 ++updated; 2006 ++updated;
@@ -2141,9 +2015,7 @@ he_tasklet(unsigned long data)
2141 case ITYPE_RBRQ_TIMER: 2015 case ITYPE_RBRQ_TIMER:
2142 if (he_service_rbrq(he_dev, group)) { 2016 if (he_service_rbrq(he_dev, group)) {
2143 he_service_rbpl(he_dev, group); 2017 he_service_rbpl(he_dev, group);
2144#ifdef USE_RBPS
2145 he_service_rbps(he_dev, group); 2018 he_service_rbps(he_dev, group);
2146#endif /* USE_RBPS */
2147 } 2019 }
2148 break; 2020 break;
2149 case ITYPE_TBRQ_THRESH: 2021 case ITYPE_TBRQ_THRESH:
@@ -2156,9 +2028,7 @@ he_tasklet(unsigned long data)
2156 he_service_rbpl(he_dev, group); 2028 he_service_rbpl(he_dev, group);
2157 break; 2029 break;
2158 case ITYPE_RBPS_THRESH: 2030 case ITYPE_RBPS_THRESH:
2159#ifdef USE_RBPS
2160 he_service_rbps(he_dev, group); 2031 he_service_rbps(he_dev, group);
2161#endif /* USE_RBPS */
2162 break; 2032 break;
2163 case ITYPE_PHY: 2033 case ITYPE_PHY:
2164 HPRINTK("phy interrupt\n"); 2034 HPRINTK("phy interrupt\n");
@@ -2186,9 +2056,7 @@ he_tasklet(unsigned long data)
2186 2056
2187 he_service_rbrq(he_dev, 0); 2057 he_service_rbrq(he_dev, 0);
2188 he_service_rbpl(he_dev, 0); 2058 he_service_rbpl(he_dev, 0);
2189#ifdef USE_RBPS
2190 he_service_rbps(he_dev, 0); 2059 he_service_rbps(he_dev, 0);
2191#endif /* USE_RBPS */
2192 he_service_tbrq(he_dev, 0); 2060 he_service_tbrq(he_dev, 0);
2193 break; 2061 break;
2194 default: 2062 default:
@@ -2210,9 +2078,7 @@ he_tasklet(unsigned long data)
2210 IRQ_TAIL(he_dev->irq_tail), IRQ0_HEAD); 2078 IRQ_TAIL(he_dev->irq_tail), IRQ0_HEAD);
2211 (void) he_readl(he_dev, INT_FIFO); /* 8.1.2 controller errata; flush posted writes */ 2079 (void) he_readl(he_dev, INT_FIFO); /* 8.1.2 controller errata; flush posted writes */
2212 } 2080 }
2213#ifdef USE_TASKLET
2214 spin_unlock_irqrestore(&he_dev->global_lock, flags); 2081 spin_unlock_irqrestore(&he_dev->global_lock, flags);
2215#endif
2216} 2082}
2217 2083
2218static irqreturn_t 2084static irqreturn_t
@@ -2244,11 +2110,7 @@ he_irq_handler(int irq, void *dev_id)
2244 2110
2245 if (he_dev->irq_head != he_dev->irq_tail) { 2111 if (he_dev->irq_head != he_dev->irq_tail) {
2246 handled = 1; 2112 handled = 1;
2247#ifdef USE_TASKLET
2248 tasklet_schedule(&he_dev->tasklet); 2113 tasklet_schedule(&he_dev->tasklet);
2249#else
2250 he_tasklet((unsigned long) he_dev);
2251#endif
2252 he_writel(he_dev, INT_CLEAR_A, INT_FIFO); /* clear interrupt */ 2114 he_writel(he_dev, INT_CLEAR_A, INT_FIFO); /* clear interrupt */
2253 (void) he_readl(he_dev, INT_FIFO); /* flush posted writes */ 2115 (void) he_readl(he_dev, INT_FIFO); /* flush posted writes */
2254 } 2116 }
@@ -2305,23 +2167,14 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid)
2305 dev_kfree_skb_any(tpd->skb); 2167 dev_kfree_skb_any(tpd->skb);
2306 atomic_inc(&tpd->vcc->stats->tx_err); 2168 atomic_inc(&tpd->vcc->stats->tx_err);
2307 } 2169 }
2308#ifdef USE_TPD_POOL
2309 pci_pool_free(he_dev->tpd_pool, tpd, TPD_ADDR(tpd->status)); 2170 pci_pool_free(he_dev->tpd_pool, tpd, TPD_ADDR(tpd->status));
2310#else
2311 tpd->inuse = 0;
2312#endif
2313 return; 2171 return;
2314 } 2172 }
2315 } 2173 }
2316 2174
2317 /* 2.1.5 transmit packet descriptor ready queue */ 2175 /* 2.1.5 transmit packet descriptor ready queue */
2318#ifdef USE_TPD_POOL
2319 list_add_tail(&tpd->entry, &he_dev->outstanding_tpds); 2176 list_add_tail(&tpd->entry, &he_dev->outstanding_tpds);
2320 he_dev->tpdrq_tail->tpd = TPD_ADDR(tpd->status); 2177 he_dev->tpdrq_tail->tpd = TPD_ADDR(tpd->status);
2321#else
2322 he_dev->tpdrq_tail->tpd = he_dev->tpd_base_phys +
2323 (TPD_INDEX(tpd->status) * sizeof(struct he_tpd));
2324#endif
2325 he_dev->tpdrq_tail->cid = cid; 2178 he_dev->tpdrq_tail->cid = cid;
2326 wmb(); 2179 wmb();
2327 2180
@@ -2511,13 +2364,8 @@ he_open(struct atm_vcc *vcc)
2511 goto open_failed; 2364 goto open_failed;
2512 } 2365 }
2513 2366
2514#ifdef USE_RBPS
2515 rsr1 = RSR1_GROUP(0); 2367 rsr1 = RSR1_GROUP(0);
2516 rsr4 = RSR4_GROUP(0); 2368 rsr4 = RSR4_GROUP(0);
2517#else /* !USE_RBPS */
2518 rsr1 = RSR1_GROUP(0)|RSR1_RBPL_ONLY;
2519 rsr4 = RSR4_GROUP(0)|RSR4_RBPL_ONLY;
2520#endif /* USE_RBPS */
2521 rsr0 = vcc->qos.rxtp.traffic_class == ATM_UBR ? 2369 rsr0 = vcc->qos.rxtp.traffic_class == ATM_UBR ?
2522 (RSR0_EPD_ENABLE|RSR0_PPD_ENABLE) : 0; 2370 (RSR0_EPD_ENABLE|RSR0_PPD_ENABLE) : 0;
2523 2371
diff --git a/drivers/atm/he.h b/drivers/atm/he.h
index b87d6ccabac1..c2983e0d4ec1 100644
--- a/drivers/atm/he.h
+++ b/drivers/atm/he.h
@@ -51,8 +51,6 @@
51#define CONFIG_IRQ_SIZE 128 51#define CONFIG_IRQ_SIZE 128
52#define CONFIG_IRQ_THRESH (CONFIG_IRQ_SIZE/2) 52#define CONFIG_IRQ_THRESH (CONFIG_IRQ_SIZE/2)
53 53
54#define CONFIG_NUMTPDS 256
55
56#define CONFIG_TPDRQ_SIZE 512 54#define CONFIG_TPDRQ_SIZE 512
57#define TPDRQ_MASK(x) (((unsigned long)(x))&((CONFIG_TPDRQ_SIZE<<3)-1)) 55#define TPDRQ_MASK(x) (((unsigned long)(x))&((CONFIG_TPDRQ_SIZE<<3)-1))
58 56
@@ -140,12 +138,7 @@ struct he_tpd {
140 struct sk_buff *skb; 138 struct sk_buff *skb;
141 struct atm_vcc *vcc; 139 struct atm_vcc *vcc;
142 140
143#ifdef USE_TPD_POOL
144 struct list_head entry; 141 struct list_head entry;
145#else
146 u32 inuse;
147 char padding[32 - sizeof(u32) - (2*sizeof(void*))];
148#endif
149}; 142};
150 143
151#define TPD_ALIGNMENT 64 144#define TPD_ALIGNMENT 64
@@ -291,16 +284,9 @@ struct he_dev {
291 volatile unsigned *irq_tailoffset; 284 volatile unsigned *irq_tailoffset;
292 int irq_peak; 285 int irq_peak;
293 286
294#ifdef USE_TASKLET
295 struct tasklet_struct tasklet; 287 struct tasklet_struct tasklet;
296#endif
297#ifdef USE_TPD_POOL
298 struct pci_pool *tpd_pool; 288 struct pci_pool *tpd_pool;
299 struct list_head outstanding_tpds; 289 struct list_head outstanding_tpds;
300#else
301 struct he_tpd *tpd_head, *tpd_base, *tpd_end;
302 dma_addr_t tpd_base_phys;
303#endif
304 290
305 dma_addr_t tpdrq_phys; 291 dma_addr_t tpdrq_phys;
306 struct he_tpdrq *tpdrq_base, *tpdrq_tail, *tpdrq_head; 292 struct he_tpdrq *tpdrq_base, *tpdrq_tail, *tpdrq_head;
@@ -311,25 +297,13 @@ struct he_dev {
311 struct he_rbrq *rbrq_base, *rbrq_head; 297 struct he_rbrq *rbrq_base, *rbrq_head;
312 int rbrq_peak; 298 int rbrq_peak;
313 299
314#ifdef USE_RBPL_POOL
315 struct pci_pool *rbpl_pool; 300 struct pci_pool *rbpl_pool;
316#else
317 void *rbpl_pages;
318 dma_addr_t rbpl_pages_phys;
319#endif
320 dma_addr_t rbpl_phys; 301 dma_addr_t rbpl_phys;
321 struct he_rbp *rbpl_base, *rbpl_tail; 302 struct he_rbp *rbpl_base, *rbpl_tail;
322 struct he_virt *rbpl_virt; 303 struct he_virt *rbpl_virt;
323 int rbpl_peak; 304 int rbpl_peak;
324 305
325#ifdef USE_RBPS
326#ifdef USE_RBPS_POOL
327 struct pci_pool *rbps_pool; 306 struct pci_pool *rbps_pool;
328#else
329 void *rbps_pages;
330 dma_addr_t rbps_pages_phys;
331#endif
332#endif
333 dma_addr_t rbps_phys; 307 dma_addr_t rbps_phys;
334 struct he_rbp *rbps_base, *rbps_tail; 308 struct he_rbp *rbps_base, *rbps_tail;
335 struct he_virt *rbps_virt; 309 struct he_virt *rbps_virt;