Changeset 41
- Timestamp:
- 03/15/03 19:31:49 (6 years ago)
- Files:
-
- cvs-import/trunk/driver/if_ath.c (modified) (31 diffs)
- cvs-import/trunk/driver/if_ath_pci.c (modified) (1 diff)
- cvs-import/trunk/driver/if_athvar.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cvs-import/trunk/driver/if_ath.c
r40 r41 76 76 static void ath_draintxq(struct ath_softc *); 77 77 static void ath_stoprecv(struct ath_softc *); 78 static int ath_startrecv(struct ath_softc*);78 static int ath_startrecv(struct net_device *); 79 79 static void ath_next_scan(unsigned long); 80 80 static void ath_calibrate(unsigned long); … … 117 117 int i, error = 0, ix; 118 118 u_int8_t *r; 119 #define ATH_MAXCHAN 32 /* number of potential channels */ 119 120 HAL_CHANNEL chans[ATH_MAXCHAN]; /* XXX get off stack */ 120 121 HAL_STATUS status; 121 122 DPRINTF(("ath_attach: unit %d devid 0x%x\n", sc->sc_unit, devid)); 122 u8 cache_line_size; 123 124 DPRINTF(("ath_attach: devid 0x%x\n", devid)); 123 125 124 126 spin_lock_init(&sc->sc_lock); 125 127 skb_queue_head_init(&sc->sc_sndq); 128 129 /* 130 * NB: cache line size is used to size rx buffers and align 131 * various data structures. 132 */ 133 pci_read_config_byte(sc->sc_pdev, PCI_CACHE_LINE_SIZE, 134 &cache_line_size); 135 sc->sc_cachelsz = cache_line_size << 4; 126 136 127 137 ah = ath_hal_attach(devid, sc, 0, (void *) dev->mem_start, &status); … … 412 422 if (ic->ic_flags & IEEE80211_F_WEPON) 413 423 ath_initkeytable(sc); 414 if (ath_startrecv( sc) != 0) {424 if (ath_startrecv(dev) != 0) { 415 425 printk("%s: unable to start recv logic\n", dev->name); 416 426 return EIO; … … 495 505 /* free transmit queue */ 496 506 while ((bf = TAILQ_FIRST(&sc->sc_txq)) != NULL) { 497 pci_unmap_single(sc->sc_p ci_dev,507 pci_unmap_single(sc->sc_pdev, 498 508 bf->bf_skbaddr, bf->bf_skb->len, PCI_DMA_FROMDEVICE); 499 509 dev_kfree_skb(bf->bf_skb); … … 556 566 break; 557 567 } 568 TAILQ_REMOVE(&sc->sc_txbuf, bf, bf_list); 558 569 skb = skb_dequeue(&ic->ic_mgtq); 559 570 wh = (struct ieee80211_frame *) skb->data; … … 588 599 break; 589 600 } 601 TAILQ_REMOVE(&sc->sc_txbuf, bf, bf_list); 590 602 skb = skb_dequeue(&sc->sc_sndq); 591 603 ic->ic_stats.tx_packets++; … … 598 610 sc->sc_stats.ast_tx_encap++; 599 611 ic->ic_stats.tx_errors++; 612 TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); 600 613 continue; 601 614 } … … 614 627 sc->sc_stats.ast_tx_nonode++; 615 628 ic->ic_stats.tx_errors++; 629 TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); 616 630 continue; 617 631 } … … 634 648 if (ath_tx_start(sc, ni, bf, skb)) { 635 649 ic->ic_stats.tx_errors++; 650 TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); 636 651 continue; 637 652 } … … 732 747 bf = sc->sc_bcbuf; 733 748 if (bf->bf_skb != NULL) { 734 pci_unmap_single(sc->sc_p ci_dev,749 pci_unmap_single(sc->sc_pdev, 735 750 bf->bf_skbaddr, bf->bf_skb->len, PCI_DMA_TODEVICE); 736 751 dev_kfree_skb(bf->bf_skb); … … 804 819 skb_trim(skb, frm - skb->data); 805 820 806 bf->bf_skbaddr = pci_map_single(sc->sc_p ci_dev,821 bf->bf_skbaddr = pci_map_single(sc->sc_pdev, 807 822 skb->data, skb->len, PCI_DMA_TODEVICE); 808 823 DPRINTF2(("ath_beacon_alloc: skb %p [data %p len %u] skbaddr %p\n", … … 849 864 return; 850 865 } 851 pci_dma_sync_single(sc->sc_p ci_dev,866 pci_dma_sync_single(sc->sc_pdev, 852 867 bf->bf_skbaddr, bf->bf_skb->len, PCI_DMA_TODEVICE); 853 868 ath_hal_qbeacon(ah, bf); … … 868 883 869 884 if (bf->bf_skb != NULL) { 870 pci_unmap_single(sc->sc_p ci_dev,885 pci_unmap_single(sc->sc_pdev, 871 886 bf->bf_skbaddr, bf->bf_skb->len, PCI_DMA_TODEVICE); 872 887 dev_kfree_skb(bf->bf_skb); … … 886 901 sc->sc_desc_len = sizeof(struct ath_desc) * 887 902 (ATH_TXBUF * ATH_TXDESC + ATH_RXBUF + 1); 888 sc->sc_desc = pci_alloc_consistent(sc->sc_p ci_dev,903 sc->sc_desc = pci_alloc_consistent(sc->sc_pdev, 889 904 sc->sc_desc_len, &sc->sc_desc_daddr); 890 905 if (sc->sc_desc == NULL) … … 901 916 memset(bf, 0, bsize); 902 917 sc->sc_bufptr = bf; 918 903 919 TAILQ_INIT(&sc->sc_rxbuf); 904 920 for (i = 0; i < ATH_RXBUF; i++, bf++, ds++) { … … 908 924 TAILQ_INSERT_TAIL(&sc->sc_rxbuf, bf, bf_list); 909 925 } 926 910 927 TAILQ_INIT(&sc->sc_txbuf); 911 928 for (i = 0; i < ATH_TXBUF; i++, bf++, ds += ATH_TXDESC) { … … 916 933 } 917 934 TAILQ_INIT(&sc->sc_txq); 935 918 936 /* beacon buffer */ 919 937 bf->bf_desc = ds; … … 921 939 sc->sc_bcbuf = bf; 922 940 return 0; 923 924 941 bad: 925 pci_free_consistent(sc->sc_p ci_dev, sc->sc_desc_len,942 pci_free_consistent(sc->sc_pdev, sc->sc_desc_len, 926 943 sc->sc_desc, sc->sc_desc_daddr); 927 944 sc->sc_desc = NULL; … … 935 952 936 953 TAILQ_FOREACH(bf, &sc->sc_txq, bf_list) { 937 pci_unmap_single(sc->sc_p ci_dev,954 pci_unmap_single(sc->sc_pdev, 938 955 bf->bf_skbaddr, bf->bf_skb->len, PCI_DMA_TODEVICE); 939 956 dev_kfree_skb(bf->bf_skb); … … 942 959 TAILQ_FOREACH(bf, &sc->sc_rxbuf, bf_list) 943 960 if (bf->bf_skb != NULL) { 944 pci_unmap_single(sc->sc_p ci_dev,961 pci_unmap_single(sc->sc_pdev, 945 962 bf->bf_skbaddr, bf->bf_skb->len, 946 963 PCI_DMA_FROMDEVICE); … … 950 967 if (sc->sc_bcbuf != NULL) { 951 968 bf = sc->sc_bcbuf; 952 pci_unmap_single(sc->sc_p ci_dev, bf->bf_skbaddr,969 pci_unmap_single(sc->sc_pdev, bf->bf_skbaddr, 953 970 bf->bf_skb->len, PCI_DMA_TODEVICE); 954 971 sc->sc_bcbuf = NULL; 955 972 } 956 973 957 pci_free_consistent(sc->sc_p ci_dev, sc->sc_desc_len,974 pci_free_consistent(sc->sc_pdev, sc->sc_desc_len, 958 975 sc->sc_desc, sc->sc_desc_daddr); 959 976 … … 985 1002 skb = bf->bf_skb; 986 1003 if (skb == NULL) { 987 skb = dev_alloc_skb(IEEE80211_MAX_LEN); 1004 int off; 1005 1006 skb = dev_alloc_skb(sc->sc_rxbufsize); 988 1007 if (skb == NULL) 989 1008 return ENOMEM; 990 1009 skb->dev = &sc->sc_ic.ic_dev; 991 1010 bf->bf_skb = skb; 992 } 993 bf->bf_skbaddr = pci_map_single(sc->sc_pci_dev, 994 skb->data, skb->len, PCI_DMA_FROMDEVICE); 1011 1012 /* align to cache line size, buffer is assumed large enough */ 1013 off = ((unsigned long) skb->data) % sc->sc_cachelsz; 1014 if (off) 1015 skb_reserve(skb, sc->sc_cachelsz - off); 1016 bf->bf_skbaddr = pci_map_single(sc->sc_pdev, 1017 skb->data, skb->len, PCI_DMA_FROMDEVICE); 1018 } 995 1019 996 1020 /* setup descriptors */ … … 1036 1060 if (rate == 72) 1037 1061 rate = 54; 1038 pci_dma_sync_single(sc->sc_p ci_dev,1062 pci_dma_sync_single(sc->sc_pdev, 1039 1063 bf->bf_skbaddr, skb->len, PCI_DMA_FROMDEVICE); 1040 1064 … … 1096 1120 goto rx_next; 1097 1121 } 1098 pci_unmap_single(sc->sc_p ci_dev,1122 pci_unmap_single(sc->sc_pdev, 1099 1123 bf->bf_skbaddr, skb->len, PCI_DMA_FROMDEVICE); 1100 1124 bf->bf_skb = NULL; … … 1182 1206 * also calculates the number of descriptors we need. 1183 1207 */ 1184 bf->bf_skbaddr = pci_map_single(sc->sc_p ci_dev,1208 bf->bf_skbaddr = pci_map_single(sc->sc_pdev, 1185 1209 skb->data, skb->len, PCI_DMA_TODEVICE); 1186 1210 DPRINTF2(("ath_tx_start: skb %p [data %p len %u] skbaddr %x\n", … … 1231 1255 ds->ds_link, ds->ds_data, ds->ds_ctl0, ds->ds_ctl1)); 1232 1256 1233 TAILQ_REMOVE(&sc->sc_txbuf, bf, bf_list);1234 1257 TAILQ_INSERT_TAIL(&sc->sc_txq, bf, bf_list); 1235 1258 if (sc->sc_txlink == NULL) { … … 1288 1311 ATH_BITVAL(ds->ds_status0, AR_LongRetryCnt); 1289 1312 } 1290 pci_unmap_single(sc->sc_p ci_dev,1313 pci_unmap_single(sc->sc_pdev, 1291 1314 bf->bf_skbaddr, bf->bf_skb->len, PCI_DMA_TODEVICE); 1292 1315 dev_kfree_skb(bf->bf_skb); … … 1326 1349 ath_printtxbuf(bf); 1327 1350 #endif /* AR_DEBUG */ 1328 pci_unmap_single(sc->sc_p ci_dev,1351 pci_unmap_single(sc->sc_pdev, 1329 1352 bf->bf_skbaddr, bf->bf_skb->len, PCI_DMA_TODEVICE); 1330 1353 dev_kfree_skb(bf->bf_skb); … … 1370 1393 */ 1371 1394 static int 1372 ath_startrecv(struct ath_softc *sc) 1373 { 1395 ath_startrecv(struct net_device *dev) 1396 { 1397 struct ath_softc *sc = dev->priv; 1374 1398 struct ath_hal *ah = sc->sc_ah; 1375 1399 struct ath_buf *bf; 1400 1401 sc->sc_rxbufsize = dev->mtu + IEEE80211_CRC_LEN + 1402 (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + 1403 IEEE80211_WEP_CRCLEN) + (sc->sc_cachelsz - 1); 1404 DPRINTF(("ath_startrecv: mtu %u cachelsz %u rxbufsize %u\n", 1405 dev->mtu, sc->sc_cachelsz, sc->sc_rxbufsize)); 1376 1406 1377 1407 sc->sc_rxlink = NULL; … … 1384 1414 } 1385 1415 } 1416 1386 1417 bf = TAILQ_FIRST(&sc->sc_rxbuf); 1387 1418 ath_hal_putrxbuf(ah, bf->bf_daddr); … … 1447 1478 * Re-enable rx framework. 1448 1479 */ 1449 if (ath_startrecv( sc) != 0) {1480 if (ath_startrecv(dev) != 0) { 1450 1481 printk("%s: ath_chan_set: unable to restart recv logic\n", dev->name); 1451 1482 return EIO; cvs-import/trunk/driver/if_ath_pci.c
r38 r41 122 122 dev->priv = sc; 123 123 124 sc->aps_sc.sc_p ci_dev = pdev;124 sc->aps_sc.sc_pdev = pdev; 125 125 126 126 pci_set_drvdata(pdev, dev); cvs-import/trunk/driver/if_athvar.h
r39 r41 40 40 #define ATH_RXBUF 40 /* number of RX buffers */ 41 41 #define ATH_TXBUF 10 /* number of TX buffers */ 42 #define ATH_TXDESC 4 /* number of descriptors per buffer */ 43 #define ATH_MAXCHAN 32 /* number of potential channels */ 42 #define ATH_TXDESC 1 /* number of descriptors per buffer */ 44 43 45 44 /* statistics for node */ … … 91 90 spinlock_t sc_lock; 92 91 struct ath_hal *sc_ah; /* Atheros HAL */ 93 struct pci_dev *sc_pci_dev; /* associated pci device */ 94 int sc_unit; /* logical card number */ 95 int sc_devno; /* PCI device # */ 92 struct pci_dev *sc_pdev; /* associated pci device */ 96 93 int (*sc_enable)(struct ath_softc *); 97 94 void (*sc_disable)(struct ath_softc *); … … 99 96 sc_invalid : 1,/* ??? deactivated */ 100 97 sc_oactive : 1;/* output processing active */ 98 int sc_cachelsz; /* system cache line size */ 99 int sc_rxbufsize; /* rx size based on mtu */ 101 100 TAILQ_HEAD(, ath_buf) sc_rxbuf, /* receive buffer */ 102 101 sc_txbuf, /* transmit buffer */
