Lines Matching refs:mac
537 struct bwn_mac *mac; in bwn_attach() local
549 mac = NULL; in bwn_attach()
615 mac = malloc(sizeof(*mac), M_DEVBUF, M_WAITOK | M_ZERO); in bwn_attach()
616 mac->mac_sc = sc; in bwn_attach()
617 mac->mac_status = BWN_MAC_STATUS_UNINIT; in bwn_attach()
619 mac->mac_flags |= BWN_MAC_FLAG_BADFRAME_PREEMP; in bwn_attach()
621 TASK_INIT(&mac->mac_hwreset, 0, bwn_hwreset, mac); in bwn_attach()
622 NET_TASK_INIT(&mac->mac_intrtask, 0, bwn_intrtask, mac); in bwn_attach()
623 TASK_INIT(&mac->mac_txpower, 0, bwn_txpwr, mac); in bwn_attach()
625 error = bwn_attach_core(mac); in bwn_attach()
628 error = bwn_led_attach(mac); in bwn_attach()
636 sc->sc_board_info.board_srom_rev, mac->mac_phy.analog, in bwn_attach()
637 mac->mac_phy.type, mac->mac_phy.rev, mac->mac_phy.rf_manuf, in bwn_attach()
638 mac->mac_phy.rf_ver, mac->mac_phy.rf_rev); in bwn_attach()
639 if (mac->mac_flags & BWN_MAC_FLAG_DMA) in bwn_attach()
640 device_printf(sc->sc_dev, "DMA (%d bits)\n", mac->mac_dmatype); in bwn_attach()
649 mac->mac_rid_irq = 0; in bwn_attach()
650 mac->mac_res_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, in bwn_attach()
651 &mac->mac_rid_irq, RF_ACTIVE | RF_SHAREABLE); in bwn_attach()
653 if (mac->mac_res_irq == NULL) { in bwn_attach()
659 error = bus_setup_intr(dev, mac->mac_res_irq, in bwn_attach()
660 INTR_TYPE_NET | INTR_MPSAFE, bwn_intr, NULL, mac, in bwn_attach()
661 &mac->mac_intrhand); in bwn_attach()
668 TAILQ_INSERT_TAIL(&sc->sc_maclist, mac, mac_list); in bwn_attach()
678 if (mac != NULL && mac->mac_res_irq != NULL) { in bwn_attach()
679 bus_release_resource(dev, SYS_RES_IRQ, mac->mac_rid_irq, in bwn_attach()
680 mac->mac_res_irq); in bwn_attach()
683 free(mac, M_DEVBUF); in bwn_attach()
838 bwn_phy_detach(struct bwn_mac *mac) in bwn_phy_detach() argument
841 if (mac->mac_phy.detach != NULL) in bwn_phy_detach()
842 mac->mac_phy.detach(mac); in bwn_phy_detach()
849 struct bwn_mac *mac = sc->sc_curmac; in bwn_detach() local
858 bwn_dma_free(mac); in bwn_detach()
863 bwn_phy_detach(mac); in bwn_detach()
864 ieee80211_draintask(ic, &mac->mac_hwreset); in bwn_detach()
865 ieee80211_draintask(ic, &mac->mac_txpower); in bwn_detach()
868 taskqueue_drain(sc->sc_tq, &mac->mac_intrtask); in bwn_detach()
871 if (mac->mac_intrhand != NULL) { in bwn_detach()
872 bus_teardown_intr(dev, mac->mac_res_irq, mac->mac_intrhand); in bwn_detach()
873 mac->mac_intrhand = NULL; in bwn_detach()
879 bus_release_resource(dev, SYS_RES_IRQ, mac->mac_rid_irq, in bwn_detach()
880 mac->mac_res_irq); in bwn_detach()
882 bwn_release_firmware(mac); in bwn_detach()
979 struct bwn_mac *mac = sc->sc_curmac; in bwn_start() local
987 if ((sc->sc_flags & BWN_FLAG_RUNNING) == 0 || mac == NULL || in bwn_start()
988 mac->mac_status < BWN_MAC_STATUS_STARTED) in bwn_start()
1029 struct bwn_mac *mac = sc->sc_curmac; in bwn_tx_isfull() local
1031 int pktlen = roundup(m->m_pkthdr.len + BWN_HDRSIZE(mac), 4); in bwn_tx_isfull()
1035 if (mac->mac_flags & BWN_MAC_FLAG_DMA) { in bwn_tx_isfull()
1036 dr = bwn_dma_select(mac, M_WME_GETAC(m)); in bwn_tx_isfull()
1043 tq = bwn_pio_select(mac, M_WME_GETAC(m)); in bwn_tx_isfull()
1057 struct bwn_mac *mac = sc->sc_curmac; in bwn_tx_start() local
1062 if (m->m_pkthdr.len < IEEE80211_MIN_LEN || mac == NULL) { in bwn_tx_start()
1067 error = (mac->mac_flags & BWN_MAC_FLAG_DMA) ? in bwn_tx_start()
1068 bwn_dma_tx_start(mac, ni, &m) : bwn_pio_tx_start(mac, ni, &m); in bwn_tx_start()
1077 bwn_pio_tx_start(struct bwn_mac *mac, struct ieee80211_node *ni, in bwn_pio_tx_start() argument
1082 struct bwn_softc *sc = mac->mac_sc; in bwn_pio_tx_start()
1094 tq = bwn_pio_select(mac, M_WME_GETAC(m)); in bwn_pio_tx_start()
1100 error = bwn_set_txhdr(mac, ni, m, &txhdr, BWN_PIO_COOKIE(tq, tp)); in bwn_pio_tx_start()
1107 tq->tq_used += roundup(m->m_pkthdr.len + BWN_HDRSIZE(mac), 4); in bwn_pio_tx_start()
1128 ctl32 = bwn_pio_write_multi_4(mac, tq, in bwn_pio_tx_start()
1129 (BWN_PIO_READ_4(mac, tq, BWN_PIO8_TXCTL) | in bwn_pio_tx_start()
1131 (const uint8_t *)&txhdr, BWN_HDRSIZE(mac)); in bwn_pio_tx_start()
1133 ctl32 = bwn_pio_write_multi_4(mac, tq, ctl32, in bwn_pio_tx_start()
1135 bwn_pio_write_4(mac, tq, BWN_PIO_TXCTL, in bwn_pio_tx_start()
1138 ctl16 = bwn_pio_write_multi_2(mac, tq, in bwn_pio_tx_start()
1139 (bwn_pio_read_2(mac, tq, BWN_PIO_TXCTL) | in bwn_pio_tx_start()
1141 (const uint8_t *)&txhdr, BWN_HDRSIZE(mac)); in bwn_pio_tx_start()
1142 ctl16 = bwn_pio_write_mbuf_2(mac, tq, ctl16, m); in bwn_pio_tx_start()
1143 BWN_PIO_WRITE_2(mac, tq, BWN_PIO_TXCTL, in bwn_pio_tx_start()
1151 bwn_pio_select(struct bwn_mac *mac, uint8_t prio) in bwn_pio_select() argument
1154 if ((mac->mac_flags & BWN_MAC_FLAG_WME) == 0) in bwn_pio_select()
1155 return (&mac->mac_method.pio.wme[WME_AC_BE]); in bwn_pio_select()
1159 return (&mac->mac_method.pio.wme[WME_AC_BE]); in bwn_pio_select()
1161 return (&mac->mac_method.pio.wme[WME_AC_BK]); in bwn_pio_select()
1163 return (&mac->mac_method.pio.wme[WME_AC_VI]); in bwn_pio_select()
1165 return (&mac->mac_method.pio.wme[WME_AC_VO]); in bwn_pio_select()
1172 bwn_dma_tx_start(struct bwn_mac *mac, struct ieee80211_node *ni, in bwn_dma_tx_start() argument
1176 &(txhdr_cache[(slot / BWN_TX_SLOTS_PER_FRAME) * BWN_HDRSIZE(mac)]) in bwn_dma_tx_start()
1177 struct bwn_dma *dma = &mac->mac_method.dma; in bwn_dma_tx_start()
1178 struct bwn_dma_ring *dr = bwn_dma_select(mac, M_WME_GETAC(*mp)); in bwn_dma_tx_start()
1181 struct bwn_softc *sc = mac->mac_sc; in bwn_dma_tx_start()
1203 BWN_GET_TXHDRCACHE(slot), BWN_HDRSIZE(mac), bwn_dma_ring_addr, in bwn_dma_tx_start()
1212 dr->setdesc(dr, desc, mt->mt_paddr, BWN_HDRSIZE(mac), 1, 0, 0); in bwn_dma_tx_start()
1282 bwn_attach_core(struct bwn_mac *mac) in bwn_attach_core() argument
1284 struct bwn_softc *sc = mac->mac_sc; in bwn_attach_core()
1291 if ((error = bwn_core_forceclk(mac, true))) in bwn_attach_core()
1323 error = bwn_reset_core(mac, have_bg); in bwn_attach_core()
1331 mac->mac_dmatype = BHND_DMA_ADDR_64BIT; in bwn_attach_core()
1337 BWN_WRITE_4(mac, base + BWN_DMA32_TXCTL, in bwn_attach_core()
1339 tmp = BWN_READ_4(mac, base + BWN_DMA32_TXCTL); in bwn_attach_core()
1341 mac->mac_dmatype = BHND_DMA_ADDR_32BIT; in bwn_attach_core()
1343 mac->mac_dmatype = BHND_DMA_ADDR_30BIT; in bwn_attach_core()
1350 error = bwn_phy_getinfo(mac, have_bg); in bwn_attach_core()
1365 if (mac->mac_phy.type == BWN_PHYTYPE_A) in bwn_attach_core()
1367 else if (mac->mac_phy.type == BWN_PHYTYPE_G || in bwn_attach_core()
1368 mac->mac_phy.type == BWN_PHYTYPE_N || in bwn_attach_core()
1369 mac->mac_phy.type == BWN_PHYTYPE_LP) in bwn_attach_core()
1373 mac->mac_phy.type)); in bwn_attach_core()
1379 if (mac->mac_phy.type != BWN_PHYTYPE_LP && in bwn_attach_core()
1380 mac->mac_phy.type != BWN_PHYTYPE_N) { in bwn_attach_core()
1388 mac->mac_phy.phy_n = NULL; in bwn_attach_core()
1390 if (mac->mac_phy.type == BWN_PHYTYPE_G) { in bwn_attach_core()
1391 mac->mac_phy.attach = bwn_phy_g_attach; in bwn_attach_core()
1392 mac->mac_phy.detach = bwn_phy_g_detach; in bwn_attach_core()
1393 mac->mac_phy.prepare_hw = bwn_phy_g_prepare_hw; in bwn_attach_core()
1394 mac->mac_phy.init_pre = bwn_phy_g_init_pre; in bwn_attach_core()
1395 mac->mac_phy.init = bwn_phy_g_init; in bwn_attach_core()
1396 mac->mac_phy.exit = bwn_phy_g_exit; in bwn_attach_core()
1397 mac->mac_phy.phy_read = bwn_phy_g_read; in bwn_attach_core()
1398 mac->mac_phy.phy_write = bwn_phy_g_write; in bwn_attach_core()
1399 mac->mac_phy.rf_read = bwn_phy_g_rf_read; in bwn_attach_core()
1400 mac->mac_phy.rf_write = bwn_phy_g_rf_write; in bwn_attach_core()
1401 mac->mac_phy.use_hwpctl = bwn_phy_g_hwpctl; in bwn_attach_core()
1402 mac->mac_phy.rf_onoff = bwn_phy_g_rf_onoff; in bwn_attach_core()
1403 mac->mac_phy.switch_analog = bwn_phy_switch_analog; in bwn_attach_core()
1404 mac->mac_phy.switch_channel = bwn_phy_g_switch_channel; in bwn_attach_core()
1405 mac->mac_phy.get_default_chan = bwn_phy_g_get_default_chan; in bwn_attach_core()
1406 mac->mac_phy.set_antenna = bwn_phy_g_set_antenna; in bwn_attach_core()
1407 mac->mac_phy.set_im = bwn_phy_g_im; in bwn_attach_core()
1408 mac->mac_phy.recalc_txpwr = bwn_phy_g_recalc_txpwr; in bwn_attach_core()
1409 mac->mac_phy.set_txpwr = bwn_phy_g_set_txpwr; in bwn_attach_core()
1410 mac->mac_phy.task_15s = bwn_phy_g_task_15s; in bwn_attach_core()
1411 mac->mac_phy.task_60s = bwn_phy_g_task_60s; in bwn_attach_core()
1412 } else if (mac->mac_phy.type == BWN_PHYTYPE_LP) { in bwn_attach_core()
1413 mac->mac_phy.init_pre = bwn_phy_lp_init_pre; in bwn_attach_core()
1414 mac->mac_phy.init = bwn_phy_lp_init; in bwn_attach_core()
1415 mac->mac_phy.phy_read = bwn_phy_lp_read; in bwn_attach_core()
1416 mac->mac_phy.phy_write = bwn_phy_lp_write; in bwn_attach_core()
1417 mac->mac_phy.phy_maskset = bwn_phy_lp_maskset; in bwn_attach_core()
1418 mac->mac_phy.rf_read = bwn_phy_lp_rf_read; in bwn_attach_core()
1419 mac->mac_phy.rf_write = bwn_phy_lp_rf_write; in bwn_attach_core()
1420 mac->mac_phy.rf_onoff = bwn_phy_lp_rf_onoff; in bwn_attach_core()
1421 mac->mac_phy.switch_analog = bwn_phy_lp_switch_analog; in bwn_attach_core()
1422 mac->mac_phy.switch_channel = bwn_phy_lp_switch_channel; in bwn_attach_core()
1423 mac->mac_phy.get_default_chan = bwn_phy_lp_get_default_chan; in bwn_attach_core()
1424 mac->mac_phy.set_antenna = bwn_phy_lp_set_antenna; in bwn_attach_core()
1425 mac->mac_phy.task_60s = bwn_phy_lp_task_60s; in bwn_attach_core()
1426 } else if (mac->mac_phy.type == BWN_PHYTYPE_N) { in bwn_attach_core()
1427 mac->mac_phy.attach = bwn_phy_n_attach; in bwn_attach_core()
1428 mac->mac_phy.detach = bwn_phy_n_detach; in bwn_attach_core()
1429 mac->mac_phy.prepare_hw = bwn_phy_n_prepare_hw; in bwn_attach_core()
1430 mac->mac_phy.init_pre = bwn_phy_n_init_pre; in bwn_attach_core()
1431 mac->mac_phy.init = bwn_phy_n_init; in bwn_attach_core()
1432 mac->mac_phy.exit = bwn_phy_n_exit; in bwn_attach_core()
1433 mac->mac_phy.phy_read = bwn_phy_n_read; in bwn_attach_core()
1434 mac->mac_phy.phy_write = bwn_phy_n_write; in bwn_attach_core()
1435 mac->mac_phy.rf_read = bwn_phy_n_rf_read; in bwn_attach_core()
1436 mac->mac_phy.rf_write = bwn_phy_n_rf_write; in bwn_attach_core()
1437 mac->mac_phy.use_hwpctl = bwn_phy_n_hwpctl; in bwn_attach_core()
1438 mac->mac_phy.rf_onoff = bwn_phy_n_rf_onoff; in bwn_attach_core()
1439 mac->mac_phy.switch_analog = bwn_phy_n_switch_analog; in bwn_attach_core()
1440 mac->mac_phy.switch_channel = bwn_phy_n_switch_channel; in bwn_attach_core()
1441 mac->mac_phy.get_default_chan = bwn_phy_n_get_default_chan; in bwn_attach_core()
1442 mac->mac_phy.set_antenna = bwn_phy_n_set_antenna; in bwn_attach_core()
1443 mac->mac_phy.set_im = bwn_phy_n_im; in bwn_attach_core()
1444 mac->mac_phy.recalc_txpwr = bwn_phy_n_recalc_txpwr; in bwn_attach_core()
1445 mac->mac_phy.set_txpwr = bwn_phy_n_set_txpwr; in bwn_attach_core()
1446 mac->mac_phy.task_15s = bwn_phy_n_task_15s; in bwn_attach_core()
1447 mac->mac_phy.task_60s = bwn_phy_n_task_60s; in bwn_attach_core()
1450 mac->mac_phy.type); in bwn_attach_core()
1455 mac->mac_phy.gmode = have_bg; in bwn_attach_core()
1456 if (mac->mac_phy.attach != NULL) { in bwn_attach_core()
1457 error = mac->mac_phy.attach(mac); in bwn_attach_core()
1464 error = bwn_reset_core(mac, have_bg); in bwn_attach_core()
1468 error = bwn_chiptest(mac); in bwn_attach_core()
1471 error = bwn_setup_channels(mac, have_bg, have_a); in bwn_attach_core()
1478 sc->sc_curmac = mac; in bwn_attach_core()
1480 error = bwn_dma_attach(mac); in bwn_attach_core()
1486 mac->mac_phy.switch_analog(mac, 0); in bwn_attach_core()
1490 bwn_release_firmware(mac); in bwn_attach_core()
1498 bwn_reset_core(struct bwn_mac *mac, int g_mode) in bwn_reset_core() argument
1505 sc = mac->mac_sc; in bwn_reset_core()
1515 if (mac->mac_phy.type == BWN_PHYTYPE_N) in bwn_reset_core()
1548 if (mac->mac_phy.switch_analog != NULL) in bwn_reset_core()
1549 mac->mac_phy.switch_analog(mac, 1); in bwn_reset_core()
1551 ctl = BWN_READ_4(mac, BWN_MACCTL) & ~BWN_MACCTL_GMODE; in bwn_reset_core()
1554 BWN_WRITE_4(mac, BWN_MACCTL, ctl | BWN_MACCTL_IHR_ON); in bwn_reset_core()
1560 bwn_phy_getinfo(struct bwn_mac *mac, int gmode) in bwn_phy_getinfo() argument
1562 struct bwn_phy *phy = &mac->mac_phy; in bwn_phy_getinfo()
1563 struct bwn_softc *sc = mac->mac_sc; in bwn_phy_getinfo()
1567 tmp = BWN_READ_2(mac, BWN_PHYVER); in bwn_phy_getinfo()
1582 BWN_WRITE_2(mac, BWN_RFCTL, BWN_RFCTL_ID); in bwn_phy_getinfo()
1583 tmp = BWN_READ_2(mac, BWN_RFDATALO); in bwn_phy_getinfo()
1584 BWN_WRITE_2(mac, BWN_RFCTL, BWN_RFCTL_ID); in bwn_phy_getinfo()
1585 tmp |= (uint32_t)BWN_READ_2(mac, BWN_RFDATAHI) << 16; in bwn_phy_getinfo()
1623 bwn_chiptest(struct bwn_mac *mac) in bwn_chiptest() argument
1627 struct bwn_softc *sc = mac->mac_sc; in bwn_chiptest()
1632 backup = bwn_shm_read_4(mac, BWN_SHARED, 0); in bwn_chiptest()
1634 bwn_shm_write_4(mac, BWN_SHARED, 0, TESTVAL0); in bwn_chiptest()
1635 if (bwn_shm_read_4(mac, BWN_SHARED, 0) != TESTVAL0) in bwn_chiptest()
1637 bwn_shm_write_4(mac, BWN_SHARED, 0, TESTVAL1); in bwn_chiptest()
1638 if (bwn_shm_read_4(mac, BWN_SHARED, 0) != TESTVAL1) in bwn_chiptest()
1641 bwn_shm_write_4(mac, BWN_SHARED, 0, backup); in bwn_chiptest()
1645 BWN_WRITE_2(mac, BWN_TSF_CFP_START, 0xaaaa); in bwn_chiptest()
1646 BWN_WRITE_4(mac, BWN_TSF_CFP_START, 0xccccbbbb); in bwn_chiptest()
1647 if (BWN_READ_2(mac, BWN_TSF_CFP_START_LOW) != 0xbbbb) in bwn_chiptest()
1649 if (BWN_READ_2(mac, BWN_TSF_CFP_START_HIGH) != 0xcccc) in bwn_chiptest()
1652 BWN_WRITE_4(mac, BWN_TSF_CFP_START, 0); in bwn_chiptest()
1654 v = BWN_READ_4(mac, BWN_MACCTL) | BWN_MACCTL_GMODE; in bwn_chiptest()
1667 bwn_setup_channels(struct bwn_mac *mac, int have_bg, int have_a) in bwn_setup_channels() argument
1669 struct bwn_softc *sc = mac->mac_sc; in bwn_setup_channels()
1696 mac->mac_phy.supports_2ghz = have_bg; in bwn_setup_channels()
1697 mac->mac_phy.supports_5ghz = have_a; in bwn_setup_channels()
1703 bwn_shm_read_4(struct bwn_mac *mac, uint16_t way, uint16_t offset) in bwn_shm_read_4() argument
1707 BWN_ASSERT_LOCKED(mac->mac_sc); in bwn_shm_read_4()
1713 bwn_shm_ctlword(mac, way, offset >> 2); in bwn_shm_read_4()
1714 ret = BWN_READ_2(mac, BWN_SHM_DATA_UNALIGNED); in bwn_shm_read_4()
1716 bwn_shm_ctlword(mac, way, (offset >> 2) + 1); in bwn_shm_read_4()
1717 ret |= BWN_READ_2(mac, BWN_SHM_DATA); in bwn_shm_read_4()
1722 bwn_shm_ctlword(mac, way, offset); in bwn_shm_read_4()
1723 ret = BWN_READ_4(mac, BWN_SHM_DATA); in bwn_shm_read_4()
1729 bwn_shm_read_2(struct bwn_mac *mac, uint16_t way, uint16_t offset) in bwn_shm_read_2() argument
1733 BWN_ASSERT_LOCKED(mac->mac_sc); in bwn_shm_read_2()
1739 bwn_shm_ctlword(mac, way, offset >> 2); in bwn_shm_read_2()
1740 ret = BWN_READ_2(mac, BWN_SHM_DATA_UNALIGNED); in bwn_shm_read_2()
1745 bwn_shm_ctlword(mac, way, offset); in bwn_shm_read_2()
1746 ret = BWN_READ_2(mac, BWN_SHM_DATA); in bwn_shm_read_2()
1753 bwn_shm_ctlword(struct bwn_mac *mac, uint16_t way, in bwn_shm_ctlword() argument
1761 BWN_WRITE_4(mac, BWN_SHM_CONTROL, control); in bwn_shm_ctlword()
1765 bwn_shm_write_4(struct bwn_mac *mac, uint16_t way, uint16_t offset, in bwn_shm_write_4() argument
1768 BWN_ASSERT_LOCKED(mac->mac_sc); in bwn_shm_write_4()
1774 bwn_shm_ctlword(mac, way, offset >> 2); in bwn_shm_write_4()
1775 BWN_WRITE_2(mac, BWN_SHM_DATA_UNALIGNED, in bwn_shm_write_4()
1777 bwn_shm_ctlword(mac, way, (offset >> 2) + 1); in bwn_shm_write_4()
1778 BWN_WRITE_2(mac, BWN_SHM_DATA, value & 0xffff); in bwn_shm_write_4()
1783 bwn_shm_ctlword(mac, way, offset); in bwn_shm_write_4()
1784 BWN_WRITE_4(mac, BWN_SHM_DATA, value); in bwn_shm_write_4()
1788 bwn_shm_write_2(struct bwn_mac *mac, uint16_t way, uint16_t offset, in bwn_shm_write_2() argument
1791 BWN_ASSERT_LOCKED(mac->mac_sc); in bwn_shm_write_2()
1797 bwn_shm_ctlword(mac, way, offset >> 2); in bwn_shm_write_2()
1798 BWN_WRITE_2(mac, BWN_SHM_DATA_UNALIGNED, value); in bwn_shm_write_2()
1803 bwn_shm_ctlword(mac, way, offset); in bwn_shm_write_2()
1804 BWN_WRITE_2(mac, BWN_SHM_DATA, value); in bwn_shm_write_2()
1827 struct bwn_mac *mac = sc->sc_curmac; in bwn_raw_xmit() local
1831 mac->mac_status < BWN_MAC_STATUS_STARTED) { in bwn_raw_xmit()
1860 struct bwn_mac *mac; in bwn_updateslot() local
1864 mac = (struct bwn_mac *)sc->sc_curmac; in bwn_updateslot()
1865 bwn_set_slot_time(mac, IEEE80211_GET_SLOTTIME(ic)); in bwn_updateslot()
1881 struct bwn_mac *mac = sc->sc_curmac; in bwn_update_promisc() local
1884 mac = sc->sc_curmac; in bwn_update_promisc()
1885 if (mac != NULL && mac->mac_status >= BWN_MAC_STATUS_INITED) { in bwn_update_promisc()
1890 bwn_set_opmode(mac); in bwn_update_promisc()
1902 struct bwn_mac *mac = sc->sc_curmac; in bwn_wme_update() local
1910 mac = sc->sc_curmac; in bwn_wme_update()
1911 if (mac != NULL && mac->mac_status >= BWN_MAC_STATUS_INITED) { in bwn_wme_update()
1912 bwn_mac_suspend(mac); in bwn_wme_update()
1915 bwn_wme_loadparams(mac, wmep, bwn_wme_shm_offsets[i]); in bwn_wme_update()
1917 bwn_mac_enable(mac); in bwn_wme_update()
1927 struct bwn_mac *mac; in bwn_scan_start() local
1930 mac = sc->sc_curmac; in bwn_scan_start()
1931 if (mac != NULL && mac->mac_status >= BWN_MAC_STATUS_INITED) { in bwn_scan_start()
1933 bwn_set_opmode(mac); in bwn_scan_start()
1935 bwn_hf_write(mac, bwn_hf_read(mac) | BWN_HF_SKIP_CFP_UPDATE); in bwn_scan_start()
1944 struct bwn_mac *mac; in bwn_scan_end() local
1947 mac = sc->sc_curmac; in bwn_scan_end()
1948 if (mac != NULL && mac->mac_status >= BWN_MAC_STATUS_INITED) { in bwn_scan_end()
1950 bwn_set_opmode(mac); in bwn_scan_end()
1951 bwn_hf_write(mac, bwn_hf_read(mac) & ~BWN_HF_SKIP_CFP_UPDATE); in bwn_scan_end()
1960 struct bwn_mac *mac = sc->sc_curmac; in bwn_set_channel() local
1961 struct bwn_phy *phy = &mac->mac_phy; in bwn_set_channel()
1969 bwn_mac_suspend(mac); in bwn_set_channel()
1970 bwn_set_txretry(mac, BWN_RETRY_SHORT, BWN_RETRY_LONG); in bwn_set_channel()
1973 bwn_switch_channel(mac, chan); in bwn_set_channel()
1979 bwn_phy_txpower_check(mac, BWN_TXPWR_IGNORE_TIME | in bwn_set_channel()
1983 bwn_set_txantenna(mac, BWN_ANT_DEFAULT); in bwn_set_channel()
1985 phy->set_antenna(mac, BWN_ANT_DEFAULT); in bwn_set_channel()
1989 bwn_rf_turnon(mac); in bwn_set_channel()
1990 if (!(mac->mac_flags & BWN_MAC_FLAG_RADIO_ON)) in bwn_set_channel()
1994 bwn_rf_turnoff(mac); in bwn_set_channel()
1997 bwn_mac_enable(mac); in bwn_set_channel()
2007 const uint8_t mac[IEEE80211_ADDR_LEN]) in bwn_vap_create()
2039 ieee80211_media_status, mac); in bwn_vap_create()
2056 struct bwn_mac *mac; in bwn_init() local
2070 mac = sc->sc_curmac; in bwn_init()
2071 if (mac->mac_status == BWN_MAC_STATUS_UNINIT) { in bwn_init()
2072 error = bwn_core_init(mac); in bwn_init()
2076 if (mac->mac_status == BWN_MAC_STATUS_INITED) in bwn_init()
2077 bwn_core_start(mac); in bwn_init()
2079 bwn_set_opmode(mac); in bwn_init()
2080 bwn_set_pretbtt(mac); in bwn_init()
2081 bwn_spu_setdelay(mac, 0); in bwn_init()
2082 bwn_set_macaddr(mac); in bwn_init()
2094 struct bwn_mac *mac = sc->sc_curmac; in bwn_stop() local
2100 if (mac->mac_status >= BWN_MAC_STATUS_INITED) { in bwn_stop()
2102 bwn_set_opmode(mac); in bwn_stop()
2103 bwn_set_macaddr(mac); in bwn_stop()
2106 if (mac->mac_status >= BWN_MAC_STATUS_STARTED) in bwn_stop()
2107 bwn_core_stop(mac); in bwn_stop()
2112 bwn_core_exit(mac); in bwn_stop()
2174 bwn_core_forceclk(struct bwn_mac *mac, bool force) in bwn_core_forceclk() argument
2180 sc = mac->mac_sc; in bwn_core_forceclk()
2202 bwn_core_init(struct bwn_mac *mac) in bwn_core_init() argument
2204 struct bwn_softc *sc = mac->mac_sc; in bwn_core_init()
2208 KASSERT(mac->mac_status == BWN_MAC_STATUS_UNINIT, in bwn_core_init()
2211 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: called\n", __func__); in bwn_core_init()
2213 if ((error = bwn_core_forceclk(mac, true))) in bwn_core_init()
2217 if ((error = bwn_reset_core(mac, mac->mac_phy.gmode))) in bwn_core_init()
2221 mac->mac_flags &= ~BWN_MAC_FLAG_DFQVALID; in bwn_core_init()
2222 mac->mac_flags |= BWN_MAC_FLAG_RADIO_ON; in bwn_core_init()
2223 mac->mac_phy.hwpctl = (bwn_hwpctl) ? 1 : 0; in bwn_core_init()
2224 BWN_GETTIME(mac->mac_phy.nexttime); in bwn_core_init()
2225 mac->mac_phy.txerrors = BWN_TXERROR_MAX; in bwn_core_init()
2226 bzero(&mac->mac_stats, sizeof(mac->mac_stats)); in bwn_core_init()
2227 mac->mac_stats.link_noise = -95; in bwn_core_init()
2228 mac->mac_reason_intr = 0; in bwn_core_init()
2229 bzero(mac->mac_reason, sizeof(mac->mac_reason)); in bwn_core_init()
2230 mac->mac_intr_mask = BWN_INTR_MASKTEMPLATE; in bwn_core_init()
2233 mac->mac_intr_mask &= ~BWN_INTR_PHY_TXERR; in bwn_core_init()
2235 mac->mac_suspended = 1; in bwn_core_init()
2236 mac->mac_task_state = 0; in bwn_core_init()
2237 memset(&mac->mac_noise, 0, sizeof(mac->mac_noise)); in bwn_core_init()
2239 mac->mac_phy.init_pre(mac); in bwn_core_init()
2241 bwn_bt_disable(mac); in bwn_core_init()
2242 if (mac->mac_phy.prepare_hw) { in bwn_core_init()
2243 error = mac->mac_phy.prepare_hw(mac); in bwn_core_init()
2247 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: chip_init\n", __func__); in bwn_core_init()
2248 error = bwn_chip_init(mac); in bwn_core_init()
2251 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_COREREV, in bwn_core_init()
2253 hf = bwn_hf_read(mac); in bwn_core_init()
2254 if (mac->mac_phy.type == BWN_PHYTYPE_G) { in bwn_core_init()
2258 if (mac->mac_phy.rev == 1) in bwn_core_init()
2261 if (mac->mac_phy.rf_ver == 0x2050) { in bwn_core_init()
2262 if (mac->mac_phy.rf_rev < 6) in bwn_core_init()
2264 if (mac->mac_phy.rf_rev == 6) in bwn_core_init()
2272 bwn_hf_write(mac, hf); in bwn_core_init()
2277 cap = BWN_READ_4(mac, BWN_MAC_HW_CAP); in bwn_core_init()
2281 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_MACHW_L, in bwn_core_init()
2283 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_MACHW_H, in bwn_core_init()
2287 bwn_set_txretry(mac, BWN_RETRY_SHORT, BWN_RETRY_LONG); in bwn_core_init()
2288 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_SHORT_RETRY_FALLBACK, 3); in bwn_core_init()
2289 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_LONG_RETRY_FALLBACK, 2); in bwn_core_init()
2290 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_PROBE_RESP_MAXTIME, 1); in bwn_core_init()
2292 bwn_rate_init(mac); in bwn_core_init()
2293 bwn_set_phytxctl(mac); in bwn_core_init()
2295 bwn_shm_write_2(mac, BWN_SCRATCH, BWN_SCRATCH_CONT_MIN, in bwn_core_init()
2296 (mac->mac_phy.type == BWN_PHYTYPE_B) ? 0x1f : 0xf); in bwn_core_init()
2297 bwn_shm_write_2(mac, BWN_SCRATCH, BWN_SCRATCH_CONT_MAX, 0x3ff); in bwn_core_init()
2300 bwn_pio_init(mac); in bwn_core_init()
2302 bwn_dma_init(mac); in bwn_core_init()
2303 bwn_wme_init(mac); in bwn_core_init()
2304 bwn_spu_setdelay(mac, 1); in bwn_core_init()
2305 bwn_bt_enable(mac); in bwn_core_init()
2307 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: powerup\n", __func__); in bwn_core_init()
2309 bwn_core_forceclk(mac, true); in bwn_core_init()
2311 bwn_core_forceclk(mac, false); in bwn_core_init()
2313 bwn_set_macaddr(mac); in bwn_core_init()
2314 bwn_crypt_init(mac); in bwn_core_init()
2318 mac->mac_status = BWN_MAC_STATUS_INITED; in bwn_core_init()
2320 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: done\n", __func__); in bwn_core_init()
2325 KASSERT(mac->mac_status == BWN_MAC_STATUS_UNINIT, in bwn_core_init()
2327 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: fail\n", __func__); in bwn_core_init()
2332 bwn_core_start(struct bwn_mac *mac) in bwn_core_start() argument
2334 struct bwn_softc *sc = mac->mac_sc; in bwn_core_start()
2337 KASSERT(mac->mac_status == BWN_MAC_STATUS_INITED, in bwn_core_start()
2344 tmp = BWN_READ_4(mac, BWN_XMITSTAT_0); in bwn_core_start()
2347 tmp = BWN_READ_4(mac, BWN_XMITSTAT_1); in bwn_core_start()
2350 bwn_mac_enable(mac); in bwn_core_start()
2351 BWN_WRITE_4(mac, BWN_INTR_MASK, mac->mac_intr_mask); in bwn_core_start()
2352 callout_reset(&sc->sc_task_ch, hz * 15, bwn_tasks, mac); in bwn_core_start()
2354 mac->mac_status = BWN_MAC_STATUS_STARTED; in bwn_core_start()
2358 bwn_core_exit(struct bwn_mac *mac) in bwn_core_exit() argument
2360 struct bwn_softc *sc = mac->mac_sc; in bwn_core_exit()
2363 BWN_ASSERT_LOCKED(mac->mac_sc); in bwn_core_exit()
2365 KASSERT(mac->mac_status <= BWN_MAC_STATUS_INITED, in bwn_core_exit()
2368 if (mac->mac_status != BWN_MAC_STATUS_INITED) in bwn_core_exit()
2370 mac->mac_status = BWN_MAC_STATUS_UNINIT; in bwn_core_exit()
2372 macctl = BWN_READ_4(mac, BWN_MACCTL); in bwn_core_exit()
2375 BWN_WRITE_4(mac, BWN_MACCTL, macctl); in bwn_core_exit()
2377 bwn_dma_stop(mac); in bwn_core_exit()
2378 bwn_pio_stop(mac); in bwn_core_exit()
2379 bwn_chip_exit(mac); in bwn_core_exit()
2380 mac->mac_phy.switch_analog(mac, 0); in bwn_core_exit()
2385 bwn_bt_disable(struct bwn_mac *mac) in bwn_bt_disable() argument
2387 struct bwn_softc *sc = mac->mac_sc; in bwn_bt_disable()
2394 bwn_chip_init(struct bwn_mac *mac) in bwn_chip_init() argument
2396 struct bwn_softc *sc = mac->mac_sc; in bwn_chip_init()
2397 struct bwn_phy *phy = &mac->mac_phy; in bwn_chip_init()
2405 BWN_WRITE_4(mac, BWN_MACCTL, macctl); in bwn_chip_init()
2407 error = bwn_fw_fillinfo(mac); in bwn_chip_init()
2410 error = bwn_fw_loaducode(mac); in bwn_chip_init()
2414 error = bwn_gpio_init(mac); in bwn_chip_init()
2418 error = bwn_fw_loadinitvals(mac); in bwn_chip_init()
2422 phy->switch_analog(mac, 1); in bwn_chip_init()
2423 error = bwn_phy_init(mac); in bwn_chip_init()
2428 phy->set_im(mac, BWN_IMMODE_NONE); in bwn_chip_init()
2430 phy->set_antenna(mac, BWN_ANT_DEFAULT); in bwn_chip_init()
2431 bwn_set_txantenna(mac, BWN_ANT_DEFAULT); in bwn_chip_init()
2434 BWN_WRITE_2(mac, 0x005e, BWN_READ_2(mac, 0x005e) | 0x0004); in bwn_chip_init()
2435 BWN_WRITE_4(mac, 0x0100, 0x01000000); in bwn_chip_init()
2437 BWN_WRITE_4(mac, 0x010c, 0x01000000); in bwn_chip_init()
2439 BWN_WRITE_4(mac, BWN_MACCTL, in bwn_chip_init()
2440 BWN_READ_4(mac, BWN_MACCTL) & ~BWN_MACCTL_STA); in bwn_chip_init()
2441 BWN_WRITE_4(mac, BWN_MACCTL, in bwn_chip_init()
2442 BWN_READ_4(mac, BWN_MACCTL) | BWN_MACCTL_STA); in bwn_chip_init()
2443 bwn_shm_write_2(mac, BWN_SHARED, 0x0074, 0x0000); in bwn_chip_init()
2445 bwn_set_opmode(mac); in bwn_chip_init()
2447 BWN_WRITE_2(mac, 0x060e, 0x0000); in bwn_chip_init()
2448 BWN_WRITE_2(mac, 0x0610, 0x8000); in bwn_chip_init()
2449 BWN_WRITE_2(mac, 0x0604, 0x0000); in bwn_chip_init()
2450 BWN_WRITE_2(mac, 0x0606, 0x0200); in bwn_chip_init()
2452 BWN_WRITE_4(mac, 0x0188, 0x80000000); in bwn_chip_init()
2453 BWN_WRITE_4(mac, 0x018c, 0x02000000); in bwn_chip_init()
2455 BWN_WRITE_4(mac, BWN_INTR_REASON, 0x00004000); in bwn_chip_init()
2456 BWN_WRITE_4(mac, BWN_DMA0_INTR_MASK, 0x0001dc00); in bwn_chip_init()
2457 BWN_WRITE_4(mac, BWN_DMA1_INTR_MASK, 0x0000dc00); in bwn_chip_init()
2458 BWN_WRITE_4(mac, BWN_DMA2_INTR_MASK, 0x0000dc00); in bwn_chip_init()
2459 BWN_WRITE_4(mac, BWN_DMA3_INTR_MASK, 0x0001dc00); in bwn_chip_init()
2460 BWN_WRITE_4(mac, BWN_DMA4_INTR_MASK, 0x0000dc00); in bwn_chip_init()
2461 BWN_WRITE_4(mac, BWN_DMA5_INTR_MASK, 0x0000dc00); in bwn_chip_init()
2463 bwn_mac_phy_clock_set(mac, true); in bwn_chip_init()
2479 BWN_WRITE_2(mac, BWN_POWERUP_DELAY, delay); in bwn_chip_init()
2485 bwn_hf_read(struct bwn_mac *mac) in bwn_hf_read() argument
2489 ret = bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_HFHI); in bwn_hf_read()
2491 ret |= bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_HFMI); in bwn_hf_read()
2493 ret |= bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_HFLO); in bwn_hf_read()
2498 bwn_hf_write(struct bwn_mac *mac, uint64_t value) in bwn_hf_write() argument
2501 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_HFLO, in bwn_hf_write()
2503 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_HFMI, in bwn_hf_write()
2505 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_HFHI, in bwn_hf_write()
2510 bwn_set_txretry(struct bwn_mac *mac, int s, int l) in bwn_set_txretry() argument
2513 bwn_shm_write_2(mac, BWN_SCRATCH, BWN_SCRATCH_SHORT_RETRY, MIN(s, 0xf)); in bwn_set_txretry()
2514 bwn_shm_write_2(mac, BWN_SCRATCH, BWN_SCRATCH_LONG_RETRY, MIN(l, 0xf)); in bwn_set_txretry()
2518 bwn_rate_init(struct bwn_mac *mac) in bwn_rate_init() argument
2521 switch (mac->mac_phy.type) { in bwn_rate_init()
2526 bwn_rate_write(mac, BWN_OFDM_RATE_6MB, 1); in bwn_rate_init()
2527 bwn_rate_write(mac, BWN_OFDM_RATE_12MB, 1); in bwn_rate_init()
2528 bwn_rate_write(mac, BWN_OFDM_RATE_18MB, 1); in bwn_rate_init()
2529 bwn_rate_write(mac, BWN_OFDM_RATE_24MB, 1); in bwn_rate_init()
2530 bwn_rate_write(mac, BWN_OFDM_RATE_36MB, 1); in bwn_rate_init()
2531 bwn_rate_write(mac, BWN_OFDM_RATE_48MB, 1); in bwn_rate_init()
2532 bwn_rate_write(mac, BWN_OFDM_RATE_54MB, 1); in bwn_rate_init()
2533 if (mac->mac_phy.type == BWN_PHYTYPE_A) in bwn_rate_init()
2537 bwn_rate_write(mac, BWN_CCK_RATE_1MB, 0); in bwn_rate_init()
2538 bwn_rate_write(mac, BWN_CCK_RATE_2MB, 0); in bwn_rate_init()
2539 bwn_rate_write(mac, BWN_CCK_RATE_5MB, 0); in bwn_rate_init()
2540 bwn_rate_write(mac, BWN_CCK_RATE_11MB, 0); in bwn_rate_init()
2548 bwn_rate_write(struct bwn_mac *mac, uint16_t rate, int ofdm) in bwn_rate_write() argument
2559 bwn_shm_write_2(mac, BWN_SHARED, offset + 0x20, in bwn_rate_write()
2560 bwn_shm_read_2(mac, BWN_SHARED, offset)); in bwn_rate_write()
2608 bwn_set_phytxctl(struct bwn_mac *mac) in bwn_set_phytxctl() argument
2614 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_BEACON_PHYCTL, ctl); in bwn_set_phytxctl()
2615 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_ACKCTS_PHYCTL, ctl); in bwn_set_phytxctl()
2616 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_PROBE_RESP_PHYCTL, ctl); in bwn_set_phytxctl()
2620 bwn_pio_init(struct bwn_mac *mac) in bwn_pio_init() argument
2622 struct bwn_pio *pio = &mac->mac_method.pio; in bwn_pio_init()
2624 BWN_WRITE_4(mac, BWN_MACCTL, BWN_READ_4(mac, BWN_MACCTL) in bwn_pio_init()
2626 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_RX_PADOFFSET, 0); in bwn_pio_init()
2628 bwn_pio_set_txqueue(mac, &pio->wme[WME_AC_BK], 0); in bwn_pio_init()
2629 bwn_pio_set_txqueue(mac, &pio->wme[WME_AC_BE], 1); in bwn_pio_init()
2630 bwn_pio_set_txqueue(mac, &pio->wme[WME_AC_VI], 2); in bwn_pio_init()
2631 bwn_pio_set_txqueue(mac, &pio->wme[WME_AC_VO], 3); in bwn_pio_init()
2632 bwn_pio_set_txqueue(mac, &pio->mcast, 4); in bwn_pio_init()
2633 bwn_pio_setupqueue_rx(mac, &pio->rx, 0); in bwn_pio_init()
2637 bwn_pio_set_txqueue(struct bwn_mac *mac, struct bwn_pio_txqueue *tq, in bwn_pio_set_txqueue() argument
2641 struct bwn_softc *sc = mac->mac_sc; in bwn_pio_set_txqueue()
2644 tq->tq_base = bwn_pio_idx2base(mac, index) + BWN_PIO_TXQOFFSET(mac); in bwn_pio_set_txqueue()
2651 tq->tq_size = bwn_pio_read_2(mac, tq, BWN_PIO_TXQBUFSIZE); in bwn_pio_set_txqueue()
2665 bwn_pio_idx2base(struct bwn_mac *mac, int index) in bwn_pio_idx2base() argument
2667 struct bwn_softc *sc = mac->mac_sc; in bwn_pio_idx2base()
2698 bwn_pio_setupqueue_rx(struct bwn_mac *mac, struct bwn_pio_rxqueue *prq, in bwn_pio_setupqueue_rx() argument
2701 struct bwn_softc *sc = mac->mac_sc; in bwn_pio_setupqueue_rx()
2703 prq->prq_mac = mac; in bwn_pio_setupqueue_rx()
2705 prq->prq_base = bwn_pio_idx2base(mac, index) + BWN_PIO_RXQOFFSET(mac); in bwn_pio_setupqueue_rx()
2706 bwn_dma_rxdirectfifo(mac, index, 1); in bwn_pio_setupqueue_rx()
2725 bwn_pio_read_2(struct bwn_mac *mac, struct bwn_pio_txqueue *tq, in bwn_pio_read_2() argument
2729 return (BWN_READ_2(mac, tq->tq_base + offset)); in bwn_pio_read_2()
2733 bwn_dma_rxdirectfifo(struct bwn_mac *mac, int idx, uint8_t enable) in bwn_dma_rxdirectfifo() argument
2738 base = bwn_dma_base(mac->mac_dmatype, idx); in bwn_dma_rxdirectfifo()
2739 if (mac->mac_dmatype == BHND_DMA_ADDR_64BIT) { in bwn_dma_rxdirectfifo()
2740 ctl = BWN_READ_4(mac, base + BWN_DMA64_RXCTL); in bwn_dma_rxdirectfifo()
2744 BWN_WRITE_4(mac, base + BWN_DMA64_RXCTL, ctl); in bwn_dma_rxdirectfifo()
2746 ctl = BWN_READ_4(mac, base + BWN_DMA32_RXCTL); in bwn_dma_rxdirectfifo()
2750 BWN_WRITE_4(mac, base + BWN_DMA32_RXCTL, ctl); in bwn_dma_rxdirectfifo()
2800 bwn_dma_init(struct bwn_mac *mac) in bwn_dma_init() argument
2802 struct bwn_dma *dma = &mac->mac_method.dma; in bwn_dma_init()
2815 bwn_dma_ringsetup(struct bwn_mac *mac, int controller_index, in bwn_dma_ringsetup() argument
2818 struct bwn_dma *dma = &mac->mac_method.dma; in bwn_dma_ringsetup()
2822 struct bwn_softc *sc = mac->mac_sc; in bwn_dma_ringsetup()
2837 dr->dr_type = mac->mac_dmatype; in bwn_dma_ringsetup()
2838 dr->dr_mac = mac; in bwn_dma_ringsetup()
2863 switch (mac->mac_fw.fw_hdr_format) { in bwn_dma_ringsetup()
2912 BWN_HDRSIZE(mac), in bwn_dma_ringsetup()
3215 struct bwn_mac *mac = dr->dr_mac; in bwn_dma_allocringmemory() local
3216 struct bwn_dma *dma = &mac->mac_method.dma; in bwn_dma_allocringmemory()
3217 struct bwn_softc *sc = mac->mac_sc; in bwn_dma_allocringmemory()
3260 struct bwn_mac *mac; in bwn_dma_setup() local
3266 mac = dr->dr_mac; in bwn_dma_setup()
3267 dma = &mac->mac_method.dma; in bwn_dma_setup()
3362 struct bwn_mac *mac = dr->dr_mac; in bwn_dma_free_descbufs() local
3363 struct bwn_dma *dma = &mac->mac_method.dma; in bwn_dma_free_descbufs()
3364 struct bwn_softc *sc = mac->mac_sc; in bwn_dma_free_descbufs()
3392 bwn_dma_tx_reset(struct bwn_mac *mac, uint16_t base, in bwn_dma_tx_reset() argument
3395 struct bwn_softc *sc = mac->mac_sc; in bwn_dma_tx_reset()
3403 value = BWN_READ_4(mac, base + offset); in bwn_dma_tx_reset()
3421 BWN_WRITE_4(mac, base + offset, 0); in bwn_dma_tx_reset()
3425 value = BWN_READ_4(mac, base + offset); in bwn_dma_tx_reset()
3451 bwn_dma_rx_reset(struct bwn_mac *mac, uint16_t base, in bwn_dma_rx_reset() argument
3454 struct bwn_softc *sc = mac->mac_sc; in bwn_dma_rx_reset()
3461 BWN_WRITE_4(mac, base + offset, 0); in bwn_dma_rx_reset()
3465 value = BWN_READ_4(mac, base + offset); in bwn_dma_rx_reset()
3530 bwn_wme_init(struct bwn_mac *mac) in bwn_wme_init() argument
3533 bwn_wme_load(mac); in bwn_wme_init()
3536 bwn_hf_write(mac, bwn_hf_read(mac) | BWN_HF_EDCF); in bwn_wme_init()
3537 BWN_WRITE_2(mac, BWN_IFSCTL, BWN_READ_2(mac, BWN_IFSCTL) | in bwn_wme_init()
3542 bwn_spu_setdelay(struct bwn_mac *mac, int idle) in bwn_spu_setdelay() argument
3544 struct bwn_softc *sc = mac->mac_sc; in bwn_spu_setdelay()
3548 delay = (mac->mac_phy.type == BWN_PHYTYPE_A) ? 3700 : 1050; in bwn_spu_setdelay()
3551 if ((mac->mac_phy.rf_ver == 0x2050) && (mac->mac_phy.rf_rev == 8)) in bwn_spu_setdelay()
3554 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_SPU_WAKEUP, delay); in bwn_spu_setdelay()
3558 bwn_bt_enable(struct bwn_mac *mac) in bwn_bt_enable() argument
3560 struct bwn_softc *sc = mac->mac_sc; in bwn_bt_enable()
3567 if (mac->mac_phy.type != BWN_PHYTYPE_B && !mac->mac_phy.gmode) in bwn_bt_enable()
3570 hf = bwn_hf_read(mac); in bwn_bt_enable()
3575 bwn_hf_write(mac, hf); in bwn_bt_enable()
3579 bwn_set_macaddr(struct bwn_mac *mac) in bwn_set_macaddr() argument
3582 bwn_mac_write_bssid(mac); in bwn_set_macaddr()
3583 bwn_mac_setfilter(mac, BWN_MACFILTER_SELF, in bwn_set_macaddr()
3584 mac->mac_sc->sc_ic.ic_macaddr); in bwn_set_macaddr()
3588 bwn_clear_keys(struct bwn_mac *mac) in bwn_clear_keys() argument
3592 for (i = 0; i < mac->mac_max_nr_keys; i++) { in bwn_clear_keys()
3593 KASSERT(i >= 0 && i < mac->mac_max_nr_keys, in bwn_clear_keys()
3596 bwn_key_dowrite(mac, i, BWN_SEC_ALGO_NONE, in bwn_clear_keys()
3598 if ((i <= 3) && !BWN_SEC_NEWAPI(mac)) { in bwn_clear_keys()
3599 bwn_key_dowrite(mac, i + 4, BWN_SEC_ALGO_NONE, in bwn_clear_keys()
3602 mac->mac_key[i].keyconf = NULL; in bwn_clear_keys()
3607 bwn_crypt_init(struct bwn_mac *mac) in bwn_crypt_init() argument
3609 struct bwn_softc *sc = mac->mac_sc; in bwn_crypt_init()
3611 mac->mac_max_nr_keys = (bhnd_get_hwrev(sc->sc_dev) >= 5) ? 58 : 20; in bwn_crypt_init()
3612 KASSERT(mac->mac_max_nr_keys <= N(mac->mac_key), in bwn_crypt_init()
3614 mac->mac_ktp = bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_KEY_TABLEP); in bwn_crypt_init()
3615 mac->mac_ktp *= 2; in bwn_crypt_init()
3617 BWN_WRITE_2(mac, BWN_RCMTA_COUNT, mac->mac_max_nr_keys - 8); in bwn_crypt_init()
3618 bwn_clear_keys(mac); in bwn_crypt_init()
3622 bwn_chip_exit(struct bwn_mac *mac) in bwn_chip_exit() argument
3624 bwn_phy_exit(mac); in bwn_chip_exit()
3628 bwn_fw_fillinfo(struct bwn_mac *mac) in bwn_fw_fillinfo() argument
3632 error = bwn_fw_gets(mac, BWN_FWTYPE_DEFAULT); in bwn_fw_fillinfo()
3635 error = bwn_fw_gets(mac, BWN_FWTYPE_OPENSOURCE); in bwn_fw_fillinfo()
3650 bwn_gpio_control(struct bwn_mac *mac, uint32_t pins) in bwn_gpio_control() argument
3656 sc = mac->mac_sc; in bwn_gpio_control()
3683 bwn_gpio_init(struct bwn_mac *mac) in bwn_gpio_init() argument
3688 sc = mac->mac_sc; in bwn_gpio_init()
3692 BWN_WRITE_4(mac, BWN_MACCTL, in bwn_gpio_init()
3693 BWN_READ_4(mac, BWN_MACCTL) & ~BWN_MACCTL_GPOUT_MASK); in bwn_gpio_init()
3694 BWN_WRITE_2(mac, BWN_GPIO_MASK, in bwn_gpio_init()
3695 BWN_READ_2(mac, BWN_GPIO_MASK) | pins); in bwn_gpio_init()
3699 BWN_WRITE_2(mac, BWN_GPIO_MASK, in bwn_gpio_init()
3700 BWN_READ_2(mac, BWN_GPIO_MASK) | BHND_GPIO_BOARD_PACTRL); in bwn_gpio_init()
3705 return (bwn_gpio_control(mac, pins)); in bwn_gpio_init()
3709 bwn_fw_loadinitvals(struct bwn_mac *mac) in bwn_fw_loadinitvals() argument
3715 struct bwn_fw *fw = &mac->mac_fw; in bwn_fw_loadinitvals()
3719 error = bwn_fwinitvals_write(mac, GETFWOFFSET(fw->initvals, hdr_len), in bwn_fw_loadinitvals()
3725 error = bwn_fwinitvals_write(mac, in bwn_fw_loadinitvals()
3735 bwn_phy_init(struct bwn_mac *mac) in bwn_phy_init() argument
3737 struct bwn_softc *sc = mac->mac_sc; in bwn_phy_init()
3740 mac->mac_phy.chan = mac->mac_phy.get_default_chan(mac); in bwn_phy_init()
3741 mac->mac_phy.rf_onoff(mac, 1); in bwn_phy_init()
3742 error = mac->mac_phy.init(mac); in bwn_phy_init()
3747 error = bwn_switch_channel(mac, in bwn_phy_init()
3748 mac->mac_phy.get_default_chan(mac)); in bwn_phy_init()
3756 if (mac->mac_phy.exit) in bwn_phy_init()
3757 mac->mac_phy.exit(mac); in bwn_phy_init()
3759 mac->mac_phy.rf_onoff(mac, 0); in bwn_phy_init()
3765 bwn_set_txantenna(struct bwn_mac *mac, int antenna) in bwn_set_txantenna() argument
3773 tmp = bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_ACKCTS_PHYCTL); in bwn_set_txantenna()
3775 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_ACKCTS_PHYCTL, tmp); in bwn_set_txantenna()
3777 tmp = bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_PROBE_RESP_PHYCTL); in bwn_set_txantenna()
3779 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_PROBE_RESP_PHYCTL, tmp); in bwn_set_txantenna()
3783 bwn_set_opmode(struct bwn_mac *mac) in bwn_set_opmode() argument
3785 struct bwn_softc *sc = mac->mac_sc; in bwn_set_opmode()
3790 ctl = BWN_READ_4(mac, BWN_MACCTL); in bwn_set_opmode()
3806 BWN_WRITE_4(mac, BWN_MACCTL, ctl); in bwn_set_opmode()
3816 BWN_WRITE_2(mac, 0x612, cfp_pretbtt); in bwn_set_opmode()
3829 bwn_dummy_transmission(struct bwn_mac *mac, int ofdm, int paon) in bwn_dummy_transmission() argument
3831 struct bwn_phy *phy = &mac->mac_phy; in bwn_dummy_transmission()
3832 struct bwn_softc *sc = mac->mac_sc; in bwn_dummy_transmission()
3847 BWN_ASSERT_LOCKED(mac->mac_sc); in bwn_dummy_transmission()
3850 bwn_ram_write(mac, i * 4, buffer[i]); in bwn_dummy_transmission()
3852 BWN_WRITE_2(mac, 0x0568, 0x0000); in bwn_dummy_transmission()
3853 BWN_WRITE_2(mac, 0x07c0, in bwn_dummy_transmission()
3857 BWN_WRITE_2(mac, 0x050c, value); in bwn_dummy_transmission()
3861 BWN_WRITE_2(mac, 0x0514, 0x1a02); in bwn_dummy_transmission()
3862 BWN_WRITE_2(mac, 0x0508, 0x0000); in bwn_dummy_transmission()
3863 BWN_WRITE_2(mac, 0x050a, 0x0000); in bwn_dummy_transmission()
3864 BWN_WRITE_2(mac, 0x054c, 0x0000); in bwn_dummy_transmission()
3865 BWN_WRITE_2(mac, 0x056a, 0x0014); in bwn_dummy_transmission()
3866 BWN_WRITE_2(mac, 0x0568, 0x0826); in bwn_dummy_transmission()
3867 BWN_WRITE_2(mac, 0x0500, 0x0000); in bwn_dummy_transmission()
3874 BWN_WRITE_2(mac, 0x0502, 0x00d0); in bwn_dummy_transmission()
3877 BWN_WRITE_2(mac, 0x0502, 0x0050); in bwn_dummy_transmission()
3880 BWN_WRITE_2(mac, 0x0502, 0x0030); in bwn_dummy_transmission()
3885 BWN_READ_2(mac, 0x0502); in bwn_dummy_transmission()
3888 BWN_RF_WRITE(mac, 0x0051, 0x0017); in bwn_dummy_transmission()
3890 value = BWN_READ_2(mac, 0x050e); in bwn_dummy_transmission()
3896 value = BWN_READ_2(mac, 0x050e); in bwn_dummy_transmission()
3902 value = BWN_READ_2(mac, 0x0690); in bwn_dummy_transmission()
3908 BWN_RF_WRITE(mac, 0x0051, 0x0037); in bwn_dummy_transmission()
3912 bwn_ram_write(struct bwn_mac *mac, uint16_t offset, uint32_t val) in bwn_ram_write() argument
3918 macctl = BWN_READ_4(mac, BWN_MACCTL); in bwn_ram_write()
3922 BWN_WRITE_4(mac, BWN_RAM_CONTROL, offset); in bwn_ram_write()
3923 BWN_BARRIER(mac, BWN_RAM_CONTROL, 4, BUS_SPACE_BARRIER_WRITE); in bwn_ram_write()
3924 BWN_WRITE_4(mac, BWN_RAM_DATA, val); in bwn_ram_write()
3928 bwn_mac_suspend(struct bwn_mac *mac) in bwn_mac_suspend() argument
3930 struct bwn_softc *sc = mac->mac_sc; in bwn_mac_suspend()
3934 KASSERT(mac->mac_suspended >= 0, in bwn_mac_suspend()
3937 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: suspended=%d\n", in bwn_mac_suspend()
3938 __func__, mac->mac_suspended); in bwn_mac_suspend()
3940 if (mac->mac_suspended == 0) { in bwn_mac_suspend()
3941 bwn_psctl(mac, BWN_PS_AWAKE); in bwn_mac_suspend()
3942 BWN_WRITE_4(mac, BWN_MACCTL, in bwn_mac_suspend()
3943 BWN_READ_4(mac, BWN_MACCTL) in bwn_mac_suspend()
3945 BWN_READ_4(mac, BWN_MACCTL); in bwn_mac_suspend()
3947 tmp = BWN_READ_4(mac, BWN_INTR_REASON); in bwn_mac_suspend()
3953 tmp = BWN_READ_4(mac, BWN_INTR_REASON); in bwn_mac_suspend()
3961 mac->mac_suspended++; in bwn_mac_suspend()
3965 bwn_mac_enable(struct bwn_mac *mac) in bwn_mac_enable() argument
3967 struct bwn_softc *sc = mac->mac_sc; in bwn_mac_enable()
3970 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: suspended=%d\n", in bwn_mac_enable()
3971 __func__, mac->mac_suspended); in bwn_mac_enable()
3973 state = bwn_shm_read_2(mac, BWN_SHARED, in bwn_mac_enable()
3982 mac->mac_suspended--; in bwn_mac_enable()
3983 KASSERT(mac->mac_suspended >= 0, in bwn_mac_enable()
3985 if (mac->mac_suspended == 0) { in bwn_mac_enable()
3986 BWN_WRITE_4(mac, BWN_MACCTL, in bwn_mac_enable()
3987 BWN_READ_4(mac, BWN_MACCTL) | BWN_MACCTL_ON); in bwn_mac_enable()
3988 BWN_WRITE_4(mac, BWN_INTR_REASON, BWN_INTR_MAC_SUSPENDED); in bwn_mac_enable()
3989 BWN_READ_4(mac, BWN_MACCTL); in bwn_mac_enable()
3990 BWN_READ_4(mac, BWN_INTR_REASON); in bwn_mac_enable()
3991 bwn_psctl(mac, 0); in bwn_mac_enable()
3996 bwn_psctl(struct bwn_mac *mac, uint32_t flags) in bwn_psctl() argument
3998 struct bwn_softc *sc = mac->mac_sc; in bwn_psctl()
4009 BWN_WRITE_4(mac, BWN_MACCTL, in bwn_psctl()
4010 (BWN_READ_4(mac, BWN_MACCTL) | BWN_MACCTL_AWAKE) & in bwn_psctl()
4012 BWN_READ_4(mac, BWN_MACCTL); in bwn_psctl()
4015 ucstat = bwn_shm_read_2(mac, BWN_SHARED, in bwn_psctl()
4022 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: ucstat=%d\n", __func__, in bwn_psctl()
4027 bwn_fw_gets(struct bwn_mac *mac, enum bwn_fwtype type) in bwn_fw_gets() argument
4029 struct bwn_softc *sc = mac->mac_sc; in bwn_fw_gets()
4030 struct bwn_fw *fw = &mac->mac_fw; in bwn_fw_gets()
4040 if (mac->mac_phy.type == BWN_PHYTYPE_AC) in bwn_fw_gets()
4044 if (mac->mac_phy.type == BWN_PHYTYPE_AC) in bwn_fw_gets()
4048 if (mac->mac_phy.type == BWN_PHYTYPE_LCN40) in bwn_fw_gets()
4052 if (mac->mac_phy.type == BWN_PHYTYPE_N) in bwn_fw_gets()
4056 if (mac->mac_phy.type == BWN_PHYTYPE_HT) in bwn_fw_gets()
4060 if (mac->mac_phy.type == BWN_PHYTYPE_HT) in bwn_fw_gets()
4065 if (mac->mac_phy.type == BWN_PHYTYPE_N) in bwn_fw_gets()
4067 else if (mac->mac_phy.type == BWN_PHYTYPE_LCN) in bwn_fw_gets()
4071 if (mac->mac_phy.type == BWN_PHYTYPE_LCN) in bwn_fw_gets()
4075 if (mac->mac_phy.type == BWN_PHYTYPE_N) in bwn_fw_gets()
4082 if (mac->mac_phy.type == BWN_PHYTYPE_N) in bwn_fw_gets()
4084 else if (mac->mac_phy.type == BWN_PHYTYPE_LP) in bwn_fw_gets()
4110 bwn_release_firmware(mac); in bwn_fw_gets()
4115 error = bwn_fw_get(mac, type, filename, &fw->ucode); in bwn_fw_gets()
4117 bwn_release_firmware(mac); in bwn_fw_gets()
4124 error = bwn_fw_get(mac, type, "pcm5", &fw->pcm); in bwn_fw_gets()
4128 bwn_release_firmware(mac); in bwn_fw_gets()
4133 bwn_release_firmware(mac); in bwn_fw_gets()
4142 switch (mac->mac_phy.type) { in bwn_fw_gets()
4188 error = bwn_fw_get(mac, type, filename, &fw->initvals); in bwn_fw_gets()
4190 bwn_release_firmware(mac); in bwn_fw_gets()
4195 switch (mac->mac_phy.type) { in bwn_fw_gets()
4243 mac->mac_phy.type); in bwn_fw_gets()
4246 error = bwn_fw_get(mac, type, filename, &fw->initvals_band); in bwn_fw_gets()
4248 bwn_release_firmware(mac); in bwn_fw_gets()
4254 rev, mac->mac_phy.type); in bwn_fw_gets()
4255 bwn_release_firmware(mac); in bwn_fw_gets()
4260 bwn_fw_get(struct bwn_mac *mac, enum bwn_fwtype type, in bwn_fw_get() argument
4264 struct bwn_softc *sc = mac->mac_sc; in bwn_fw_get()
4280 (mac->mac_phy.type == BWN_PHYTYPE_LP) ? "lp_" : "", name); in bwn_fw_get()
4317 bwn_release_firmware(struct bwn_mac *mac) in bwn_release_firmware() argument
4320 bwn_do_release_fw(&mac->mac_fw.ucode); in bwn_release_firmware()
4321 bwn_do_release_fw(&mac->mac_fw.pcm); in bwn_release_firmware()
4322 bwn_do_release_fw(&mac->mac_fw.initvals); in bwn_release_firmware()
4323 bwn_do_release_fw(&mac->mac_fw.initvals_band); in bwn_release_firmware()
4337 bwn_fw_loaducode(struct bwn_mac *mac) in bwn_fw_loaducode() argument
4343 struct bwn_softc *sc = mac->mac_sc; in bwn_fw_loaducode()
4350 ctl = BWN_READ_4(mac, BWN_MACCTL); in bwn_fw_loaducode()
4354 BWN_WRITE_4(mac, BWN_MACCTL, ctl); in bwn_fw_loaducode()
4356 bwn_shm_write_2(mac, BWN_SCRATCH, i, 0); in bwn_fw_loaducode()
4358 bwn_shm_write_2(mac, BWN_SHARED, i, 0); in bwn_fw_loaducode()
4360 data = GETFWOFFSET(mac->mac_fw.ucode, sizeof(struct bwn_fwhdr)); in bwn_fw_loaducode()
4361 bwn_shm_ctlword(mac, BWN_UCODE | BWN_SHARED_AUTOINC, 0x0000); in bwn_fw_loaducode()
4362 for (i = 0; i < GETFWSIZE(mac->mac_fw.ucode, sizeof(struct bwn_fwhdr)); in bwn_fw_loaducode()
4364 BWN_WRITE_4(mac, BWN_SHM_DATA, be32toh(data[i])); in bwn_fw_loaducode()
4368 if (mac->mac_fw.pcm.fw) { in bwn_fw_loaducode()
4369 data = GETFWOFFSET(mac->mac_fw.pcm, sizeof(struct bwn_fwhdr)); in bwn_fw_loaducode()
4370 bwn_shm_ctlword(mac, BWN_HW, 0x01ea); in bwn_fw_loaducode()
4371 BWN_WRITE_4(mac, BWN_SHM_DATA, 0x00004000); in bwn_fw_loaducode()
4372 bwn_shm_ctlword(mac, BWN_HW, 0x01eb); in bwn_fw_loaducode()
4373 for (i = 0; i < GETFWSIZE(mac->mac_fw.pcm, in bwn_fw_loaducode()
4375 BWN_WRITE_4(mac, BWN_SHM_DATA, be32toh(data[i])); in bwn_fw_loaducode()
4380 BWN_WRITE_4(mac, BWN_INTR_REASON, BWN_INTR_ALL); in bwn_fw_loaducode()
4381 BWN_WRITE_4(mac, BWN_MACCTL, in bwn_fw_loaducode()
4382 (BWN_READ_4(mac, BWN_MACCTL) & ~BWN_MACCTL_MCODE_JMP0) | in bwn_fw_loaducode()
4386 if (BWN_READ_4(mac, BWN_INTR_REASON) == BWN_INTR_MAC_SUSPENDED) in bwn_fw_loaducode()
4395 BWN_READ_4(mac, BWN_INTR_REASON); in bwn_fw_loaducode()
4397 mac->mac_fw.rev = bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_UCODE_REV); in bwn_fw_loaducode()
4398 if (mac->mac_fw.rev <= 0x128) { in bwn_fw_loaducode()
4408 if (mac->mac_fw.rev >= 598) in bwn_fw_loaducode()
4409 mac->mac_fw.fw_hdr_format = BWN_FW_HDR_598; in bwn_fw_loaducode()
4410 else if (mac->mac_fw.rev >= 410) in bwn_fw_loaducode()
4411 mac->mac_fw.fw_hdr_format = BWN_FW_HDR_410; in bwn_fw_loaducode()
4413 mac->mac_fw.fw_hdr_format = BWN_FW_HDR_351; in bwn_fw_loaducode()
4424 if (mac->mac_fw.fw_hdr_format == BWN_FW_HDR_598) { in bwn_fw_loaducode()
4432 mac->mac_fw.patch = bwn_shm_read_2(mac, BWN_SHARED, in bwn_fw_loaducode()
4434 date = bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_UCODE_DATE); in bwn_fw_loaducode()
4435 mac->mac_fw.opensource = (date == 0xffff); in bwn_fw_loaducode()
4437 mac->mac_flags |= BWN_MAC_FLAG_WME; in bwn_fw_loaducode()
4438 mac->mac_flags |= BWN_MAC_FLAG_HWCRYPTO; in bwn_fw_loaducode()
4440 time = bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_UCODE_TIME); in bwn_fw_loaducode()
4441 if (mac->mac_fw.opensource == 0) { in bwn_fw_loaducode()
4444 mac->mac_fw.rev, mac->mac_fw.patch, date, time); in bwn_fw_loaducode()
4445 if (mac->mac_fw.no_pcmfile) in bwn_fw_loaducode()
4449 mac->mac_fw.patch = time; in bwn_fw_loaducode()
4450 fwcaps = bwn_fwcaps_read(mac); in bwn_fw_loaducode()
4451 if (!(fwcaps & BWN_FWCAPS_HWCRYPTO) || mac->mac_fw.no_pcmfile) { in bwn_fw_loaducode()
4454 mac->mac_flags &= ~BWN_MAC_FLAG_HWCRYPTO; in bwn_fw_loaducode()
4458 mac->mac_flags &= ~BWN_MAC_FLAG_WME; in bwn_fw_loaducode()
4462 if (BWN_ISOLDFMT(mac)) in bwn_fw_loaducode()
4468 BWN_WRITE_4(mac, BWN_MACCTL, in bwn_fw_loaducode()
4469 (BWN_READ_4(mac, BWN_MACCTL) & ~BWN_MACCTL_MCODE_RUN) | in bwn_fw_loaducode()
4479 bwn_fwcaps_read(struct bwn_mac *mac) in bwn_fwcaps_read() argument
4482 KASSERT(mac->mac_fw.opensource == 1, in bwn_fwcaps_read()
4484 return (bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_FWCAPS)); in bwn_fwcaps_read()
4488 bwn_fwinitvals_write(struct bwn_mac *mac, const struct bwn_fwinitvals *ivals, in bwn_fwinitvals_write() argument
4497 struct bwn_softc *sc = mac->mac_sc; in bwn_fwinitvals_write()
4519 BWN_WRITE_4(mac, offset, be32toh(iv->data.d32)); in bwn_fwinitvals_write()
4525 BWN_WRITE_2(mac, offset, be16toh(iv->data.d16)); in bwn_fwinitvals_write()
4541 bwn_switch_channel(struct bwn_mac *mac, int chan) in bwn_switch_channel() argument
4543 struct bwn_phy *phy = &(mac->mac_phy); in bwn_switch_channel()
4544 struct bwn_softc *sc = mac->mac_sc; in bwn_switch_channel()
4550 chan = phy->get_default_chan(mac); in bwn_switch_channel()
4555 savedcookie = bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_CHAN); in bwn_switch_channel()
4556 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_CHAN, channelcookie); in bwn_switch_channel()
4557 error = phy->switch_channel(mac, chan); in bwn_switch_channel()
4561 mac->mac_phy.chan = chan; in bwn_switch_channel()
4566 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_CHAN, savedcookie); in bwn_switch_channel()
4591 bwn_wme_load(struct bwn_mac *mac) in bwn_wme_load() argument
4593 struct bwn_softc *sc = mac->mac_sc; in bwn_wme_load()
4599 bwn_mac_suspend(mac); in bwn_wme_load()
4601 bwn_wme_loadparams(mac, &(sc->sc_wmeParams[i]), in bwn_wme_load()
4603 bwn_mac_enable(mac); in bwn_wme_load()
4607 bwn_wme_loadparams(struct bwn_mac *mac, in bwn_wme_loadparams() argument
4610 struct bwn_softc *sc = mac->mac_sc; in bwn_wme_loadparams()
4615 slot = BWN_READ_2(mac, BWN_RNG) & in bwn_wme_loadparams()
4637 tmp = bwn_shm_read_2(mac, BWN_SHARED, in bwn_wme_loadparams()
4640 bwn_shm_write_2(mac, BWN_SHARED, shm_offset + (i * 2), in bwn_wme_loadparams()
4643 bwn_shm_write_2(mac, BWN_SHARED, shm_offset + (i * 2), in bwn_wme_loadparams()
4650 bwn_mac_write_bssid(struct bwn_mac *mac) in bwn_mac_write_bssid() argument
4652 struct bwn_softc *sc = mac->mac_sc; in bwn_mac_write_bssid()
4657 bwn_mac_setfilter(mac, BWN_MACFILTER_BSSID, sc->sc_bssid); in bwn_mac_write_bssid()
4667 bwn_ram_write(mac, 0x20 + i, tmp); in bwn_mac_write_bssid()
4672 bwn_mac_setfilter(struct bwn_mac *mac, uint16_t offset, in bwn_mac_setfilter() argument
4678 if (!mac) in bwn_mac_setfilter()
4682 BWN_WRITE_2(mac, BWN_MACFILTER_CONTROL, offset); in bwn_mac_setfilter()
4686 BWN_WRITE_2(mac, BWN_MACFILTER_DATA, data); in bwn_mac_setfilter()
4689 BWN_WRITE_2(mac, BWN_MACFILTER_DATA, data); in bwn_mac_setfilter()
4692 BWN_WRITE_2(mac, BWN_MACFILTER_DATA, data); in bwn_mac_setfilter()
4696 bwn_key_dowrite(struct bwn_mac *mac, uint8_t index, uint8_t algorithm, in bwn_key_dowrite() argument
4702 if (BWN_SEC_NEWAPI(mac)) in bwn_key_dowrite()
4705 KASSERT(index < mac->mac_max_nr_keys, in bwn_key_dowrite()
4711 bwn_key_macwrite(mac, index, NULL); in bwn_key_dowrite()
4714 bwn_key_write(mac, index, algorithm, buf); in bwn_key_dowrite()
4716 bwn_key_macwrite(mac, index, mac_addr); in bwn_key_dowrite()
4718 mac->mac_key[index].algorithm = algorithm; in bwn_key_dowrite()
4722 bwn_key_macwrite(struct bwn_mac *mac, uint8_t index, const uint8_t *addr) in bwn_key_macwrite() argument
4724 struct bwn_softc *sc = mac->mac_sc; in bwn_key_macwrite()
4728 if (BWN_SEC_NEWAPI(mac)) in bwn_key_macwrite()
4745 bwn_shm_write_4(mac, BWN_RCMTA, (index * 2) + 0, addrtmp[0]); in bwn_key_macwrite()
4746 bwn_shm_write_2(mac, BWN_RCMTA, (index * 2) + 1, addrtmp[1]); in bwn_key_macwrite()
4749 bwn_shm_write_4(mac, BWN_SHARED, in bwn_key_macwrite()
4751 bwn_shm_write_2(mac, BWN_SHARED, in bwn_key_macwrite()
4758 bwn_key_write(struct bwn_mac *mac, uint8_t index, uint8_t algorithm, in bwn_key_write() argument
4765 kidx = BWN_SEC_KEY2FW(mac, index); in bwn_key_write()
4766 bwn_shm_write_2(mac, BWN_SHARED, in bwn_key_write()
4769 offset = mac->mac_ktp + (index * BWN_SEC_KEYSIZE); in bwn_key_write()
4773 bwn_shm_write_2(mac, BWN_SHARED, offset + i, value); in bwn_key_write()
4778 bwn_phy_exit(struct bwn_mac *mac) in bwn_phy_exit() argument
4781 mac->mac_phy.rf_onoff(mac, 0); in bwn_phy_exit()
4782 if (mac->mac_phy.exit != NULL) in bwn_phy_exit()
4783 mac->mac_phy.exit(mac); in bwn_phy_exit()
4787 bwn_dma_free(struct bwn_mac *mac) in bwn_dma_free() argument
4791 if ((mac->mac_flags & BWN_MAC_FLAG_DMA) == 0) in bwn_dma_free()
4793 dma = &mac->mac_method.dma; in bwn_dma_free()
4804 bwn_core_stop(struct bwn_mac *mac) in bwn_core_stop() argument
4806 struct bwn_softc *sc = mac->mac_sc; in bwn_core_stop()
4810 if (mac->mac_status < BWN_MAC_STATUS_STARTED) in bwn_core_stop()
4817 BWN_WRITE_4(mac, BWN_INTR_MASK, 0); in bwn_core_stop()
4818 BWN_READ_4(mac, BWN_INTR_MASK); in bwn_core_stop()
4819 bwn_mac_suspend(mac); in bwn_core_stop()
4821 mac->mac_status = BWN_MAC_STATUS_INITED; in bwn_core_stop()
4829 struct bwn_mac *mac; in bwn_switch_band() local
4835 TAILQ_FOREACH(mac, &sc->sc_maclist, mac_list) { in bwn_switch_band()
4837 mac->mac_phy.supports_2ghz) { in bwn_switch_band()
4838 up_dev = mac; in bwn_switch_band()
4841 mac->mac_phy.supports_5ghz) { in bwn_switch_band()
4842 up_dev = mac; in bwn_switch_band()
4897 bwn_rf_turnon(struct bwn_mac *mac) in bwn_rf_turnon() argument
4900 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: called\n", __func__); in bwn_rf_turnon()
4902 bwn_mac_suspend(mac); in bwn_rf_turnon()
4903 mac->mac_phy.rf_onoff(mac, 1); in bwn_rf_turnon()
4904 mac->mac_phy.rf_on = 1; in bwn_rf_turnon()
4905 bwn_mac_enable(mac); in bwn_rf_turnon()
4909 bwn_rf_turnoff(struct bwn_mac *mac) in bwn_rf_turnoff() argument
4912 DPRINTF(mac->mac_sc, BWN_DEBUG_RESET, "%s: called\n", __func__); in bwn_rf_turnoff()
4914 bwn_mac_suspend(mac); in bwn_rf_turnoff()
4915 mac->mac_phy.rf_onoff(mac, 0); in bwn_rf_turnoff()
4916 mac->mac_phy.rf_on = 0; in bwn_rf_turnoff()
4917 bwn_mac_enable(mac); in bwn_rf_turnoff()
4924 bwn_phy_reset(struct bwn_mac *mac) in bwn_phy_reset() argument
4930 sc = mac->mac_sc; in bwn_phy_reset()
4957 struct bwn_mac *mac = sc->sc_curmac; in bwn_newstate() local
4970 bwn_led_newstate(mac, nstate); in bwn_newstate()
4985 bwn_set_macaddr(mac); in bwn_newstate()
4995 bwn_set_opmode(mac); in bwn_newstate()
4996 bwn_set_pretbtt(mac); in bwn_newstate()
4997 bwn_spu_setdelay(mac, 0); in bwn_newstate()
4998 bwn_set_macaddr(mac); in bwn_newstate()
5007 bwn_set_pretbtt(struct bwn_mac *mac) in bwn_set_pretbtt() argument
5009 struct bwn_softc *sc = mac->mac_sc; in bwn_set_pretbtt()
5016 pretbtt = (mac->mac_phy.type == BWN_PHYTYPE_A) ? 120 : 250; in bwn_set_pretbtt()
5017 bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_PRETBTT, pretbtt); in bwn_set_pretbtt()
5018 BWN_WRITE_2(mac, BWN_TSF_CFP_PRETBTT, pretbtt); in bwn_set_pretbtt()
5024 struct bwn_mac *mac = arg; in bwn_intr() local
5025 struct bwn_softc *sc = mac->mac_sc; in bwn_intr()
5028 if (mac->mac_status < BWN_MAC_STATUS_STARTED || in bwn_intr()
5034 reason = BWN_READ_4(mac, BWN_INTR_REASON); in bwn_intr()
5037 reason &= mac->mac_intr_mask; in bwn_intr()
5042 mac->mac_reason[0] = BWN_READ_4(mac, BWN_DMA0_REASON) & 0x0001dc00; in bwn_intr()
5043 mac->mac_reason[1] = BWN_READ_4(mac, BWN_DMA1_REASON) & 0x0000dc00; in bwn_intr()
5044 mac->mac_reason[2] = BWN_READ_4(mac, BWN_DMA2_REASON) & 0x0000dc00; in bwn_intr()
5045 mac->mac_reason[3] = BWN_READ_4(mac, BWN_DMA3_REASON) & 0x0001dc00; in bwn_intr()
5046 mac->mac_reason[4] = BWN_READ_4(mac, BWN_DMA4_REASON) & 0x0000dc00; in bwn_intr()
5047 BWN_WRITE_4(mac, BWN_INTR_REASON, reason); in bwn_intr()
5048 BWN_WRITE_4(mac, BWN_DMA0_REASON, mac->mac_reason[0]); in bwn_intr()
5049 BWN_WRITE_4(mac, BWN_DMA1_REASON, mac->mac_reason[1]); in bwn_intr()
5050 BWN_WRITE_4(mac, BWN_DMA2_REASON, mac->mac_reason[2]); in bwn_intr()
5051 BWN_WRITE_4(mac, BWN_DMA3_REASON, mac->mac_reason[3]); in bwn_intr()
5052 BWN_WRITE_4(mac, BWN_DMA4_REASON, mac->mac_reason[4]); in bwn_intr()
5055 BWN_WRITE_4(mac, BWN_INTR_MASK, 0); in bwn_intr()
5057 mac->mac_reason_intr = reason; in bwn_intr()
5059 BWN_BARRIER(mac, 0, 0, BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE); in bwn_intr()
5061 taskqueue_enqueue(sc->sc_tq, &mac->mac_intrtask); in bwn_intr()
5068 struct bwn_mac *mac = arg; in bwn_intrtask() local
5069 struct bwn_softc *sc = mac->mac_sc; in bwn_intrtask()
5074 if (mac->mac_status < BWN_MAC_STATUS_STARTED || in bwn_intrtask()
5080 for (i = 0; i < N(mac->mac_reason); i++) in bwn_intrtask()
5081 merged |= mac->mac_reason[i]; in bwn_intrtask()
5083 if (mac->mac_reason_intr & BWN_INTR_MAC_TXERR) in bwn_intrtask()
5086 if (mac->mac_reason_intr & BWN_INTR_PHY_TXERR) { in bwn_intrtask()
5088 mac->mac_phy.txerrors--; in bwn_intrtask()
5089 if (mac->mac_phy.txerrors == 0) { in bwn_intrtask()
5090 mac->mac_phy.txerrors = BWN_TXERROR_MAX; in bwn_intrtask()
5091 bwn_restart(mac, "PHY TX errors"); in bwn_intrtask()
5099 mac->mac_reason[0], mac->mac_reason[1], in bwn_intrtask()
5100 mac->mac_reason[2], mac->mac_reason[3], in bwn_intrtask()
5101 mac->mac_reason[4], mac->mac_reason[5]); in bwn_intrtask()
5102 bwn_restart(mac, "DMA error"); in bwn_intrtask()
5109 mac->mac_reason[0], mac->mac_reason[1], in bwn_intrtask()
5110 mac->mac_reason[2], mac->mac_reason[3], in bwn_intrtask()
5111 mac->mac_reason[4], mac->mac_reason[5]); in bwn_intrtask()
5115 if (mac->mac_reason_intr & BWN_INTR_UCODE_DEBUG) in bwn_intrtask()
5116 bwn_intr_ucode_debug(mac); in bwn_intrtask()
5117 if (mac->mac_reason_intr & BWN_INTR_TBTT_INDI) in bwn_intrtask()
5118 bwn_intr_tbtt_indication(mac); in bwn_intrtask()
5119 if (mac->mac_reason_intr & BWN_INTR_ATIM_END) in bwn_intrtask()
5120 bwn_intr_atim_end(mac); in bwn_intrtask()
5121 if (mac->mac_reason_intr & BWN_INTR_BEACON) in bwn_intrtask()
5122 bwn_intr_beacon(mac); in bwn_intrtask()
5123 if (mac->mac_reason_intr & BWN_INTR_PMQ) in bwn_intrtask()
5124 bwn_intr_pmq(mac); in bwn_intrtask()
5125 if (mac->mac_reason_intr & BWN_INTR_NOISESAMPLE_OK) in bwn_intrtask()
5126 bwn_intr_noise(mac); in bwn_intrtask()
5128 if (mac->mac_flags & BWN_MAC_FLAG_DMA) { in bwn_intrtask()
5129 if (mac->mac_reason[0] & BWN_DMAINTR_RX_DONE) { in bwn_intrtask()
5130 bwn_dma_rx(mac->mac_method.dma.rx); in bwn_intrtask()
5134 rx = bwn_pio_rx(&mac->mac_method.pio.rx); in bwn_intrtask()
5136 KASSERT(!(mac->mac_reason[1] & BWN_DMAINTR_RX_DONE), ("%s", __func__)); in bwn_intrtask()
5137 KASSERT(!(mac->mac_reason[2] & BWN_DMAINTR_RX_DONE), ("%s", __func__)); in bwn_intrtask()
5138 KASSERT(!(mac->mac_reason[3] & BWN_DMAINTR_RX_DONE), ("%s", __func__)); in bwn_intrtask()
5139 KASSERT(!(mac->mac_reason[4] & BWN_DMAINTR_RX_DONE), ("%s", __func__)); in bwn_intrtask()
5140 KASSERT(!(mac->mac_reason[5] & BWN_DMAINTR_RX_DONE), ("%s", __func__)); in bwn_intrtask()
5142 if (mac->mac_reason_intr & BWN_INTR_TX_OK) { in bwn_intrtask()
5143 bwn_intr_txeof(mac); in bwn_intrtask()
5147 BWN_WRITE_4(mac, BWN_INTR_MASK, mac->mac_intr_mask); in bwn_intrtask()
5166 bwn_led_event(mac, evt); in bwn_intrtask()
5172 BWN_BARRIER(mac, 0, 0, BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE); in bwn_intrtask()
5178 bwn_restart(struct bwn_mac *mac, const char *msg) in bwn_restart() argument
5180 struct bwn_softc *sc = mac->mac_sc; in bwn_restart()
5183 if (mac->mac_status < BWN_MAC_STATUS_INITED) in bwn_restart()
5187 ieee80211_runtask(ic, &mac->mac_hwreset); in bwn_restart()
5191 bwn_intr_ucode_debug(struct bwn_mac *mac) in bwn_intr_ucode_debug() argument
5193 struct bwn_softc *sc = mac->mac_sc; in bwn_intr_ucode_debug()
5196 if (mac->mac_fw.opensource == 0) in bwn_intr_ucode_debug()
5199 reason = bwn_shm_read_2(mac, BWN_SCRATCH, BWN_DEBUGINTR_REASON_REG); in bwn_intr_ucode_debug()
5202 bwn_handle_fwpanic(mac); in bwn_intr_ucode_debug()
5218 bwn_shm_write_2(mac, BWN_SCRATCH, BWN_DEBUGINTR_REASON_REG, in bwn_intr_ucode_debug()
5223 bwn_intr_tbtt_indication(struct bwn_mac *mac) in bwn_intr_tbtt_indication() argument
5225 struct bwn_softc *sc = mac->mac_sc; in bwn_intr_tbtt_indication()
5229 bwn_psctl(mac, 0); in bwn_intr_tbtt_indication()
5231 mac->mac_flags |= BWN_MAC_FLAG_DFQVALID; in bwn_intr_tbtt_indication()
5235 bwn_intr_atim_end(struct bwn_mac *mac) in bwn_intr_atim_end() argument
5238 if (mac->mac_flags & BWN_MAC_FLAG_DFQVALID) { in bwn_intr_atim_end()
5239 BWN_WRITE_4(mac, BWN_MACCMD, in bwn_intr_atim_end()
5240 BWN_READ_4(mac, BWN_MACCMD) | BWN_MACCMD_DFQ_VALID); in bwn_intr_atim_end()
5241 mac->mac_flags &= ~BWN_MAC_FLAG_DFQVALID; in bwn_intr_atim_end()
5246 bwn_intr_beacon(struct bwn_mac *mac) in bwn_intr_beacon() argument
5248 struct bwn_softc *sc = mac->mac_sc; in bwn_intr_beacon()
5256 mac->mac_intr_mask &= ~BWN_INTR_BEACON; in bwn_intr_beacon()
5258 cmd = BWN_READ_4(mac, BWN_MACCMD); in bwn_intr_beacon()
5263 BWN_WRITE_4(mac, BWN_INTR_REASON, BWN_INTR_BEACON); in bwn_intr_beacon()
5264 mac->mac_intr_mask |= BWN_INTR_BEACON; in bwn_intr_beacon()
5270 bwn_load_beacon0(mac); in bwn_intr_beacon()
5271 bwn_load_beacon1(mac); in bwn_intr_beacon()
5272 cmd = BWN_READ_4(mac, BWN_MACCMD); in bwn_intr_beacon()
5274 BWN_WRITE_4(mac, BWN_MACCMD, cmd); in bwn_intr_beacon()
5277 bwn_load_beacon0(mac); in bwn_intr_beacon()
5278 cmd = BWN_READ_4(mac, BWN_MACCMD); in bwn_intr_beacon()
5280 BWN_WRITE_4(mac, BWN_MACCMD, cmd); in bwn_intr_beacon()
5282 bwn_load_beacon1(mac); in bwn_intr_beacon()
5283 cmd = BWN_READ_4(mac, BWN_MACCMD); in bwn_intr_beacon()
5285 BWN_WRITE_4(mac, BWN_MACCMD, cmd); in bwn_intr_beacon()
5291 bwn_intr_pmq(struct bwn_mac *mac) in bwn_intr_pmq() argument
5296 tmp = BWN_READ_4(mac, BWN_PS_STATUS); in bwn_intr_pmq()
5300 BWN_WRITE_2(mac, BWN_PS_STATUS, 0x0002); in bwn_intr_pmq()
5304 bwn_intr_noise(struct bwn_mac *mac) in bwn_intr_noise() argument
5306 struct bwn_phy_g *pg = &mac->mac_phy.phy_g; in bwn_intr_noise()
5312 if (mac->mac_phy.type != BWN_PHYTYPE_G) in bwn_intr_noise()
5315 KASSERT(mac->mac_noise.noi_running, ("%s: fail", __func__)); in bwn_intr_noise()
5316 *((uint32_t *)noise) = htole32(bwn_jssi_read(mac)); in bwn_intr_noise()
5321 KASSERT(mac->mac_noise.noi_nsamples < 8, in bwn_intr_noise()
5323 i = mac->mac_noise.noi_nsamples; in bwn_intr_noise()
5328 mac->mac_noise.noi_samples[i][0] = pg->pg_nrssi_lt[noise[0]]; in bwn_intr_noise()
5329 mac->mac_noise.noi_samples[i][1] = pg->pg_nrssi_lt[noise[1]]; in bwn_intr_noise()
5330 mac->mac_noise.noi_samples[i][2] = pg->pg_nrssi_lt[noise[2]]; in bwn_intr_noise()
5331 mac->mac_noise.noi_samples[i][3] = pg->pg_nrssi_lt[noise[3]]; in bwn_intr_noise()
5332 mac->mac_noise.noi_nsamples++; in bwn_intr_noise()
5333 if (mac->mac_noise.noi_nsamples == 8) { in bwn_intr_noise()
5337 average += mac->mac_noise.noi_samples[i][j]; in bwn_intr_noise()
5340 tmp = (bwn_shm_read_2(mac, BWN_SHARED, 0x40c) / 128) & 0x1f; in bwn_intr_noise()
5347 mac->mac_stats.link_noise = average; in bwn_intr_noise()
5348 mac->mac_noise.noi_running = 0; in bwn_intr_noise()
5352 bwn_noise_gensample(mac); in bwn_intr_noise()
5358 struct bwn_mac *mac = prq->prq_mac; in bwn_pio_rx() local
5359 struct bwn_softc *sc = mac->mac_sc; in bwn_pio_rx()
5364 if (mac->mac_status < BWN_MAC_STATUS_STARTED) in bwn_pio_rx()
5398 bwn_intr_txeof(struct bwn_mac *mac) in bwn_intr_txeof() argument
5404 BWN_ASSERT_LOCKED(mac->mac_sc); in bwn_intr_txeof()
5407 stat0 = BWN_READ_4(mac, BWN_XMITSTAT_0); in bwn_intr_txeof()
5410 stat1 = BWN_READ_4(mac, BWN_XMITSTAT_1); in bwn_intr_txeof()
5412 DPRINTF(mac->mac_sc, BWN_DEBUG_XMIT, in bwn_intr_txeof()
5430 DPRINTF(mac->mac_sc, BWN_DEBUG_XMIT, in bwn_intr_txeof()
5445 bwn_handle_txeof(mac, &stat); in bwn_intr_txeof()
5452 struct bwn_mac *mac = arg; in bwn_hwreset() local
5453 struct bwn_softc *sc = mac->mac_sc; in bwn_hwreset()
5459 prev_status = mac->mac_status; in bwn_hwreset()
5461 bwn_core_stop(mac); in bwn_hwreset()
5463 bwn_core_exit(mac); in bwn_hwreset()
5466 error = bwn_core_init(mac); in bwn_hwreset()
5471 bwn_core_start(mac); in bwn_hwreset()
5481 bwn_handle_fwpanic(struct bwn_mac *mac) in bwn_handle_fwpanic() argument
5483 struct bwn_softc *sc = mac->mac_sc; in bwn_handle_fwpanic()
5486 reason = bwn_shm_read_2(mac, BWN_SCRATCH, BWN_FWPANIC_REASON_REG); in bwn_handle_fwpanic()
5490 bwn_restart(mac, "ucode panic"); in bwn_handle_fwpanic()
5494 bwn_load_beacon0(struct bwn_mac *mac) in bwn_load_beacon0() argument
5501 bwn_load_beacon1(struct bwn_mac *mac) in bwn_load_beacon1() argument
5508 bwn_jssi_read(struct bwn_mac *mac) in bwn_jssi_read() argument
5512 val = bwn_shm_read_2(mac, BWN_SHARED, 0x08a); in bwn_jssi_read()
5514 val |= bwn_shm_read_2(mac, BWN_SHARED, 0x088); in bwn_jssi_read()
5520 bwn_noise_gensample(struct bwn_mac *mac) in bwn_noise_gensample() argument
5524 bwn_shm_write_2(mac, BWN_SHARED, 0x088, (jssi & 0x0000ffff)); in bwn_noise_gensample()
5525 bwn_shm_write_2(mac, BWN_SHARED, 0x08a, (jssi & 0xffff0000) >> 16); in bwn_noise_gensample()
5526 BWN_WRITE_4(mac, BWN_MACCMD, in bwn_noise_gensample()
5527 BWN_READ_4(mac, BWN_MACCMD) | BWN_MACCMD_BGNOISE); in bwn_noise_gensample()
5553 struct bwn_mac *mac = dr->dr_mac; in bwn_dma_rxeof() local
5554 struct bwn_softc *sc = mac->mac_sc; in bwn_dma_rxeof()
5555 struct bwn_dma *dma = &mac->mac_method.dma; in bwn_dma_rxeof()
5607 switch (mac->mac_fw.fw_hdr_format) { in bwn_dma_rxeof()
5618 if (!(mac->mac_sc->sc_filters & BWN_MACCTL_PASS_BADFCS)) { in bwn_dma_rxeof()
5631 bwn_handle_txeof(struct bwn_mac *mac, const struct bwn_txstatus *status) in bwn_handle_txeof() argument
5633 struct bwn_softc *sc = mac->mac_sc; in bwn_handle_txeof()
5634 struct bwn_stats *stats = &mac->mac_stats; in bwn_handle_txeof()
5636 BWN_ASSERT_LOCKED(mac->mac_sc); in bwn_handle_txeof()
5649 if (mac->mac_flags & BWN_MAC_FLAG_DMA) { in bwn_handle_txeof()
5650 bwn_dma_handle_txeof(mac, status); in bwn_handle_txeof()
5652 bwn_pio_handle_txeof(mac, status); in bwn_handle_txeof()
5655 bwn_phy_txpower_check(mac, 0); in bwn_handle_txeof()
5661 struct bwn_mac *mac = prq->prq_mac; in bwn_pio_rxeof() local
5662 struct bwn_softc *sc = mac->mac_sc; in bwn_pio_rxeof()
5720 switch (mac->mac_fw.fw_hdr_format) { in bwn_pio_rxeof()
5731 if (!(mac->mac_sc->sc_filters & BWN_MACCTL_PASS_BADFCS)) { in bwn_pio_rxeof()
5790 struct bwn_mac *mac = dr->dr_mac; in bwn_dma_newbuf() local
5791 struct bwn_dma *dma = &mac->mac_method.dma; in bwn_dma_newbuf()
5914 bwn_rx_rssi_calc(struct bwn_mac *mac, uint8_t in_rssi, in bwn_rx_rssi_calc() argument
5917 struct bwn_phy *phy = &mac->mac_phy; in bwn_rx_rssi_calc()
5933 if (mac->mac_sc->sc_board_info.board_flags in bwn_rx_rssi_calc()
5966 bwn_rxeof(struct bwn_mac *mac, struct mbuf *m, const void *_rxhdr) in bwn_rxeof() argument
5970 struct bwn_softc *sc = mac->mac_sc; in bwn_rxeof()
5989 switch (mac->mac_fw.fw_hdr_format) { in bwn_rxeof()
6028 BWN_ISOLDFMT(mac), in bwn_rxeof()
6033 rate = bwn_plcp_get_ofdmrate(mac, plcp, in bwn_rxeof()
6036 rate = bwn_plcp_get_cckrate(mac, plcp); in bwn_rxeof()
6038 if (!(mac->mac_sc->sc_filters & BWN_MACCTL_PASS_BADPLCP)) in bwn_rxeof()
6049 rssi = bwn_rx_rssi_calc(mac, rxhdr->phy.abg.rssi, in bwn_rxeof()
6061 DPRINTF(mac->mac_sc, BWN_DEBUG_RECV, in bwn_rxeof()
6077 noise = mac->mac_stats.link_noise; in bwn_rxeof()
6082 bwn_rx_radiotap(mac, m, rxhdr, plcp, rate, rssi, noise); in bwn_rxeof()
6128 bwn_dma_handle_txeof(struct bwn_mac *mac, in bwn_dma_handle_txeof() argument
6131 struct bwn_dma *dma = &mac->mac_method.dma; in bwn_dma_handle_txeof()
6135 struct bwn_softc *sc = mac->mac_sc; in bwn_dma_handle_txeof()
6140 dr = bwn_dma_parse_cookie(mac, status, status->cookie, &slot); in bwn_dma_handle_txeof()
6183 bwn_pio_handle_txeof(struct bwn_mac *mac, in bwn_pio_handle_txeof() argument
6188 struct bwn_softc *sc = mac->mac_sc; in bwn_pio_handle_txeof()
6192 tq = bwn_pio_parse_cookie(mac, status->cookie, &tp); in bwn_pio_handle_txeof()
6196 tq->tq_used -= roundup(tp->tp_m->m_pkthdr.len + BWN_HDRSIZE(mac), 4); in bwn_pio_handle_txeof()
6215 bwn_phy_txpower_check(struct bwn_mac *mac, uint32_t flags) in bwn_phy_txpower_check() argument
6217 struct bwn_softc *sc = mac->mac_sc; in bwn_phy_txpower_check()
6218 struct bwn_phy *phy = &mac->mac_phy; in bwn_phy_txpower_check()
6234 result = phy->recalc_txpwr(mac, in bwn_phy_txpower_check()
6242 ieee80211_runtask(ic, &mac->mac_txpower); in bwn_phy_txpower_check()
6312 bwn_set_txhdr_phyctl1(struct bwn_mac *mac, uint8_t bitrate) in bwn_set_txhdr_phyctl1() argument
6314 struct bwn_phy *phy = &mac->mac_phy; in bwn_set_txhdr_phyctl1()
6383 bwn_set_txhdr(struct bwn_mac *mac, struct ieee80211_node *ni, in bwn_set_txhdr() argument
6386 const struct bwn_phy *phy = &mac->mac_phy; in bwn_set_txhdr()
6387 struct bwn_softc *sc = mac->mac_sc; in bwn_set_txhdr()
6451 switch (mac->mac_fw.fw_hdr_format) { in bwn_set_txhdr()
6484 switch (bwn_antenna_sanitize(mac, 0)) { in bwn_set_txhdr()
6531 switch (mac->mac_fw.fw_hdr_format) { in bwn_set_txhdr()
6555 switch (mac->mac_fw.fw_hdr_format) { in bwn_set_txhdr()
6573 switch (mac->mac_fw.fw_hdr_format) { in bwn_set_txhdr()
6601 txhdr->phyctl_1rts = htole16(bwn_set_txhdr_phyctl1(mac, rts_rate)); in bwn_set_txhdr()
6602 txhdr->phyctl_1rtsfb = htole16(bwn_set_txhdr_phyctl1(mac, rts_rate_fb)); in bwn_set_txhdr()
6607 txhdr->phyctl_1 = htole16(bwn_set_txhdr_phyctl1(mac, rate)); in bwn_set_txhdr()
6608 txhdr->phyctl_1fb = htole16(bwn_set_txhdr_phyctl1(mac, rate_fb)); in bwn_set_txhdr()
6611 switch (mac->mac_fw.fw_hdr_format) { in bwn_set_txhdr()
6675 bwn_antenna_sanitize(struct bwn_mac *mac, uint8_t n) in bwn_antenna_sanitize() argument
6677 struct bwn_softc *sc = mac->mac_sc; in bwn_antenna_sanitize()
6682 if (mac->mac_phy.gmode) in bwn_antenna_sanitize()
6733 bwn_pio_write_multi_4(struct bwn_mac *mac, struct bwn_pio_txqueue *tq, in bwn_pio_write_multi_4() argument
6736 struct bwn_softc *sc = mac->mac_sc; in bwn_pio_write_multi_4()
6742 bwn_pio_write_4(mac, tq, BWN_PIO8_TXCTL, ctl); in bwn_pio_write_multi_4()
6762 bwn_pio_write_4(mac, tq, BWN_PIO8_TXCTL, ctl); in bwn_pio_write_multi_4()
6763 bwn_pio_write_4(mac, tq, BWN_PIO8_TXDATA, value); in bwn_pio_write_multi_4()
6770 bwn_pio_write_4(struct bwn_mac *mac, struct bwn_pio_txqueue *tq, in bwn_pio_write_4() argument
6774 BWN_WRITE_4(mac, tq->tq_base + offset, value); in bwn_pio_write_4()
6778 bwn_pio_write_multi_2(struct bwn_mac *mac, struct bwn_pio_txqueue *tq, in bwn_pio_write_multi_2() argument
6781 struct bwn_softc *sc = mac->mac_sc; in bwn_pio_write_multi_2()
6785 BWN_PIO_WRITE_2(mac, tq, BWN_PIO_TXCTL, ctl); in bwn_pio_write_multi_2()
6791 BWN_PIO_WRITE_2(mac, tq, BWN_PIO_TXCTL, ctl); in bwn_pio_write_multi_2()
6792 BWN_PIO_WRITE_2(mac, tq, BWN_PIO_TXDATA, data[len - 1]); in bwn_pio_write_multi_2()
6799 bwn_pio_write_mbuf_2(struct bwn_mac *mac, struct bwn_pio_txqueue *tq, in bwn_pio_write_mbuf_2() argument
6808 BWN_PIO_WRITE_2(mac, tq, BWN_PIO_TXCTL, ctl); in bwn_pio_write_mbuf_2()
6817 BWN_PIO_WRITE_2(mac, tq, BWN_PIO_TXDATA, data); in bwn_pio_write_mbuf_2()
6824 BWN_PIO_WRITE_2(mac, tq, BWN_PIO_TXCTL, ctl); in bwn_pio_write_mbuf_2()
6825 BWN_PIO_WRITE_2(mac, tq, BWN_PIO_TXDATA, data); in bwn_pio_write_mbuf_2()
6832 bwn_set_slot_time(struct bwn_mac *mac, uint16_t time) in bwn_set_slot_time() argument
6836 if (mac->mac_phy.type != BWN_PHYTYPE_G) in bwn_set_slot_time()
6839 BWN_WRITE_2(mac, 0x684, 510 + time); in bwn_set_slot_time()
6842 bwn_shm_write_2(mac, BWN_SHARED, 0x0010, time); in bwn_set_slot_time()
6847 bwn_dma_select(struct bwn_mac *mac, uint8_t prio) in bwn_dma_select() argument
6850 if ((mac->mac_flags & BWN_MAC_FLAG_WME) == 0) in bwn_dma_select()
6851 return (mac->mac_method.dma.wme[WME_AC_BE]); in bwn_dma_select()
6855 return (mac->mac_method.dma.wme[WME_AC_VO]); in bwn_dma_select()
6857 return (mac->mac_method.dma.wme[WME_AC_VI]); in bwn_dma_select()
6859 return (mac->mac_method.dma.wme[WME_AC_BE]); in bwn_dma_select()
6861 return (mac->mac_method.dma.wme[WME_AC_BK]); in bwn_dma_select()
6887 bwn_pio_parse_cookie(struct bwn_mac *mac, uint16_t cookie, in bwn_pio_parse_cookie() argument
6890 struct bwn_pio *pio = &mac->mac_method.pio; in bwn_pio_parse_cookie()
6926 struct bwn_mac *mac = arg; in bwn_txpwr() local
6929 if (mac == NULL) in bwn_txpwr()
6932 sc = mac->mac_sc; in bwn_txpwr()
6935 if (mac->mac_status >= BWN_MAC_STATUS_STARTED && in bwn_txpwr()
6936 mac->mac_phy.set_txpwr != NULL) in bwn_txpwr()
6937 mac->mac_phy.set_txpwr(mac); in bwn_txpwr()
6942 bwn_task_15s(struct bwn_mac *mac) in bwn_task_15s() argument
6946 if (mac->mac_fw.opensource) { in bwn_task_15s()
6947 reg = bwn_shm_read_2(mac, BWN_SCRATCH, BWN_WATCHDOG_REG); in bwn_task_15s()
6949 bwn_restart(mac, "fw watchdog"); in bwn_task_15s()
6952 bwn_shm_write_2(mac, BWN_SCRATCH, BWN_WATCHDOG_REG, 1); in bwn_task_15s()
6954 if (mac->mac_phy.task_15s) in bwn_task_15s()
6955 mac->mac_phy.task_15s(mac); in bwn_task_15s()
6957 mac->mac_phy.txerrors = BWN_TXERROR_MAX; in bwn_task_15s()
6961 bwn_task_30s(struct bwn_mac *mac) in bwn_task_30s() argument
6964 if (mac->mac_phy.type != BWN_PHYTYPE_G || mac->mac_noise.noi_running) in bwn_task_30s()
6966 mac->mac_noise.noi_running = 1; in bwn_task_30s()
6967 mac->mac_noise.noi_nsamples = 0; in bwn_task_30s()
6969 bwn_noise_gensample(mac); in bwn_task_30s()
6973 bwn_task_60s(struct bwn_mac *mac) in bwn_task_60s() argument
6976 if (mac->mac_phy.task_60s) in bwn_task_60s()
6977 mac->mac_phy.task_60s(mac); in bwn_task_60s()
6978 bwn_phy_txpower_check(mac, BWN_TXPWR_IGNORE_TIME); in bwn_task_60s()
6984 struct bwn_mac *mac = arg; in bwn_tasks() local
6985 struct bwn_softc *sc = mac->mac_sc; in bwn_tasks()
6988 if (mac->mac_status != BWN_MAC_STATUS_STARTED) in bwn_tasks()
6991 if (mac->mac_task_state % 4 == 0) in bwn_tasks()
6992 bwn_task_60s(mac); in bwn_tasks()
6993 if (mac->mac_task_state % 2 == 0) in bwn_tasks()
6994 bwn_task_30s(mac); in bwn_tasks()
6995 bwn_task_15s(mac); in bwn_tasks()
6997 mac->mac_task_state++; in bwn_tasks()
6998 callout_reset(&sc->sc_task_ch, hz * 15, bwn_tasks, mac); in bwn_tasks()
7002 bwn_plcp_get_ofdmrate(struct bwn_mac *mac, struct bwn_plcp6 *plcp, uint8_t a) in bwn_plcp_get_ofdmrate() argument
7004 struct bwn_softc *sc = mac->mac_sc; in bwn_plcp_get_ofdmrate()
7032 bwn_plcp_get_cckrate(struct bwn_mac *mac, struct bwn_plcp6 *plcp) in bwn_plcp_get_cckrate() argument
7034 struct bwn_softc *sc = mac->mac_sc; in bwn_plcp_get_cckrate()
7051 bwn_rx_radiotap(struct bwn_mac *mac, struct mbuf *m, in bwn_rx_radiotap() argument
7055 struct bwn_softc *sc = mac->mac_sc; in bwn_rx_radiotap()
7068 bwn_tsf_read(mac, &tsf); in bwn_rx_radiotap()
7072 switch (mac->mac_fw.fw_hdr_format) { in bwn_rx_radiotap()
7093 bwn_tsf_read(struct bwn_mac *mac, uint64_t *tsf) in bwn_tsf_read() argument
7097 KASSERT(bhnd_get_hwrev(mac->mac_sc->sc_dev) >= 3, in bwn_tsf_read()
7100 low = BWN_READ_4(mac, BWN_REV3PLUS_TSF_LOW); in bwn_tsf_read()
7101 high = BWN_READ_4(mac, BWN_REV3PLUS_TSF_HIGH); in bwn_tsf_read()
7108 bwn_dma_attach(struct bwn_mac *mac) in bwn_dma_attach() argument
7119 dma = &mac->mac_method.dma; in bwn_dma_attach()
7120 sc = mac->mac_sc; in bwn_dma_attach()
7130 switch (mac->mac_dmatype) { in bwn_dma_attach()
7156 mac->mac_dmatype); in bwn_dma_attach()
7187 mac->mac_flags |= BWN_MAC_FLAG_DMA; in bwn_dma_attach()
7252 dma->wme[WME_AC_BK] = bwn_dma_ringsetup(mac, 0, 1); in bwn_dma_attach()
7256 dma->wme[WME_AC_BE] = bwn_dma_ringsetup(mac, 1, 1); in bwn_dma_attach()
7260 dma->wme[WME_AC_VI] = bwn_dma_ringsetup(mac, 2, 1); in bwn_dma_attach()
7264 dma->wme[WME_AC_VO] = bwn_dma_ringsetup(mac, 3, 1); in bwn_dma_attach()
7268 dma->mcast = bwn_dma_ringsetup(mac, 4, 1); in bwn_dma_attach()
7271 dma->rx = bwn_dma_ringsetup(mac, 0, 0); in bwn_dma_attach()
7289 bwn_dma_parse_cookie(struct bwn_mac *mac, const struct bwn_txstatus *status, in bwn_dma_parse_cookie() argument
7292 struct bwn_dma *dma = &mac->mac_method.dma; in bwn_dma_parse_cookie()
7294 struct bwn_softc *sc = mac->mac_sc; in bwn_dma_parse_cookie()
7296 BWN_ASSERT_LOCKED(mac->mac_sc); in bwn_dma_parse_cookie()
7338 bwn_dma_stop(struct bwn_mac *mac) in bwn_dma_stop() argument
7342 if ((mac->mac_flags & BWN_MAC_FLAG_DMA) == 0) in bwn_dma_stop()
7344 dma = &mac->mac_method.dma; in bwn_dma_stop()
7365 bwn_pio_stop(struct bwn_mac *mac) in bwn_pio_stop() argument
7369 if (mac->mac_flags & BWN_MAC_FLAG_DMA) in bwn_pio_stop()
7371 pio = &mac->mac_method.pio; in bwn_pio_stop()
7381 bwn_led_attach(struct bwn_mac *mac) in bwn_led_attach() argument
7383 struct bwn_softc *sc = mac->mac_sc; in bwn_led_attach()
7468 bwn_led_newstate(struct bwn_mac *mac, enum ieee80211_state nstate) in bwn_led_newstate() argument
7470 struct bwn_softc *sc = mac->mac_sc; in bwn_led_newstate()
7483 val = BWN_READ_2(mac, BWN_GPIO_CONTROL); in bwn_led_newstate()
7525 BWN_WRITE_2(mac, BWN_GPIO_CONTROL, val); in bwn_led_newstate()
7529 bwn_led_event(struct bwn_mac *mac, int event) in bwn_led_event() argument
7531 struct bwn_softc *sc = mac->mac_sc; in bwn_led_event()
7560 bwn_led_blink_start(mac, bwn_led_duration[rate].on_dur, in bwn_led_event()
7565 bwn_led_blink_start(struct bwn_mac *mac, int on_dur, int off_dur) in bwn_led_blink_start() argument
7567 struct bwn_softc *sc = mac->mac_sc; in bwn_led_blink_start()
7571 val = BWN_READ_2(mac, BWN_GPIO_CONTROL); in bwn_led_blink_start()
7573 BWN_WRITE_2(mac, BWN_GPIO_CONTROL, val); in bwn_led_blink_start()
7583 callout_reset(&sc->sc_led_blink_ch, on_dur, bwn_led_blink_next, mac); in bwn_led_blink_start()
7589 struct bwn_mac *mac = arg; in bwn_led_blink_next() local
7590 struct bwn_softc *sc = mac->mac_sc; in bwn_led_blink_next()
7593 val = BWN_READ_2(mac, BWN_GPIO_CONTROL); in bwn_led_blink_next()
7595 BWN_WRITE_2(mac, BWN_GPIO_CONTROL, val); in bwn_led_blink_next()
7598 bwn_led_blink_end, mac); in bwn_led_blink_next()
7604 struct bwn_mac *mac = arg; in bwn_led_blink_end() local
7605 struct bwn_softc *sc = mac->mac_sc; in bwn_led_blink_end()
7640 struct bwn_mac *mac = sc->sc_curmac; in bwn_rfswitch() local
7643 KASSERT(mac->mac_status >= BWN_MAC_STATUS_STARTED, in bwn_rfswitch()
7644 ("%s: invalid MAC status %d", __func__, mac->mac_status)); in bwn_rfswitch()
7646 if (mac->mac_phy.rev >= 3 || mac->mac_phy.type == BWN_PHYTYPE_LP in bwn_rfswitch()
7647 || mac->mac_phy.type == BWN_PHYTYPE_N) { in bwn_rfswitch()
7648 if (!(BWN_READ_4(mac, BWN_RF_HWENABLED_HI) in bwn_rfswitch()
7652 if (BWN_READ_2(mac, BWN_RF_HWENABLED_LO) in bwn_rfswitch()
7657 if (mac->mac_flags & BWN_MAC_FLAG_RADIO_ON) in bwn_rfswitch()
7665 mac->mac_flags |= BWN_MAC_FLAG_RADIO_ON; in bwn_rfswitch()
7667 mac->mac_flags &= ~BWN_MAC_FLAG_RADIO_ON; in bwn_rfswitch()
7672 if (cur != mac->mac_phy.rf_on) { in bwn_rfswitch()
7674 bwn_rf_turnon(mac); in bwn_rfswitch()
7676 bwn_rf_turnoff(mac); in bwn_rfswitch()
7687 struct bwn_mac *mac; in bwn_sysctl_node() local
7692 if ((mac = sc->sc_curmac) == NULL) in bwn_sysctl_node()
7694 stats = &mac->mac_stats; in bwn_sysctl_node()