diff --git sys/dev/ral/if_ral_pci.c sys/dev/ral/if_ral_pci.c index 15c11bd..c3438a3 100644 --- sys/dev/ral/if_ral_pci.c +++ sys/dev/ral/if_ral_pci.c @@ -71,17 +71,37 @@ struct ral_pci_ident { }; static const struct ral_pci_ident ral_pci_ids[] = { + { 0x1432, 0x7708, "Edimax RT2860" }, + { 0x1432, 0x7711, "Edimax RT3591" }, + { 0x1432, 0x7722, "Edimax RT3591" }, + { 0x1432, 0x7727, "Edimax RT2860" }, + { 0x1432, 0x7728, "Edimax RT2860" }, + { 0x1432, 0x7738, "Edimax RT2860" }, + { 0x1432, 0x7748, "Edimax RT2860" }, + { 0x1432, 0x7758, "Edimax RT2860" }, + { 0x1432, 0x7768, "Edimax RT2860" }, + { 0x1462, 0x891a, "MSI RT3090" }, { 0x1814, 0x0201, "Ralink Technology RT2560" }, { 0x1814, 0x0301, "Ralink Technology RT2561S" }, { 0x1814, 0x0302, "Ralink Technology RT2561" }, { 0x1814, 0x0401, "Ralink Technology RT2661" }, - { 0x1814, 0x0601, "Ralink Technology RT2860 PCI" }, - { 0x1814, 0x0681, "Ralink Technology RT2860 PCIe" }, - { 0x1814, 0x0701, "Ralink Technology RT2870 PCI" }, - { 0x1814, 0x0781, "Ralink Technology RT2870 PCIe" }, - { 0x1814, 0x3060, "Ralink Technology RT3060 PCI" }, - { 0x1814, 0x3090, "Ralink Technology RT3090 PCIe" }, - + { 0x1814, 0x0601, "Ralink Technology RT2860" }, + { 0x1814, 0x0681, "Ralink Technology RT2890" }, + { 0x1814, 0x0701, "Ralink Technology RT2760" }, + { 0x1814, 0x0781, "Ralink Technology RT2790" }, + { 0x1814, 0x3060, "Ralink Technology RT3060" }, + { 0x1814, 0x3062, "Ralink Technology RT3062" }, + { 0x1814, 0x3090, "Ralink Technology RT3090" }, + { 0x1814, 0x3091, "Ralink Technology RT3091" }, + { 0x1814, 0x3092, "Ralink Technology RT3092" }, + { 0x1814, 0x3390, "Ralink Technology RT3390" }, + { 0x1814, 0x3562, "Ralink Technology RT3562" }, + { 0x1814, 0x3592, "Ralink Technology RT3592" }, + { 0x1814, 0x3593, "Ralink Technology RT3593" }, + { 0x1814, 0x5390, "Ralink Technology RT5390" }, + { 0x1814, 0x539a, "Ralink Technology RT5390" }, + { 0x1814, 0x539f, "Ralink Technology RT5390" }, + { 0x1a3b, 0x1059, "AWT RT2890" }, { 0, 0, NULL } }; @@ -204,18 +224,9 @@ ral_pci_attach(device_t dev) case 0x0401: psc->sc_opns = &ral_rt2661_opns; break; - case 0x0601: - case 0x0681: - case 0x0701: - case 0x0781: - case 0x3060: - case 0x3090: + default: psc->sc_opns = &ral_rt2860_opns; break; - default: - device_printf(dev, "ERROR: Unknown card 0x%04x\n", - pci_get_device(dev)); - return (ENXIO); } psc->mem_rid = RAL_PCI_BAR0; diff --git sys/dev/ral/rt2860.c sys/dev/ral/rt2860.c index caa1586..97de950 100644 --- sys/dev/ral/rt2860.c +++ sys/dev/ral/rt2860.c @@ -71,7 +71,6 @@ __FBSDID("$FreeBSD$"); #ifdef RAL_DEBUG #define DPRINTF(x) do { if (sc->sc_debug > 0) printf x; } while (0) #define DPRINTFN(n, x) do { if (sc->sc_debug >= (n)) printf x; } while (0) -int rt2860_debug = 0; #else #define DPRINTF(x) #define DPRINTFN(n, x) @@ -229,6 +228,7 @@ rt2860_attach(device_t dev, int id) uint8_t macaddr[IEEE80211_ADDR_LEN]; sc->sc_dev = dev; + sc->sc_debug = 0; ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211); if (ifp == NULL) { @@ -264,10 +264,12 @@ rt2860_attach(device_t dev, int id) /* retrieve RF rev. no and various other things from EEPROM */ rt2860_read_eeprom(sc, macaddr); - device_printf(sc->sc_dev, - "MAC/BBP RT%X (rev 0x%04X), RF %s (MIMO %dT%dR)\n", - sc->mac_ver, sc->mac_rev, rt2860_get_rf(sc->rf_rev), - sc->ntxchains, sc->nrxchains); + if (bootverbose) { + device_printf(sc->sc_dev, "MAC/BBP RT%X (rev 0x%04X), " + "RF %s (MIMO %dT%dR), address %6D\n", + sc->mac_ver, sc->mac_rev, rt2860_get_rf(sc->rf_rev), + sc->ntxchains, sc->nrxchains, macaddr, ":"); + } /* * Allocate Tx (4 EDCAs + HCCA + Mgt) and Rx rings. @@ -320,7 +322,9 @@ rt2860_attach(device_t dev, int id) | IEEE80211_C_SHPREAMBLE /* short preamble supported */ | IEEE80211_C_SHSLOT /* short slot time supported */ | IEEE80211_C_WPA /* capable of WPA1+WPA2 */ +#if 0 | IEEE80211_C_BGSCAN /* capable of bg scanning */ +#endif | IEEE80211_C_WME /* 802.11e */ ; @@ -542,14 +546,6 @@ rt2860_alloc_tx_ring(struct rt2860_softc *sc, struct rt2860_tx_ring *ring) bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_PREWRITE); - error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0, - BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES, - RT2860_MAX_SCATTER, MCLBYTES, 0, NULL, NULL, &ring->data_dmat); - if (error != 0) { - device_printf(sc->sc_dev, "could not create data DMA tag\n"); - goto fail; - } - return 0; fail: rt2860_free_tx_ring(sc, ring); @@ -567,9 +563,9 @@ rt2860_reset_tx_ring(struct rt2860_softc *sc, struct rt2860_tx_ring *ring) continue; /* nothing mapped in this slot */ if (data->m != NULL) { - bus_dmamap_sync(ring->data_dmat, data->map, + bus_dmamap_sync(sc->txwi_dmat, data->map, BUS_DMASYNC_POSTWRITE); - bus_dmamap_unload(ring->data_dmat, data->map); + bus_dmamap_unload(sc->txwi_dmat, data->map); m_freem(data->m); data->m = NULL; } @@ -606,9 +602,9 @@ rt2860_free_tx_ring(struct rt2860_softc *sc, struct rt2860_tx_ring *ring) continue; /* nothing mapped in this slot */ if (data->m != NULL) { - bus_dmamap_sync(ring->data_dmat, data->map, + bus_dmamap_sync(sc->txwi_dmat, data->map, BUS_DMASYNC_POSTWRITE); - bus_dmamap_unload(ring->data_dmat, data->map); + bus_dmamap_unload(sc->txwi_dmat, data->map); m_freem(data->m); } if (data->ni != NULL) @@ -1150,9 +1146,9 @@ rt2860_tx_intr(struct rt2860_softc *sc, int qid) struct rt2860_tx_data *data = ring->data[ring->next]; if (data != NULL) { - bus_dmamap_sync(ring->data_dmat, data->map, + bus_dmamap_sync(sc->txwi_dmat, data->map, BUS_DMASYNC_POSTWRITE); - bus_dmamap_unload(ring->data_dmat, data->map); + bus_dmamap_unload(sc->txwi_dmat, data->map); if (data->m->m_flags & M_TXCB) { ieee80211_process_callback(data->ni, data->m, 0); @@ -1611,7 +1607,7 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni) memcpy(txwi + 1, wh, hdrlen); m_adj(m, hdrlen); - error = bus_dmamap_load_mbuf_sg(ring->data_dmat, data->map, m, segs, + error = bus_dmamap_load_mbuf_sg(sc->txwi_dmat, data->map, m, segs, &nsegs, 0); if (__predict_false(error != 0 && error != EFBIG)) { device_printf(sc->sc_dev, "can't map mbuf (error %d)\n", @@ -1625,7 +1621,7 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni) if (ring->queued + ntxds >= RT2860_TX_RING_COUNT) { /* not enough free TXDs, force mbuf defrag */ - bus_dmamap_unload(ring->data_dmat, data->map); + bus_dmamap_unload(sc->txwi_dmat, data->map); error = EFBIG; } } @@ -1639,7 +1635,7 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni) } m = m1; - error = bus_dmamap_load_mbuf_sg(ring->data_dmat, data->map, m, + error = bus_dmamap_load_mbuf_sg(sc->txwi_dmat, data->map, m, segs, &nsegs, 0); if (__predict_false(error != 0)) { device_printf(sc->sc_dev, "can't map mbuf (error %d)\n", @@ -1653,7 +1649,7 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni) if (ring->queued + ntxds >= RT2860_TX_RING_COUNT) { /* this is a hopeless case, drop the mbuf! */ - bus_dmamap_unload(ring->data_dmat, data->map); + bus_dmamap_unload(sc->txwi_dmat, data->map); m_freem(m); return ENOBUFS; } @@ -1697,7 +1693,7 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni) ring->data[ring->cur] = data; bus_dmamap_sync(sc->txwi_dmat, sc->txwi_map, BUS_DMASYNC_PREWRITE); - bus_dmamap_sync(ring->data_dmat, data->map, BUS_DMASYNC_PREWRITE); + bus_dmamap_sync(sc->txwi_dmat, data->map, BUS_DMASYNC_PREWRITE); bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_PREWRITE); DPRINTFN(4, ("sending frame qid=%d wcid=%d nsegs=%d ridx=%d\n", @@ -1863,7 +1859,7 @@ rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m, memcpy(txwi + 1, wh, hdrlen); m_adj(m, hdrlen); - error = bus_dmamap_load_mbuf_sg(ring->data_dmat, data->map, m, segs, + error = bus_dmamap_load_mbuf_sg(sc->txwi_dmat, data->map, m, segs, &nsegs, 0); if (__predict_false(error != 0 && error != EFBIG)) { device_printf(sc->sc_dev, "can't map mbuf (error %d)\n", @@ -1877,7 +1873,7 @@ rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m, if (ring->queued + ntxds >= RT2860_TX_RING_COUNT) { /* not enough free TXDs, force mbuf defrag */ - bus_dmamap_unload(ring->data_dmat, data->map); + bus_dmamap_unload(sc->txwi_dmat, data->map); error = EFBIG; } } @@ -1891,7 +1887,7 @@ rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m, } m = m1; - error = bus_dmamap_load_mbuf_sg(ring->data_dmat, data->map, m, + error = bus_dmamap_load_mbuf_sg(sc->txwi_dmat, data->map, m, segs, &nsegs, 0); if (__predict_false(error != 0)) { device_printf(sc->sc_dev, "can't map mbuf (error %d)\n", @@ -1905,7 +1901,7 @@ rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m, if (ring->queued + ntxds >= RT2860_TX_RING_COUNT) { /* this is a hopeless case, drop the mbuf! */ - bus_dmamap_unload(ring->data_dmat, data->map); + bus_dmamap_unload(sc->txwi_dmat, data->map); m_freem(m); return ENOBUFS; } @@ -1949,7 +1945,7 @@ rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m, ring->data[ring->cur] = data; bus_dmamap_sync(sc->txwi_dmat, sc->txwi_map, BUS_DMASYNC_PREWRITE); - bus_dmamap_sync(ring->data_dmat, data->map, BUS_DMASYNC_PREWRITE); + bus_dmamap_sync(sc->txwi_dmat, data->map, BUS_DMASYNC_PREWRITE); bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_PREWRITE); DPRINTFN(4, ("sending frame qid=%d wcid=%d nsegs=%d ridx=%d\n", diff --git sys/dev/ral/rt2860var.h sys/dev/ral/rt2860var.h index ffd1a1a..06b95e5 100644 --- sys/dev/ral/rt2860var.h +++ sys/dev/ral/rt2860var.h @@ -75,7 +75,6 @@ struct rt2860_tx_ring { bus_addr_t paddr; bus_dma_tag_t desc_dmat; bus_dmamap_t desc_map; - bus_dma_tag_t data_dmat; bus_dma_segment_t seg; struct rt2860_tx_data *data[RT2860_TX_RING_COUNT]; int cur;