Lines Matching defs:mac

211 static void	 bwi_tbl_write_2(struct bwi_mac *mac, uint16_t, uint16_t);
212 static void bwi_tbl_write_4(struct bwi_mac *mac, uint16_t, uint32_t);
474 #define RF_LO_WRITE(mac, lo) bwi_rf_lo_write((mac), (lo))
502 #define SAVE_RF_REG(mac, regs, n) (regs)->rf_##n = RF_READ((mac), 0x##n)
503 #define RESTORE_RF_REG(mac, regs, n) RF_WRITE((mac), 0x##n, (regs)->rf_##n)
505 #define SAVE_PHY_REG(mac, regs, n) (regs)->phy_##n = PHY_READ((mac), 0x##n)
506 #define RESTORE_PHY_REG(mac, regs, n) PHY_WRITE((mac), 0x##n, (regs)->phy_##n)
720 struct bwi_mac *mac;
753 mac = (struct bwi_mac *)sc->sc_cur_regwin;
786 if (mac->mac_flags & BWI_MAC_F_PHYE_RESET) {
802 bwi_mac_config_ps(mac);
887 struct bwi_mac *mac;
978 mac = &sc->sc_mac[i];
979 error = bwi_regwin_switch(sc, &mac->mac_regwin, &old);
983 error = bwi_mac_lateattach(mac);
996 mac = &sc->sc_mac[0];
997 phy = &mac->mac_phy;
1162 bwi_tmplt_write_4(struct bwi_mac *mac, uint32_t ofs, uint32_t val)
1164 struct bwi_softc *sc = mac->mac_sc;
1166 if (mac->mac_flags & BWI_MAC_F_BSWAP)
1174 bwi_hostflags_write(struct bwi_mac *mac, uint64_t flags)
1179 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_HFLAGS_LO, val);
1182 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_HFLAGS_MI, val);
1188 bwi_hostflags_read(struct bwi_mac *mac)
1195 val = MOBJ_READ_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_HFLAGS_MI);
1198 val = MOBJ_READ_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_HFLAGS_LO);
1205 bwi_memobj_read_2(struct bwi_mac *mac, uint16_t obj_id, uint16_t ofs0)
1207 struct bwi_softc *sc = mac->mac_sc;
1222 bwi_memobj_read_4(struct bwi_mac *mac, uint16_t obj_id, uint16_t ofs0)
1224 struct bwi_softc *sc = mac->mac_sc;
1247 bwi_memobj_write_2(struct bwi_mac *mac, uint16_t obj_id, uint16_t ofs0,
1250 struct bwi_softc *sc = mac->mac_sc;
1265 bwi_memobj_write_4(struct bwi_mac *mac, uint16_t obj_id, uint16_t ofs0,
1268 struct bwi_softc *sc = mac->mac_sc;
1285 bwi_mac_lateattach(struct bwi_mac *mac)
1289 if (mac->mac_rev >= 5)
1290 CSR_READ_4(mac->mac_sc, BWI_STATE_HI); /* dummy read */
1292 bwi_mac_reset(mac, 1);
1294 error = bwi_phy_attach(mac);
1298 error = bwi_rf_attach(mac);
1303 if (mac->mac_phy.phy_mode == IEEE80211_MODE_11A)
1304 bwi_mac_reset(mac, 0);
1306 bwi_mac_reset(mac, 1);
1308 error = bwi_mac_test(mac);
1312 error = bwi_mac_get_property(mac);
1316 error = bwi_rf_map_txpower(mac);
1320 bwi_rf_off(mac);
1321 CSR_WRITE_2(mac->mac_sc, BWI_BBP_ATTEN, BWI_BBP_ATTEN_MAGIC);
1323 if (BWI_IS_PIO(mac->mac_sc)) {
1325 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_RXPADOFF, 0);
1328 bwi_regwin_disable(mac->mac_sc, &mac->mac_regwin, 0);
1334 bwi_mac_init(struct bwi_mac *mac)
1336 struct bwi_softc *sc = mac->mac_sc;
1340 bwi_mac_setup_tpctl(mac);
1341 bwi_rf_clear_state(&mac->mac_rf);
1342 bwi_phy_clear_state(&mac->mac_phy);
1345 if (!bwi_regwin_is_enabled(sc, &mac->mac_regwin))
1346 bwi_mac_reset(mac, 1);
1349 error = bwi_bus_init(sc, mac);
1362 error = bwi_phy_calibrate(mac);
1376 error = bwi_mac_fw_alloc(mac);
1380 error = bwi_mac_fw_load(mac);
1384 error = bwi_mac_gpio_init(mac);
1388 error = bwi_mac_fw_init(mac);
1395 bwi_rf_on(mac);
1403 bwi_phy_init(mac);
1410 bwi_rf_set_ant_mode(mac, mac->mac_rf.rf_ant_mode);
1415 bwi_mac_opmode_init(mac);
1418 if (mac->mac_rev < 3) {
1449 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_MACREV, mac->mac_rev);
1454 bwi_mac_hostflags_init(mac);
1459 bwi_mac_bss_param_init(mac);
1485 if (mac->mac_flags & BWI_MAC_F_HAS_TXSTATS) {
1496 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, 0x416, 0x50);
1497 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, 0x414, 0x1f4);
1499 mac->mac_flags |= BWI_MAC_F_INITED;
1505 bwi_mac_reset(struct bwi_mac *mac, int link_phy)
1507 struct bwi_softc *sc = mac->mac_sc;
1513 bwi_regwin_enable(sc, &mac->mac_regwin, flags);
1544 mac->mac_phy.phy_flags |= BWI_PHY_F_LINKED;
1548 mac->mac_phy.phy_flags &= ~BWI_PHY_F_LINKED;
1553 bwi_mac_set_tpctl_11bg(struct bwi_mac *mac, const struct bwi_tpctl *new_tpctl)
1555 struct bwi_rf *rf = &mac->mac_rf;
1556 struct bwi_tpctl *tpctl = &mac->mac_tpctl;
1571 bwi_phy_set_bbp_atten(mac, tpctl->bbp_atten);
1574 RF_WRITE(mac, BWI_RFR_ATTEN, tpctl->rf_atten);
1575 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_RF_ATTEN,
1580 RF_FILT_SETBITS(mac, BWI_RFR_TXPWR, ~BWI_RFR_TXPWR1_MASK,
1585 if (mac->mac_phy.phy_mode == IEEE80211_MODE_11G)
1586 bwi_rf_lo_adjust(mac, tpctl);
1590 bwi_mac_test(struct bwi_mac *mac)
1592 struct bwi_softc *sc = mac->mac_sc;
1598 orig_val = MOBJ_READ_4(mac, BWI_COMM_MOBJ, 0);
1601 MOBJ_WRITE_4(mac, BWI_COMM_MOBJ, 0, TEST_VAL1);
1602 val = MOBJ_READ_4(mac, BWI_COMM_MOBJ, 0);
1609 MOBJ_WRITE_4(mac, BWI_COMM_MOBJ, 0, TEST_VAL2);
1610 val = MOBJ_READ_4(mac, BWI_COMM_MOBJ, 0);
1617 MOBJ_WRITE_4(mac, BWI_COMM_MOBJ, 0, orig_val);
1639 bwi_mac_setup_tpctl(struct bwi_mac *mac)
1641 struct bwi_softc *sc = mac->mac_sc;
1642 struct bwi_rf *rf = &mac->mac_rf;
1643 struct bwi_phy *phy = &mac->mac_phy;
1644 struct bwi_tpctl *tpctl = &mac->mac_tpctl;
1740 bwi_mac_dummy_xmit(struct bwi_mac *mac)
1748 struct bwi_softc *sc = mac->mac_sc;
1749 struct bwi_rf *rf = &mac->mac_rf;
1754 if (mac->mac_phy.phy_mode == IEEE80211_MODE_11A) {
1765 TMPLT_WRITE_4(mac, i * 4, packet[i]);
1781 RF_WRITE(mac, 0x51, 0x17);
1800 RF_WRITE(mac, 0x51, 0x37);
1805 bwi_mac_init_tpctl_11bg(struct bwi_mac *mac)
1807 struct bwi_softc *sc = mac->mac_sc;
1808 struct bwi_phy *phy = &mac->mac_phy;
1809 struct bwi_rf *rf = &mac->mac_rf;
1818 PHY_WRITE(mac, 0x28, 0x8018);
1824 PHY_WRITE(mac, 0x47a, 0xc111);
1826 if (mac->mac_flags & BWI_MAC_F_TPCTL_INITED)
1831 RF_SETBITS(mac, 0x76, 0x84);
1836 memcpy(&tpctl_orig, &mac->mac_tpctl, sizeof(tpctl_orig));
1839 memcpy(&tpctl, &mac->mac_tpctl, sizeof(tpctl));
1849 bwi_mac_set_tpctl_11bg(mac, &tpctl);
1852 bwi_mac_dummy_xmit(mac);
1854 mac->mac_flags |= BWI_MAC_F_TPCTL_INITED;
1855 rf->rf_base_tssi = PHY_READ(mac, 0x29);
1861 mac->mac_flags |= BWI_MAC_F_TPCTL_ERROR;
1865 bwi_mac_set_tpctl_11bg(mac, &tpctl_orig);
1867 RF_CLRBITS(mac, 0x76, 0x84);
1869 bwi_rf_clear_tssi(mac);
1873 bwi_mac_detach(struct bwi_mac *mac)
1875 bwi_mac_fw_free(mac);
1879 bwi_mac_fw_alloc(struct bwi_mac *mac)
1881 struct bwi_softc *sc = mac->mac_sc;
1884 error = bwi_mac_fw_image_alloc(mac, BWI_FW_UCODE_PREFIX,
1885 mac->mac_rev >= 5 ? 5 : mac->mac_rev, &mac->mac_ucode_fwi,
1890 error = bwi_mac_fw_image_alloc(mac, BWI_FW_PCM_PREFIX,
1891 mac->mac_rev >= 5 ? 5 : mac->mac_rev, &mac->mac_pcm_fwi,
1897 if (mac->mac_rev == 2 || mac->mac_rev == 4)
1899 else if (mac->mac_rev >= 5 && mac->mac_rev <= 20)
1903 "no suitable IV for MAC rev %d\n", mac->mac_rev);
1908 error = bwi_mac_fw_image_alloc(mac, BWI_FW_IV_PREFIX, idx,
1909 &mac->mac_iv_fwi, BWI_FW_T_IV);
1914 if (mac->mac_rev == 2 || mac->mac_rev == 4 ||
1915 mac->mac_rev >= 11)
1918 else if (mac->mac_rev >= 5 && mac->mac_rev <= 10)
1922 "no suitable ExtIV for MAC rev %d\n", mac->mac_rev);
1927 error = bwi_mac_fw_image_alloc(mac, BWI_FW_IV_EXT_PREFIX, idx,
1928 &mac->mac_iv_ext_fwi, BWI_FW_T_IV);
1935 bwi_mac_fw_image_free(mac, &mac->mac_iv_fwi);
1938 bwi_mac_fw_image_free(mac, &mac->mac_pcm_fwi);
1941 bwi_mac_fw_image_free(mac, &mac->mac_ucode_fwi);
1948 bwi_mac_fw_free(struct bwi_mac *mac)
1950 bwi_mac_fw_image_free(mac, &mac->mac_ucode_fwi);
1951 bwi_mac_fw_image_free(mac, &mac->mac_pcm_fwi);
1952 bwi_mac_fw_image_free(mac, &mac->mac_iv_fwi);
1953 bwi_mac_fw_image_free(mac, &mac->mac_iv_ext_fwi);
1957 bwi_mac_fw_image_alloc(struct bwi_mac *mac, const char *prefix, int idx,
1960 struct bwi_softc *sc = mac->mac_sc;
2058 bwi_mac_fw_image_free(struct bwi_mac *mac, struct bwi_fw_image *fwi)
2061 DPRINTF(mac->mac_sc, BWI_DBG_FIRMWARE, "freeing firmware %s\n",
2070 bwi_mac_fw_load(struct bwi_mac *mac)
2072 struct bwi_softc *sc = mac->mac_sc;
2080 fw = (const uint32_t *)(mac->mac_ucode + BWI_FWHDR_SZ);
2081 fw_len = (mac->mac_ucode_size - BWI_FWHDR_SZ) / sizeof(uint32_t);
2097 fw = (const uint32_t *)(mac->mac_pcm + BWI_FWHDR_SZ);
2098 fw_len = (mac->mac_pcm_size - BWI_FWHDR_SZ) / sizeof(uint32_t);
2138 fw_rev = MOBJ_READ_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_FWREV);
2147 MOBJ_READ_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_FWPATCHLV));
2153 bwi_mac_gpio_init(struct bwi_mac *mac)
2155 struct bwi_softc *sc = mac->mac_sc;
2188 bwi_mac_gpio_fini(struct bwi_mac *mac)
2190 struct bwi_softc *sc = mac->mac_sc;
2205 bwi_mac_fw_load_iv(struct bwi_mac *mac, const struct bwi_fw_image *fwi)
2207 struct bwi_softc *sc = mac->mac_sc;
2290 bwi_mac_fw_init(struct bwi_mac *mac)
2292 struct bwi_softc *sc = mac->mac_sc;
2295 error = bwi_mac_fw_load_iv(mac, &mac->mac_iv_fwi);
2301 if (mac->mac_iv_ext != NULL) {
2302 error = bwi_mac_fw_load_iv(mac, &mac->mac_iv_ext_fwi);
2311 bwi_mac_opmode_init(struct bwi_mac *mac)
2313 struct bwi_softc *sc = mac->mac_sc;
2323 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_PROBE_RESP_TO, 0);
2338 if (mac->mac_rev < 5)
2380 bwi_mac_hostflags_init(struct bwi_mac *mac)
2382 struct bwi_softc *sc = mac->mac_sc;
2383 struct bwi_phy *phy = &mac->mac_phy;
2384 struct bwi_rf *rf = &mac->mac_rf;
2390 host_flags = HFLAGS_READ(mac);
2405 HFLAGS_WRITE(mac, host_flags);
2409 bwi_mac_bss_param_init(struct bwi_mac *mac)
2411 struct bwi_softc *sc = mac->mac_sc;
2412 struct bwi_phy *phy = &mac->mac_phy;
2424 bwi_mac_set_retry_lim(mac, &lim);
2430 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_PROBE_RESP_TO, 1);
2440 bwi_mac_set_ackrates(mac, &sc->sc_ic.ic_sup_rates[phy->phy_mode]);
2449 MOBJ_WRITE_2(mac, BWI_80211_MOBJ, BWI_80211_MOBJ_CWMIN, cw_min);
2454 MOBJ_WRITE_2(mac, BWI_80211_MOBJ, BWI_80211_MOBJ_CWMAX,
2459 bwi_mac_set_retry_lim(struct bwi_mac *mac, const struct bwi_retry_lim *lim)
2462 MOBJ_WRITE_2(mac, BWI_80211_MOBJ, BWI_80211_MOBJ_SHRETRY,
2464 MOBJ_WRITE_2(mac, BWI_80211_MOBJ, BWI_80211_MOBJ_LGRETRY,
2468 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_SHRETRY_FB,
2470 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_LGRETEY_FB,
2475 bwi_mac_set_ackrates(struct bwi_mac *mac, const struct ieee80211_rateset *rs)
2500 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, ofs + 0x20,
2501 MOBJ_READ_2(mac, BWI_COMM_MOBJ, ofs));
2506 bwi_mac_start(struct bwi_mac *mac)
2508 struct bwi_softc *sc = mac->mac_sc;
2517 return (bwi_mac_config_ps(mac));
2521 bwi_mac_stop(struct bwi_mac *mac)
2523 struct bwi_softc *sc = mac->mac_sc;
2526 error = bwi_mac_config_ps(mac);
2551 bwi_mac_config_ps(struct bwi_mac *mac)
2553 struct bwi_softc *sc = mac->mac_sc;
2565 if (mac->mac_rev >= 5) {
2570 if (MOBJ_READ_2(mac, BWI_COMM_MOBJ,
2585 bwi_mac_reset_hwkeys(struct bwi_mac *mac)
2588 MOBJ_READ_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_KEYTABLE_OFS);
2592 bwi_mac_shutdown(struct bwi_mac *mac)
2594 struct bwi_softc *sc = mac->mac_sc;
2597 if (mac->mac_flags & BWI_MAC_F_HAS_TXSTATS)
2605 bwi_rf_off(mac);
2609 bwi_mac_gpio_fini(mac);
2611 bwi_rf_off(mac); /* XXX again */
2613 bwi_regwin_disable(sc, &mac->mac_regwin, 0);
2615 mac->mac_flags &= ~BWI_MAC_F_INITED;
2619 bwi_mac_get_property(struct bwi_mac *mac)
2621 struct bwi_softc *sc = mac->mac_sc;
2637 mac->mac_flags |= BWI_MAC_F_BSWAP;
2677 bwi_mac_updateslot(struct bwi_mac *mac, int shslot)
2681 if (mac->mac_phy.phy_mode == IEEE80211_MODE_11B)
2689 CSR_WRITE_2(mac->mac_sc, BWI_MAC_SLOTTIME,
2691 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_SLOTTIME, slot_time);
2697 struct bwi_mac *mac;
2717 mac = &sc->sc_mac[sc->sc_nmac];
2720 if (BWI_REGWIN_EXIST(&mac->mac_regwin)) {
2739 BWI_CREATE_MAC(mac, sc, id, rev);
2742 if (mac->mac_rev < 5) {
2743 mac->mac_flags |= BWI_MAC_F_HAS_TXSTATS;
2746 mac->mac_flags |= BWI_MAC_F_PHYE_RESET;
2812 bwi_mac_adjust_tpctl(struct bwi_mac *mac, int rf_atten_adj, int bbp_atten_adj)
2814 struct bwi_softc *sc = mac->mac_sc;
2815 struct bwi_rf *rf = &mac->mac_rf;
2819 memcpy(&tpctl, &mac->mac_tpctl, sizeof(tpctl));
2859 bwi_mac_lock(mac);
2860 bwi_mac_set_tpctl_11bg(mac, &tpctl);
2861 bwi_mac_unlock(mac);
2868 bwi_mac_calibrate_txpower(struct bwi_mac *mac, enum bwi_txpwrcb_type type)
2870 struct bwi_softc *sc = mac->mac_sc;
2871 struct bwi_rf *rf = &mac->mac_rf;
2879 if (mac->mac_flags & BWI_MAC_F_TPCTL_ERROR) {
2895 error = bwi_rf_get_latest_tssi(mac, tssi, BWI_COMM_MOBJ_TSSI_DS);
2899 if (mac->mac_phy.phy_mode == IEEE80211_MODE_11B) {
2909 error = bwi_rf_get_latest_tssi(mac, tssi,
2929 bwi_rf_clear_tssi(mac);
2942 if (ofdm_tssi && (HFLAGS_READ(mac) & BWI_HFLAG_PWR_BOOST_DS))
2947 error = bwi_rf_tssi2dbm(mac, tssi_avg, &cur_txpwr);
2978 bwi_mac_adjust_tpctl(mac, rf_atten_adj, bbp_atten_adj);
2983 bwi_mac_lock(struct bwi_mac *mac)
2985 struct bwi_softc *sc = mac->mac_sc;
2988 KASSERT((mac->mac_flags & BWI_MAC_F_LOCKED) == 0);
2990 if (mac->mac_rev < 3)
2991 bwi_mac_stop(mac);
2993 bwi_mac_config_ps(mac);
3001 mac->mac_flags |= BWI_MAC_F_LOCKED;
3005 bwi_mac_unlock(struct bwi_mac *mac)
3007 struct bwi_softc *sc = mac->mac_sc;
3010 KASSERT(mac->mac_flags & BWI_MAC_F_LOCKED);
3016 if (mac->mac_rev < 3)
3017 bwi_mac_start(mac);
3019 bwi_mac_config_ps(mac);
3021 mac->mac_flags &= ~BWI_MAC_F_LOCKED;
3025 bwi_mac_set_promisc(struct bwi_mac *mac, int promisc)
3027 struct bwi_softc *sc = mac->mac_sc;
3029 if (mac->mac_rev < 5) /* Promisc is always on */
3041 bwi_phy_write(struct bwi_mac *mac, uint16_t ctrl, uint16_t data)
3043 struct bwi_softc *sc = mac->mac_sc;
3051 bwi_phy_read(struct bwi_mac *mac, uint16_t ctrl)
3053 struct bwi_softc *sc = mac->mac_sc;
3061 bwi_phy_attach(struct bwi_mac *mac)
3063 struct bwi_softc *sc = mac->mac_sc;
3064 struct bwi_phy *phy = &mac->mac_phy;
3135 bwi_phy_set_bbp_atten(struct bwi_mac *mac, uint16_t bbp_atten)
3137 struct bwi_phy *phy = &mac->mac_phy;
3141 CSR_FILT_SETBITS_2(mac->mac_sc, BWI_BBP_ATTEN, ~mask,
3148 PHY_FILT_SETBITS(mac, BWI_PHYR_BBP_ATTEN, ~mask,
3154 bwi_phy_calibrate(struct bwi_mac *mac)
3156 struct bwi_phy *phy = &mac->mac_phy;
3159 CSR_READ_4(mac->mac_sc, BWI_MAC_STATUS);
3166 bwi_mac_reset(mac, 0);
3167 bwi_phy_init_11g(mac);
3168 bwi_mac_reset(mac, 1);
3177 bwi_tbl_write_2(struct bwi_mac *mac, uint16_t ofs, uint16_t data)
3179 struct bwi_phy *phy = &mac->mac_phy;
3182 PHY_WRITE(mac, phy->phy_tbl_ctrl, ofs);
3183 PHY_WRITE(mac, phy->phy_tbl_data_lo, data);
3187 bwi_tbl_write_4(struct bwi_mac *mac, uint16_t ofs, uint32_t data)
3189 struct bwi_phy *phy = &mac->mac_phy;
3194 PHY_WRITE(mac, phy->phy_tbl_ctrl, ofs);
3195 PHY_WRITE(mac, phy->phy_tbl_data_hi, data >> 16);
3196 PHY_WRITE(mac, phy->phy_tbl_data_lo, data & 0xffff);
3200 bwi_nrssi_write(struct bwi_mac *mac, uint16_t ofs, int16_t data)
3202 PHY_WRITE(mac, BWI_PHYR_NRSSI_CTRL, ofs);
3203 PHY_WRITE(mac, BWI_PHYR_NRSSI_DATA, (uint16_t)data);
3207 bwi_nrssi_read(struct bwi_mac *mac, uint16_t ofs)
3209 PHY_WRITE(mac, BWI_PHYR_NRSSI_CTRL, ofs);
3210 return ((int16_t)PHY_READ(mac, BWI_PHYR_NRSSI_DATA));
3214 bwi_phy_init_11a(struct bwi_mac *mac)
3220 bwi_phy_init_11g(struct bwi_mac *mac)
3222 struct bwi_softc *sc = mac->mac_sc;
3223 struct bwi_phy *phy = &mac->mac_phy;
3224 struct bwi_rf *rf = &mac->mac_rf;
3225 const struct bwi_tpctl *tpctl = &mac->mac_tpctl;
3228 bwi_phy_init_11b_rev5(mac);
3230 bwi_phy_init_11b_rev6(mac);
3233 bwi_phy_config_11g(mac);
3236 PHY_WRITE(mac, 0x814, 0);
3237 PHY_WRITE(mac, 0x815, 0);
3240 PHY_WRITE(mac, 0x811, 0);
3241 PHY_WRITE(mac, 0x15, 0xc0);
3243 PHY_WRITE(mac, 0x811, 0x400);
3244 PHY_WRITE(mac, 0x15, 0xc0);
3251 val = PHY_READ(mac, 0x400) & 0xff;
3253 PHY_WRITE(mac, 0x4c2, 0x1816);
3254 PHY_WRITE(mac, 0x4c3, 0x8006);
3256 PHY_FILT_SETBITS(mac, 0x4cc,
3264 PHY_WRITE(mac, 0x47e, 0x78);
3267 PHY_SETBITS(mac, 0x801, 0x80);
3268 PHY_SETBITS(mac, 0x43e, 0x4);
3272 bwi_rf_get_gains(mac);
3275 bwi_rf_init(mac);
3278 bwi_rf_lo_update(mac);
3281 RF_WRITE(mac, 0x52,
3284 RF_FILT_SETBITS(mac, 0x52, 0xfff0, tpctl->tp_ctrl2);
3288 PHY_FILT_SETBITS(mac, 0x36, 0xfff,
3293 PHY_WRITE(mac, 0x2e, 0x8075);
3295 PHY_WRITE(mac, 0x2e, 0x807f);
3298 PHY_WRITE(mac, 0x2f, 0x101);
3300 PHY_WRITE(mac, 0x2f, 0x202);
3304 bwi_rf_lo_adjust(mac, tpctl);
3305 PHY_WRITE(mac, 0x80f, 0x8078);
3309 bwi_rf_init_hw_nrssi_table(mac, 0xffff /* XXX */);
3310 bwi_rf_set_nrssi_thr(mac);
3314 bwi_rf_calc_nrssi_slope(mac);
3317 bwi_rf_set_nrssi_thr(mac);
3322 PHY_WRITE(mac, 0x805, 0x3230);
3324 bwi_mac_init_tpctl_11bg(mac);
3327 PHY_CLRBITS(mac, 0x429, 0x4000);
3328 PHY_CLRBITS(mac, 0x4c3, 0x8000);
3333 bwi_phy_init_11b_rev2(struct bwi_mac *mac)
3337 sc = mac->mac_sc;
3344 bwi_phy_init_11b_rev4(struct bwi_mac *mac)
3346 struct bwi_softc *sc = mac->mac_sc;
3347 struct bwi_rf *rf = &mac->mac_rf;
3353 PHY_WRITE(mac, 0x20, 0x301c);
3354 PHY_WRITE(mac, 0x26, 0);
3355 PHY_WRITE(mac, 0x30, 0xc6);
3356 PHY_WRITE(mac, 0x88, 0x3e00);
3359 PHY_WRITE(mac, 0x89 + ofs, val);
3366 bwi_rf_set_chan(mac, chan, 0);
3369 RF_WRITE(mac, 0x75, 0x80);
3370 RF_WRITE(mac, 0x79, 0x81);
3373 RF_WRITE(mac, 0x50, 0x20);
3374 RF_WRITE(mac, 0x50, 0x23);
3377 RF_WRITE(mac, 0x50, 0x20);
3378 RF_WRITE(mac, 0x5a, 0x70);
3379 RF_WRITE(mac, 0x5b, 0x7b);
3380 RF_WRITE(mac, 0x5c, 0xb0);
3381 RF_WRITE(mac, 0x7a, 0xf);
3382 PHY_WRITE(mac, 0x38, 0x677);
3383 bwi_rf_init_bcm2050(mac);
3386 PHY_WRITE(mac, 0x14, 0x80);
3387 PHY_WRITE(mac, 0x32, 0xca);
3389 PHY_WRITE(mac, 0x32, 0xe0);
3390 PHY_WRITE(mac, 0x35, 0x7c2);
3392 bwi_rf_lo_update(mac);
3394 PHY_WRITE(mac, 0x26, 0xcc00);
3396 PHY_WRITE(mac, 0x26, 0xce00);
3400 PHY_WRITE(mac, 0x2a, 0x88a3);
3402 PHY_WRITE(mac, 0x2a, 0x88c2);
3404 bwi_mac_set_tpctl_11bg(mac, NULL);
3406 bwi_rf_calc_nrssi_slope(mac);
3407 bwi_rf_set_nrssi_thr(mac);
3409 bwi_mac_init_tpctl_11bg(mac);
3413 bwi_phy_init_11b_rev5(struct bwi_mac *mac)
3415 struct bwi_softc *sc = mac->mac_sc;
3416 struct bwi_rf *rf = &mac->mac_rf;
3417 struct bwi_phy *phy = &mac->mac_phy;
3421 RF_SETBITS(mac, 0x7a, 0x50);
3429 PHY_WRITE(mac, ofs, val);
3434 PHY_FILT_SETBITS(mac, 0x35, 0xf0ff, 0x700);
3437 PHY_WRITE(mac, 0x38, 0x667);
3441 RF_SETBITS(mac, 0x7a, 0x20);
3442 RF_SETBITS(mac, 0x51, 0x4);
3447 PHY_SETBITS(mac, 0x802, 0x100);
3448 PHY_SETBITS(mac, 0x42b, 0x2000);
3449 PHY_WRITE(mac, 0x1c, 0x186a);
3451 PHY_FILT_SETBITS(mac, 0x13, 0xff, 0x1900);
3452 PHY_FILT_SETBITS(mac, 0x35, 0xffc0, 0x64);
3453 PHY_FILT_SETBITS(mac, 0x5d, 0xff80, 0xa);
3459 PHY_WRITE(mac, 0x26, 0xce00);
3460 PHY_WRITE(mac, 0x21, 0x3763);
3461 PHY_WRITE(mac, 0x22, 0x1bc3);
3462 PHY_WRITE(mac, 0x23, 0x6f9);
3463 PHY_WRITE(mac, 0x24, 0x37e);
3465 PHY_WRITE(mac, 0x26, 0xcc00);
3466 PHY_WRITE(mac, 0x30, 0xc6);
3471 PHY_WRITE(mac, 0x20, 0x3e1c);
3473 PHY_WRITE(mac, 0x20, 0x301c);
3480 bwi_rf_set_chan(mac, 7, 0);
3483 RF_WRITE(mac, 0x75, 0x80);
3484 RF_WRITE(mac, 0x79, 0x81);
3487 RF_WRITE(mac, 0x50, 0x20);
3488 RF_WRITE(mac, 0x50, 0x23);
3491 RF_WRITE(mac, 0x50, 0x20);
3492 RF_WRITE(mac, 0x5a, 0x70);
3495 RF_WRITE(mac, 0x5b, 0x7b);
3496 RF_WRITE(mac, 0x5c, 0xb0);
3497 RF_SETBITS(mac, 0x7a, 0x7);
3499 bwi_rf_set_chan(mac, orig_chan, 0);
3501 PHY_WRITE(mac, 0x14, 0x80);
3502 PHY_WRITE(mac, 0x32, 0xca);
3503 PHY_WRITE(mac, 0x2a, 0x88a3);
3505 bwi_mac_set_tpctl_11bg(mac, NULL);
3508 RF_WRITE(mac, 0x5d, 0xd);
3514 bwi_phy_init_11b_rev6(struct bwi_mac *mac)
3516 struct bwi_softc *sc = mac->mac_sc;
3517 struct bwi_rf *rf = &mac->mac_rf;
3518 struct bwi_phy *phy = &mac->mac_phy;
3522 PHY_WRITE(mac, 0x3e, 0x817a);
3523 RF_SETBITS(mac, 0x7a, 0x58);
3526 RF_WRITE(mac, 0x51, 0x37);
3527 RF_WRITE(mac, 0x52, 0x70);
3528 RF_WRITE(mac, 0x53, 0xb3);
3529 RF_WRITE(mac, 0x54, 0x9b);
3530 RF_WRITE(mac, 0x5a, 0x88);
3531 RF_WRITE(mac, 0x5b, 0x88);
3532 RF_WRITE(mac, 0x5d, 0x88);
3533 RF_WRITE(mac, 0x5e, 0x88);
3534 RF_WRITE(mac, 0x7d, 0x88);
3535 HFLAGS_SETBITS(mac, BWI_HFLAG_MAGIC1);
3537 RF_WRITE(mac, 0x51, 0);
3538 RF_WRITE(mac, 0x52, 0x40);
3539 RF_WRITE(mac, 0x53, 0xb7);
3540 RF_WRITE(mac, 0x54, 0x98);
3541 RF_WRITE(mac, 0x5a, 0x88);
3542 RF_WRITE(mac, 0x5b, 0x6b);
3543 RF_WRITE(mac, 0x5c, 0xf);
3545 RF_WRITE(mac, 0x5d, 0xfa);
3546 RF_WRITE(mac, 0x5e, 0xd8);
3548 RF_WRITE(mac, 0x5d, 0xf5);
3549 RF_WRITE(mac, 0x5e, 0xb8);
3551 RF_WRITE(mac, 0x73, 0x3);
3552 RF_WRITE(mac, 0x7d, 0xa8);
3553 RF_WRITE(mac, 0x7c, 0x1);
3554 RF_WRITE(mac, 0x7e, 0x8);
3559 PHY_WRITE(mac, ofs, val);
3565 PHY_WRITE(mac, ofs, val);
3571 PHY_WRITE(mac, ofs, (val & 0x3f3f));
3576 RF_SETBITS(mac, 0x7a, 0x20);
3577 RF_SETBITS(mac, 0x51, 0x4);
3578 PHY_SETBITS(mac, 0x802, 0x100);
3579 PHY_SETBITS(mac, 0x42b, 0x2000);
3580 PHY_WRITE(mac, 0x5b, 0);
3581 PHY_WRITE(mac, 0x5c, 0);
3587 bwi_rf_set_chan(mac, 1, 0);
3589 bwi_rf_set_chan(mac, 13, 0);
3591 RF_WRITE(mac, 0x50, 0x20);
3592 RF_WRITE(mac, 0x50, 0x23);
3597 RF_SETBITS(mac, 0x7c, 0x2);
3598 RF_WRITE(mac, 0x50, 0x20);
3601 RF_WRITE(mac, 0x7c, 0x20);
3602 RF_WRITE(mac, 0x5a, 0x70);
3603 RF_WRITE(mac, 0x5b, 0x7b);
3604 RF_WRITE(mac, 0x5c, 0xb0);
3607 RF_FILT_SETBITS(mac, 0x7a, 0xf8, 0x7);
3609 bwi_rf_set_chan(mac, orig_chan, 0);
3611 PHY_WRITE(mac, 0x14, 0x200);
3613 PHY_WRITE(mac, 0x2a, 0x88c2);
3615 PHY_WRITE(mac, 0x2a, 0x8ac0);
3616 PHY_WRITE(mac, 0x38, 0x668);
3618 bwi_mac_set_tpctl_11bg(mac, NULL);
3621 PHY_FILT_SETBITS(mac, 0x5d, 0xff80, 0x3);
3623 RF_WRITE(mac, 0x5d, 0xd);
3628 PHY_CLRBITS(mac, 0x61, 0xf000);
3630 PHY_FILT_SETBITS(mac, 0x2, 0xffc0, 0x4);
3635 PHY_WRITE(mac, 0x16, 0x410);
3636 PHY_WRITE(mac, 0x17, 0x820);
3637 PHY_WRITE(mac, 0x62, 0x7);
3639 bwi_rf_init_bcm2050(mac);
3640 bwi_rf_lo_update(mac);
3642 bwi_rf_calc_nrssi_slope(mac);
3643 bwi_rf_set_nrssi_thr(mac);
3645 bwi_mac_init_tpctl_11bg(mac);
3651 bwi_phy_config_11g(struct bwi_mac *mac)
3653 struct bwi_softc *sc = mac->mac_sc;
3654 struct bwi_phy *phy = &mac->mac_phy;
3660 PHY_WRITE(mac, 0x406, 0x4f19);
3661 PHY_FILT_SETBITS(mac, 0x429, 0xfc3f, 0x340);
3662 PHY_WRITE(mac, 0x42c, 0x5a);
3663 PHY_WRITE(mac, 0x427, 0x1a);
3667 bwi_tbl_write_2(mac, BWI_PHYTBL_FREQ + i,
3673 bwi_tbl_write_2(mac, BWI_PHYTBL_NOISE + i,
3680 bwi_tbl_write_4(mac, BWI_PHYTBL_ROTOR + i,
3684 bwi_nrssi_write(mac, 0xba98, (int16_t)0x7654); /* XXX */
3687 PHY_WRITE(mac, 0x4c0, 0x1861);
3688 PHY_WRITE(mac, 0x4c1, 0x271);
3690 PHY_WRITE(mac, 0x4c0, 0x98);
3691 PHY_WRITE(mac, 0x4c1, 0x70);
3692 PHY_WRITE(mac, 0x4c9, 0x80);
3694 PHY_SETBITS(mac, 0x42b, 0x800);
3698 bwi_tbl_write_2(mac, BWI_PHYTBL_RSSI + i, i);
3702 bwi_tbl_write_2(mac, BWI_PHYTBL_NOISE + i,
3713 } else if (phy->phy_rev >= 7 && (PHY_READ(mac, 0x449) & 0x200)) {
3721 bwi_tbl_write_2(mac, BWI_PHYTBL_NOISE_SCALE + i, tbl[i]);
3737 bwi_tbl_write_2(mac, BWI_PHYTBL_SIGMA_SQ + i, tbl[i]);
3742 bwi_tbl_write_4(mac, BWI_PHYTBL_DELAY + i,
3748 bwi_tbl_write_2(mac, BWI_PHYTBL_WRSSI_REV1 + i, 0x20);
3750 bwi_phy_config_agc(mac);
3757 bwi_tbl_write_2(mac, BWI_PHYTBL_WRSSI + i, 0x820);
3759 bwi_phy_config_agc(mac);
3761 PHY_READ(mac, 0x400); /* Dummy read */
3762 PHY_WRITE(mac, 0x403, 0x1000);
3763 bwi_tbl_write_2(mac, 0x3c02, 0xf);
3764 bwi_tbl_write_2(mac, 0x3c03, 0x14);
3771 bwi_tbl_write_2(mac, wrd_ofs1, 0x2);
3772 bwi_tbl_write_2(mac, wrd_ofs2, 0x1);
3777 PHY_WRITE(mac, 0x46e, 0x3cf);
3784 bwi_phy_config_agc(struct bwi_mac *mac)
3786 struct bwi_phy *phy = &mac->mac_phy;
3791 bwi_tbl_write_2(mac, ofs, 0xfe);
3792 bwi_tbl_write_2(mac, ofs + 1, 0xd);
3793 bwi_tbl_write_2(mac, ofs + 2, 0x13);
3794 bwi_tbl_write_2(mac, ofs + 3, 0x19);
3797 bwi_tbl_write_2(mac, 0x1800, 0x2710);
3798 bwi_tbl_write_2(mac, 0x1801, 0x9b83);
3799 bwi_tbl_write_2(mac, 0x1802, 0x9b83);
3800 bwi_tbl_write_2(mac, 0x1803, 0xf8d);
3801 PHY_WRITE(mac, 0x455, 0x4);
3804 PHY_FILT_SETBITS(mac, 0x4a5, 0xff, 0x5700);
3805 PHY_FILT_SETBITS(mac, 0x41a, 0xff80, 0xf);
3806 PHY_FILT_SETBITS(mac, 0x41a, 0xc07f, 0x2b80);
3807 PHY_FILT_SETBITS(mac, 0x48c, 0xf0ff, 0x300);
3809 RF_SETBITS(mac, 0x7a, 0x8);
3811 PHY_FILT_SETBITS(mac, 0x4a0, 0xfff0, 0x8);
3812 PHY_FILT_SETBITS(mac, 0x4a1, 0xf0ff, 0x600);
3813 PHY_FILT_SETBITS(mac, 0x4a2, 0xf0ff, 0x700);
3814 PHY_FILT_SETBITS(mac, 0x4a0, 0xf0ff, 0x100);
3817 PHY_FILT_SETBITS(mac, 0x4a2, 0xfff0, 0x7);
3819 PHY_FILT_SETBITS(mac, 0x488, 0xff00, 0x1c);
3820 PHY_FILT_SETBITS(mac, 0x488, 0xc0ff, 0x200);
3821 PHY_FILT_SETBITS(mac, 0x496, 0xff00, 0x1c);
3822 PHY_FILT_SETBITS(mac, 0x489, 0xff00, 0x20);
3823 PHY_FILT_SETBITS(mac, 0x489, 0xc0ff, 0x200);
3824 PHY_FILT_SETBITS(mac, 0x482, 0xff00, 0x2e);
3825 PHY_FILT_SETBITS(mac, 0x496, 0xff, 0x1a00);
3826 PHY_FILT_SETBITS(mac, 0x481, 0xff00, 0x28);
3827 PHY_FILT_SETBITS(mac, 0x481, 0xff, 0x2c00);
3830 PHY_WRITE(mac, 0x430, 0x92b);
3831 PHY_FILT_SETBITS(mac, 0x41b, 0xffe1, 0x2);
3833 PHY_CLRBITS(mac, 0x41b, 0x1e);
3834 PHY_WRITE(mac, 0x41f, 0x287a);
3835 PHY_FILT_SETBITS(mac, 0x420, 0xfff0, 0x4);
3838 PHY_WRITE(mac, 0x422, 0x287a);
3839 PHY_FILT_SETBITS(mac, 0x420, 0xfff, 0x3000);
3843 PHY_FILT_SETBITS(mac, 0x4a8, 0x8080, 0x7874);
3844 PHY_WRITE(mac, 0x48e, 0x1c00);
3847 PHY_FILT_SETBITS(mac, 0x4ab, 0xf0ff, 0x600);
3848 PHY_WRITE(mac, 0x48b, 0x5e);
3849 PHY_FILT_SETBITS(mac, 0x48c, 0xff00, 0x1e);
3850 PHY_WRITE(mac, 0x48d, 0x2);
3853 bwi_tbl_write_2(mac, ofs + 0x800, 0);
3854 bwi_tbl_write_2(mac, ofs + 0x801, 7);
3855 bwi_tbl_write_2(mac, ofs + 0x802, 16);
3856 bwi_tbl_write_2(mac, ofs + 0x803, 28);
3859 PHY_CLRBITS(mac, 0x426, 0x3);
3860 PHY_CLRBITS(mac, 0x426, 0x1000);
3865 bwi_set_gains(struct bwi_mac *mac, const struct bwi_gains *gains)
3867 struct bwi_phy *phy = &mac->mac_phy;
3887 bwi_tbl_write_2(mac, tbl_gain_ofs1 + i, tbl_gain);
3895 bwi_tbl_write_2(mac, tbl_gain_ofs2 + i, tbl_gain);
3910 PHY_FILT_SETBITS(mac, 0x4a0, 0xbfbf, phy_gain1);
3911 PHY_FILT_SETBITS(mac, 0x4a1, 0xbfbf, phy_gain1);
3912 PHY_FILT_SETBITS(mac, 0x4a2, 0xbfbf, phy_gain2);
3914 bwi_mac_dummy_xmit(mac);
3926 bwi_nrssi_11g(struct bwi_mac *mac)
3931 val = (int16_t)__SHIFTOUT(PHY_READ(mac, 0x47f), NRSSI_11G_MASK);
3940 bwi_get_rf_lo(struct bwi_mac *mac, uint16_t rf_atten, uint16_t bbp_atten)
3947 return (&mac->mac_rf.rf_lo[n]);
3951 bwi_rf_lo_isused(struct bwi_mac *mac, const struct bwi_rf_lo *lo)
3953 struct bwi_rf *rf = &mac->mac_rf;
3963 bwi_rf_write(struct bwi_mac *mac, uint16_t ctrl, uint16_t data)
3965 struct bwi_softc *sc = mac->mac_sc;
3972 bwi_rf_read(struct bwi_mac *mac, uint16_t ctrl)
3974 struct bwi_rf *rf = &mac->mac_rf;
3975 struct bwi_softc *sc = mac->mac_sc;
3991 bwi_rf_attach(struct bwi_mac *mac)
3993 struct bwi_softc *sc = mac->mac_sc;
3994 struct bwi_phy *phy = &mac->mac_phy;
3995 struct bwi_rf *rf = &mac->mac_rf;
4082 if (mac->mac_rev >= 5)
4106 bwi_rf_set_chan(struct bwi_mac *mac, uint chan, int work_around)
4108 struct bwi_softc *sc = mac->mac_sc;
4113 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_CHAN, chan);
4118 bwi_rf_workaround(mac, chan);
4124 HFLAGS_CLRBITS(mac, BWI_HFLAG_NOT_JAPAN);
4126 HFLAGS_SETBITS(mac, BWI_HFLAG_NOT_JAPAN);
4133 mac->mac_rf.rf_curchan = chan;
4137 bwi_rf_get_gains(struct bwi_mac *mac)
4150 struct bwi_phy *phy = &mac->mac_phy;
4151 struct bwi_rf *rf = &mac->mac_rf;
4161 save_phy[i] = PHY_READ(mac, save_phy_regs[i]);
4162 PHY_READ(mac, 0x2d); /* dummy read */
4165 save_rf[i] = RF_READ(mac, save_rf_regs[i]);
4167 PHY_CLRBITS(mac, 0x429, 0xc000);
4168 PHY_SETBITS(mac, 0x1, 0x8000);
4170 PHY_SETBITS(mac, 0x811, 0x2);
4171 PHY_CLRBITS(mac, 0x812, 0x2);
4172 PHY_SETBITS(mac, 0x811, 0x1);
4173 PHY_CLRBITS(mac, 0x812, 0x1);
4175 PHY_SETBITS(mac, 0x814, 0x1);
4176 PHY_CLRBITS(mac, 0x815, 0x1);
4177 PHY_SETBITS(mac, 0x814, 0x2);
4178 PHY_CLRBITS(mac, 0x815, 0x2);
4180 PHY_SETBITS(mac, 0x811, 0xc);
4181 PHY_SETBITS(mac, 0x812, 0xc);
4182 PHY_SETBITS(mac, 0x811, 0x30);
4183 PHY_FILT_SETBITS(mac, 0x812, 0xffcf, 0x10);
4185 PHY_WRITE(mac, 0x5a, 0x780);
4186 PHY_WRITE(mac, 0x59, 0xc810);
4187 PHY_WRITE(mac, 0x58, 0xd);
4188 PHY_SETBITS(mac, 0xa, 0x2000);
4190 PHY_SETBITS(mac, 0x814, 0x4);
4191 PHY_CLRBITS(mac, 0x815, 0x4);
4193 PHY_FILT_SETBITS(mac, 0x3, 0xff9f, 0x40);
4197 RF_WRITE(mac, 0x43, loop1_max);
4200 RF_WRITE(mac, 0x52, 0x0);
4201 RF_FILT_SETBITS(mac, 0x43, 0xfff0, loop1_max);
4204 bwi_phy_set_bbp_atten(mac, 11);
4207 PHY_WRITE(mac, 0x80f, 0xc020);
4209 PHY_WRITE(mac, 0x80f, 0x8020);
4210 PHY_WRITE(mac, 0x810, 0);
4212 PHY_FILT_SETBITS(mac, 0x2b, 0xffc0, 0x1);
4213 PHY_FILT_SETBITS(mac, 0x2b, 0xc0ff, 0x800);
4214 PHY_SETBITS(mac, 0x811, 0x100);
4215 PHY_CLRBITS(mac, 0x812, 0x3000);
4217 if ((mac->mac_sc->sc_card_flags & BWI_CARD_F_EXT_LNA) &&
4219 PHY_SETBITS(mac, 0x811, 0x800);
4220 PHY_SETBITS(mac, 0x812, 0x8000);
4222 RF_CLRBITS(mac, 0x7a, 0xff08);
4231 RF_WRITE(mac, 0x43, i);
4233 if (bwi_rf_gain_max_reached(mac, j))
4246 PHY_SETBITS(mac, 0x812, 0x30);
4250 if (bwi_rf_gain_max_reached(mac, i))
4262 PHY_WRITE(mac, save_phy_regs[i], save_phy[i]);
4264 bwi_phy_set_bbp_atten(mac, mac->mac_tpctl.bbp_atten);
4267 RF_WRITE(mac, save_rf_regs[i], save_rf[i]);
4269 PHY_WRITE(mac, save_phy_regs[2], save_phy[2] | 0x3);
4271 PHY_WRITE(mac, save_phy_regs[2], save_phy[2]);
4272 PHY_WRITE(mac, save_phy_regs[3], save_phy[3]);
4273 PHY_WRITE(mac, save_phy_regs[0], save_phy[0]);
4274 PHY_WRITE(mac, save_phy_regs[1], save_phy[1]);
4281 DPRINTF(mac->mac_sc, BWI_DBG_RF | BWI_DBG_INIT,
4290 bwi_rf_init(struct bwi_mac *mac)
4292 struct bwi_rf *rf = &mac->mac_rf;
4298 RF_WRITE(mac, 0x78, rf->rf_calib);
4300 bwi_rf_init_bcm2050(mac);
4305 bwi_rf_off_11a(struct bwi_mac *mac)
4307 RF_WRITE(mac, 0x4, 0xff);
4308 RF_WRITE(mac, 0x5, 0xfb);
4310 PHY_SETBITS(mac, 0x10, 0x8);
4311 PHY_SETBITS(mac, 0x11, 0x8);
4313 PHY_WRITE(mac, 0x15, 0xaa00);
4317 bwi_rf_off_11bg(struct bwi_mac *mac)
4319 PHY_WRITE(mac, 0x15, 0xaa00);
4323 bwi_rf_off_11g_rev5(struct bwi_mac *mac)
4325 PHY_SETBITS(mac, 0x811, 0x8c);
4326 PHY_CLRBITS(mac, 0x812, 0x8c);
4330 bwi_rf_workaround(struct bwi_mac *mac, uint chan)
4332 struct bwi_softc *sc = mac->mac_sc;
4333 struct bwi_rf *rf = &mac->mac_rf;
4353 bwi_rf_lo_find(struct bwi_mac *mac, const struct bwi_tpctl *tpctl)
4390 return (bwi_get_rf_lo(mac, rf_atten, bbp_atten));
4394 bwi_rf_lo_adjust(struct bwi_mac *mac, const struct bwi_tpctl *tpctl)
4398 lo = bwi_rf_lo_find(mac, tpctl);
4399 RF_LO_WRITE(mac, lo);
4403 bwi_rf_lo_write(struct bwi_mac *mac, const struct bwi_rf_lo *lo)
4410 PHY_WRITE(mac, BWI_PHYR_RF_LO, val);
4414 bwi_rf_gain_max_reached(struct bwi_mac *mac, int idx)
4416 PHY_FILT_SETBITS(mac, 0x812, 0xf0ff, idx << 8);
4417 PHY_FILT_SETBITS(mac, 0x15, 0xfff, 0xa000);
4418 PHY_SETBITS(mac, 0x15, 0xf000);
4422 return ((PHY_READ(mac, 0x2d) >= 0xdfc));
4440 bwi_phy812_value(struct bwi_mac *mac, uint16_t lpd)
4442 struct bwi_softc *sc = mac->mac_sc;
4443 struct bwi_phy *phy = &mac->mac_phy;
4444 struct bwi_rf *rf = &mac->mac_rf;
4512 bwi_rf_init_bcm2050(struct bwi_mac *mac)
4532 struct bwi_softc *sc = mac->mac_sc;
4533 struct bwi_phy *phy = &mac->mac_phy;
4534 struct bwi_rf *rf = &mac->mac_rf;
4541 save_rf[i] = RF_READ(mac, save_rf_regs[i]);
4543 save_phy_comm[i] = PHY_READ(mac, save_phy_regs_comm[i]);
4546 phyr_30 = PHY_READ(mac, 0x30);
4549 PHY_WRITE(mac, 0x30, 0xff);
4553 save_phy_11g[i] = PHY_READ(mac, save_phy_regs_11g[i]);
4556 PHY_SETBITS(mac, 0x814, 0x3);
4557 PHY_CLRBITS(mac, 0x815, 0x3);
4558 PHY_CLRBITS(mac, 0x429, 0x8000);
4559 PHY_CLRBITS(mac, 0x802, 0x3);
4561 phyr_80f = PHY_READ(mac, 0x80f);
4562 phyr_810 = PHY_READ(mac, 0x810);
4565 PHY_WRITE(mac, 0x80f, 0xc020);
4567 PHY_WRITE(mac, 0x80f, 0x8020);
4568 PHY_WRITE(mac, 0x810, 0);
4570 phy812_val = bwi_phy812_value(mac, 0x011);
4571 PHY_WRITE(mac, 0x812, phy812_val);
4574 PHY_WRITE(mac, 0x811, 0x1b3);
4576 PHY_WRITE(mac, 0x811, 0x9b3);
4580 phyr_35 = PHY_READ(mac, 0x35);
4581 PHY_CLRBITS(mac, 0x35, 0x80);
4590 PHY_FILT_SETBITS(mac, 0x3, 0xffbf, 0x40);
4594 calib = bwi_rf_calibval(mac);
4597 RF_WRITE(mac, 0x78, 0x26);
4600 phy812_val = bwi_phy812_value(mac, 0x011);
4601 PHY_WRITE(mac, 0x812, phy812_val);
4604 PHY_WRITE(mac, 0x15, 0xbfaf);
4605 PHY_WRITE(mac, 0x2b, 0x1403);
4608 phy812_val = bwi_phy812_value(mac, 0x001);
4609 PHY_WRITE(mac, 0x812, phy812_val);
4612 PHY_WRITE(mac, 0x15, 0xbfa0);
4614 RF_SETBITS(mac, 0x51, 0x4);
4616 RF_WRITE(mac, 0x43, 0x1f);
4618 RF_WRITE(mac, 0x52, 0);
4619 RF_FILT_SETBITS(mac, 0x43, 0xfff0, 0x9);
4623 PHY_WRITE(mac, 0x58, 0);
4625 PHY_WRITE(mac, 0x5a, 0x480);
4626 PHY_WRITE(mac, 0x59, 0xc810);
4628 PHY_WRITE(mac, 0x58, 0xd);
4630 phy812_val = bwi_phy812_value(mac, 0x101);
4631 PHY_WRITE(mac, 0x812, phy812_val);
4633 PHY_WRITE(mac, 0x15, 0xafb0);
4637 phy812_val = bwi_phy812_value(mac, 0x101);
4638 PHY_WRITE(mac, 0x812, phy812_val);
4640 PHY_WRITE(mac, 0x15, 0xefb0);
4644 phy812_val = bwi_phy812_value(mac, 0x100);
4645 PHY_WRITE(mac, 0x812, phy812_val);
4647 PHY_WRITE(mac, 0x15, 0xfff0);
4650 test_lim += PHY_READ(mac, 0x2d);
4652 PHY_WRITE(mac, 0x58, 0);
4654 phy812_val = bwi_phy812_value(mac, 0x101);
4655 PHY_WRITE(mac, 0x812, phy812_val);
4657 PHY_WRITE(mac, 0x15, 0xafb0);
4665 PHY_WRITE(mac, 0x58, 0);
4670 RF_WRITE(mac, 0x78, rfr_78);
4675 PHY_WRITE(mac, 0x5a, 0xd80);
4676 PHY_WRITE(mac, 0x59, 0xc810);
4678 PHY_WRITE(mac, 0x58, 0xd);
4681 phy812_val = bwi_phy812_value(mac, 0x101);
4682 PHY_WRITE(mac, 0x812, phy812_val);
4684 PHY_WRITE(mac, 0x15, 0xafb0);
4689 phy812_val = bwi_phy812_value(mac, 0x101);
4690 PHY_WRITE(mac, 0x812, phy812_val);
4692 PHY_WRITE(mac, 0x15, 0xefb0);
4697 phy812_val = bwi_phy812_value(mac, 0x100);
4698 PHY_WRITE(mac, 0x812, phy812_val);
4700 PHY_WRITE(mac, 0x15, 0xfff0);
4703 test += PHY_READ(mac, 0x2d);
4705 PHY_WRITE(mac, 0x58, 0);
4708 phy812_val = bwi_phy812_value(mac, 0x101);
4709 PHY_WRITE(mac, 0x812, phy812_val);
4711 PHY_WRITE(mac, 0x15, 0xafb0);
4733 PHY_WRITE(mac, save_phy_regs_comm[0], save_phy_comm[0]);
4738 RF_WRITE(mac, save_rf_regs[pos], save_rf[pos]);
4741 PHY_WRITE(mac, save_phy_regs_comm[i], save_phy_comm[i]);
4747 PHY_WRITE(mac, 0x35, phyr_35);
4748 bwi_rf_workaround(mac, rf->rf_curchan);
4751 PHY_WRITE(mac, 0x30, phyr_30);
4758 PHY_WRITE(mac, save_phy_regs_11g[i],
4762 PHY_WRITE(mac, 0x80f, phyr_80f);
4763 PHY_WRITE(mac, 0x810, phyr_810);
4772 bwi_rf_calibval(struct bwi_mac *mac)
4783 val = RF_READ(mac, BWI_RFR_BBP_ATTEN);
4846 bwi_rf_map_txpower(struct bwi_mac *mac)
4848 struct bwi_softc *sc = mac->mac_sc;
4849 struct bwi_rf *rf = &mac->mac_rf;
4850 struct bwi_phy *phy = &mac->mac_phy;
5030 bwi_rf_lo_update_11g(struct bwi_mac *mac)
5032 struct bwi_softc *sc = mac->mac_sc;
5034 struct bwi_rf *rf = &mac->mac_rf;
5035 struct bwi_phy *phy = &mac->mac_phy;
5036 struct bwi_tpctl *tpctl = &mac->mac_tpctl;
5051 SAVE_PHY_REG(mac, &regs, 429);
5052 SAVE_PHY_REG(mac, &regs, 802);
5054 PHY_WRITE(mac, 0x429, regs.phy_429 & 0x7fff);
5055 PHY_WRITE(mac, 0x802, regs.phy_802 & 0xfffc);
5062 SAVE_PHY_REG(mac, &regs, 15);
5063 SAVE_PHY_REG(mac, &regs, 2a);
5064 SAVE_PHY_REG(mac, &regs, 35);
5065 SAVE_PHY_REG(mac, &regs, 60);
5066 SAVE_RF_REG(mac, &regs, 43);
5067 SAVE_RF_REG(mac, &regs, 7a);
5068 SAVE_RF_REG(mac, &regs, 52);
5070 SAVE_PHY_REG(mac, &regs, 811);
5071 SAVE_PHY_REG(mac, &regs, 812);
5072 SAVE_PHY_REG(mac, &regs, 814);
5073 SAVE_PHY_REG(mac, &regs, 815);
5077 bwi_rf_set_chan(mac, 6, 0);
5080 PHY_WRITE(mac, 0x429, regs.phy_429 & 0x7fff);
5081 PHY_WRITE(mac, 0x802, regs.phy_802 & 0xfffc);
5082 bwi_mac_dummy_xmit(mac);
5084 RF_WRITE(mac, 0x43, 0x6);
5086 bwi_phy_set_bbp_atten(mac, 2);
5090 PHY_WRITE(mac, 0x2e, 0x7f);
5091 PHY_WRITE(mac, 0x80f, 0x78);
5092 PHY_WRITE(mac, 0x35, regs.phy_35 & 0xff7f);
5093 RF_WRITE(mac, 0x7a, regs.rf_7a & 0xfff0);
5094 PHY_WRITE(mac, 0x2b, 0x203);
5095 PHY_WRITE(mac, 0x2a, 0x8a3);
5098 PHY_WRITE(mac, 0x814, regs.phy_814 | 0x3);
5099 PHY_WRITE(mac, 0x815, regs.phy_815 & 0xfffc);
5100 PHY_WRITE(mac, 0x811, 0x1b3);
5101 PHY_WRITE(mac, 0x812, 0xb2);
5105 tpctl->tp_ctrl2 = bwi_rf_get_tp_ctrl2(mac);
5106 PHY_WRITE(mac, 0x80f, 0x8078);
5111 devi_ctrl = _bwi_rf_lo_update_11g(mac, regs.rf_7a);
5117 PHY_WRITE(mac, 0x15, 0xe300);
5118 PHY_WRITE(mac, 0x812, (devi_ctrl << 8) | 0xa0);
5120 PHY_WRITE(mac, 0x812, (devi_ctrl << 8) | 0xa2);
5122 PHY_WRITE(mac, 0x812, (devi_ctrl << 8) | 0xa3);
5124 PHY_WRITE(mac, 0x15, devi_ctrl | 0xefa0);
5128 bwi_rf_lo_adjust(mac, tpctl);
5130 PHY_WRITE(mac, 0x2e, 0x807f);
5132 PHY_WRITE(mac, 0x2f, 0x202);
5134 PHY_WRITE(mac, 0x2f, 0x101);
5138 RESTORE_PHY_REG(mac, &regs, 15);
5139 RESTORE_PHY_REG(mac, &regs, 2a);
5140 RESTORE_PHY_REG(mac, &regs, 35);
5141 RESTORE_PHY_REG(mac, &regs, 60);
5143 RESTORE_RF_REG(mac, &regs, 43);
5144 RESTORE_RF_REG(mac, &regs, 7a);
5147 regs.rf_52 |= (RF_READ(mac, 0x52) & 0xf);
5148 RF_WRITE(mac, 0x52, regs.rf_52);
5153 RESTORE_PHY_REG(mac, &regs, 811);
5154 RESTORE_PHY_REG(mac, &regs, 812);
5155 RESTORE_PHY_REG(mac, &regs, 814);
5156 RESTORE_PHY_REG(mac, &regs, 815);
5157 RESTORE_PHY_REG(mac, &regs, 429);
5158 RESTORE_PHY_REG(mac, &regs, 802);
5161 bwi_rf_set_chan(mac, orig_chan, 1);
5165 bwi_rf_lo_devi_measure(struct bwi_mac *mac, uint16_t ctrl)
5167 struct bwi_phy *phy = &mac->mac_phy;
5176 PHY_WRITE(mac, 0x15, 0xe300);
5177 PHY_WRITE(mac, 0x812, ctrl | 0xb0);
5179 PHY_WRITE(mac, 0x812, ctrl | 0xb2);
5181 PHY_WRITE(mac, 0x812, ctrl | 0xb3);
5183 PHY_WRITE(mac, 0x15, 0xf300);
5185 PHY_WRITE(mac, 0x15, ctrl | 0xefa0);
5187 PHY_WRITE(mac, 0x15, ctrl | 0xefe0);
5189 PHY_WRITE(mac, 0x15, ctrl | 0xffe0);
5192 devi += PHY_READ(mac, 0x2d);
5199 bwi_rf_get_tp_ctrl2(struct bwi_mac *mac)
5205 RF_WRITE(mac, 0x52, 0);
5207 devi_min = bwi_rf_lo_devi_measure(mac, 0);
5212 RF_WRITE(mac, 0x52, i);
5214 devi = bwi_rf_lo_devi_measure(mac, 0);
5226 _bwi_rf_lo_update_11g(struct bwi_mac *mac, uint16_t orig_rf7a)
5237 struct ifnet *ifp = &mac->mac_sc->sc_if;
5255 lo = bwi_get_rf_lo(mac,
5259 lo = bwi_get_rf_lo(mac,
5284 lo = bwi_get_rf_lo(mac,
5286 if (!bwi_rf_lo_isused(mac, lo))
5294 RF_WRITE(mac, BWI_RFR_ATTEN, rf_atten);
5296 tp_ctrl2 = mac->mac_tpctl.tp_ctrl2;
5299 RF_WRITE(mac, BWI_RFR_TXPWR, tp_ctrl2);
5303 bwi_phy_set_bbp_atten(mac, bbp_atten * 2);
5308 RF_WRITE(mac, 0x7a, rf7a);
5310 lo = bwi_get_rf_lo(mac,
5312 bwi_rf_lo_measure_11g(mac, &lo_save, lo, devi_ctrl);
5323 bwi_rf_lo_measure_11g(struct bwi_mac *mac, const struct bwi_rf_lo *src_lo,
5346 RF_LO_WRITE(mac, &lo_min);
5347 devi_min = bwi_rf_lo_devi_measure(mac, devi_ctrl);
5387 RF_LO_WRITE(mac, &lo);
5388 devi = bwi_rf_lo_devi_measure(mac, devi_ctrl);
5412 bwi_rf_calc_nrssi_slope_11b(struct bwi_mac *mac)
5421 struct bwi_softc *sc = mac->mac_sc;
5422 struct bwi_rf *rf = &mac->mac_rf;
5423 struct bwi_phy *phy = &mac->mac_phy;
5434 save_rf[i] = RF_READ(mac, save_rf_regs[i]);
5436 save_phy[i] = PHY_READ(mac, save_phy_regs[i]);
5446 RF_CLRBITS(mac, 0x7a, 0xff80);
5448 RF_CLRBITS(mac, 0x7a, 0xfff0);
5449 PHY_WRITE(mac, 0x30, 0xff);
5453 PHY_WRITE(mac, 0x26, 0);
5454 PHY_SETBITS(mac, 0x15, 0x20);
5455 PHY_WRITE(mac, 0x2a, 0x8a3);
5456 RF_SETBITS(mac, 0x7a, 0x80);
5458 nrssi[0] = (int16_t)PHY_READ(mac, 0x27);
5463 RF_CLRBITS(mac, 0x7a, 0xff80);
5471 PHY_WRITE(mac, 0x20, 0x3f3f);
5472 PHY_WRITE(mac, 0x15, 0xf330);
5474 RF_WRITE(mac, 0x5a, 0x60);
5475 RF_CLRBITS(mac, 0x43, 0xff0f);
5477 PHY_WRITE(mac, 0x5a, 0x480);
5478 PHY_WRITE(mac, 0x59, 0x810);
5479 PHY_WRITE(mac, 0x58, 0xd);
5483 nrssi[1] = (int16_t)PHY_READ(mac, 0x27);
5488 PHY_WRITE(mac, save_phy_regs[0], save_phy[0]);
5489 RF_WRITE(mac, save_rf_regs[0], save_rf[0]);
5494 PHY_WRITE(mac, save_phy_regs[i], save_phy[i]);
5496 bwi_rf_workaround(mac, rf->rf_curchan);
5502 PHY_WRITE(mac, save_phy_regs[i], save_phy[i]);
5505 RF_WRITE(mac, save_rf_regs[i], save_rf[i]);
5524 bwi_rf_set_nrssi_ofs_11g(struct bwi_mac *mac)
5540 struct bwi_phy *phy = &mac->mac_phy;
5549 save_phy_comm[i] = PHY_READ(mac, save_phy_comm_regs[i]);
5551 save_rf[i] = RF_READ(mac, save_rf_regs[i]);
5553 PHY_CLRBITS(mac, 0x429, 0x8000);
5554 PHY_FILT_SETBITS(mac, 0x1, 0x3fff, 0x4000);
5555 PHY_SETBITS(mac, 0x811, 0xc);
5556 PHY_FILT_SETBITS(mac, 0x812, 0xfff3, 0x4);
5557 PHY_CLRBITS(mac, 0x802, 0x3);
5561 save_phy6[i] = PHY_READ(mac, save_phy6_regs[i]);
5563 PHY_WRITE(mac, 0x2e, 0);
5564 PHY_WRITE(mac, 0x2f, 0);
5565 PHY_WRITE(mac, 0x80f, 0);
5566 PHY_WRITE(mac, 0x810, 0);
5567 PHY_SETBITS(mac, 0x478, 0x100);
5568 PHY_SETBITS(mac, 0x801, 0x40);
5569 PHY_SETBITS(mac, 0x60, 0x40);
5570 PHY_SETBITS(mac, 0x14, 0x200);
5573 RF_SETBITS(mac, 0x7a, 0x70);
5574 RF_SETBITS(mac, 0x7a, 0x80);
5578 nrssi = bwi_nrssi_11g(mac);
5581 RF_WRITE(mac, 0x7b, i);
5583 nrssi = bwi_nrssi_11g(mac);
5592 RF_CLRBITS(mac, 0x7a, 0xff80);
5594 PHY_SETBITS(mac, 0x814, 0x1);
5595 PHY_CLRBITS(mac, 0x815, 0x1);
5596 PHY_SETBITS(mac, 0x811, 0xc);
5597 PHY_SETBITS(mac, 0x812, 0xc);
5598 PHY_SETBITS(mac, 0x811, 0x30);
5599 PHY_SETBITS(mac, 0x812, 0x30);
5600 PHY_WRITE(mac, 0x5a, 0x480);
5601 PHY_WRITE(mac, 0x59, 0x810);
5602 PHY_WRITE(mac, 0x58, 0xd);
5604 PHY_WRITE(mac, 0x3, 0x122);
5606 PHY_SETBITS(mac, 0xa, 0x2000);
5607 PHY_SETBITS(mac, 0x814, 0x4);
5608 PHY_CLRBITS(mac, 0x815, 0x4);
5609 PHY_FILT_SETBITS(mac, 0x3, 0xff9f, 0x40);
5610 RF_SETBITS(mac, 0x7a, 0xf);
5616 bwi_set_gains(mac, &gains);
5618 RF_FILT_SETBITS(mac, 0x43, 0xf0, 0xf);
5621 nrssi = bwi_nrssi_11g(mac);
5624 RF_WRITE(mac, 0x7b, i);
5626 nrssi = bwi_nrssi_11g(mac);
5636 RF_WRITE(mac, 0x7b, rf7b);
5643 PHY_WRITE(mac, save_phy6_regs[phy6_idx],
5650 PHY_WRITE(mac, save_phy_comm_regs[i], save_phy_comm[i]);
5653 RF_WRITE(mac, save_rf_regs[i], save_rf[i]);
5655 PHY_SETBITS(mac, 0x802, 0x3);
5656 PHY_SETBITS(mac, 0x429, 0x8000);
5658 bwi_set_gains(mac, NULL);
5662 PHY_WRITE(mac, save_phy6_regs[phy6_idx],
5667 PHY_WRITE(mac, save_phy_comm_regs[0], save_phy_comm[0]);
5668 PHY_WRITE(mac, save_phy_comm_regs[2], save_phy_comm[2]);
5669 PHY_WRITE(mac, save_phy_comm_regs[1], save_phy_comm[1]);
5677 bwi_rf_calc_nrssi_slope_11g(struct bwi_mac *mac)
5691 struct bwi_softc *sc = mac->mac_sc;
5692 struct bwi_phy *phy = &mac->mac_phy;
5693 struct bwi_rf *rf = &mac->mac_rf;
5705 bwi_rf_set_nrssi_ofs_11g(mac);
5707 PHY_CLRBITS(mac, 0x429, 0x8000);
5708 PHY_CLRBITS(mac, 0x802, 0x3);
5717 save_rf[i] = RF_READ(mac, save_rf_regs[i]);
5719 save_phy_comm[i] = PHY_READ(mac, save_phy_comm_regs[i]);
5726 save_phy3[i] = PHY_READ(mac, save_phy3_regs[i]);
5728 PHY_WRITE(mac, 0x2e, 0);
5729 PHY_WRITE(mac, 0x810, 0);
5733 PHY_SETBITS(mac, 0x478, 0x100);
5734 PHY_SETBITS(mac, 0x810, 0x40);
5736 PHY_CLRBITS(mac, 0x810, 0x40);
5738 PHY_SETBITS(mac, 0x60, 0x40);
5739 PHY_SETBITS(mac, 0x14, 0x200);
5745 RF_SETBITS(mac, 0x7a, 0x70);
5751 bwi_set_gains(mac, &gains);
5753 RF_CLRBITS(mac, 0x7a, 0xff08);
5755 PHY_FILT_SETBITS(mac, 0x811, 0xffcf, 0x30);
5756 PHY_FILT_SETBITS(mac, 0x812, 0xffcf, 0x10);
5759 RF_SETBITS(mac, 0x7a, 0x80);
5761 nrssi[0] = bwi_nrssi_11g(mac);
5766 RF_CLRBITS(mac, 0x7a, 0xff80);
5768 PHY_FILT_SETBITS(mac, 0x3, 0xff9f, 0x40);
5771 RF_SETBITS(mac, 0x7a, 0xf);
5772 PHY_WRITE(mac, 0x15, 0xf330);
5774 PHY_FILT_SETBITS(mac, 0x812, 0xffcf, 0x20);
5775 PHY_FILT_SETBITS(mac, 0x811, 0xffcf, 0x20);
5782 bwi_set_gains(mac, &gains);
5785 RF_WRITE(mac, 0x43, 0x1f);
5787 RF_FILT_SETBITS(mac, 0x52, 0xff0f, 0x60);
5788 RF_FILT_SETBITS(mac, 0x43, 0xfff0, 0x9);
5790 PHY_WRITE(mac, 0x5a, 0x480);
5791 PHY_WRITE(mac, 0x59, 0x810);
5792 PHY_WRITE(mac, 0x58, 0xd);
5795 nrssi[1] = bwi_nrssi_11g(mac);
5814 PHY_WRITE(mac, save_phy3_regs[phy3_idx],
5819 PHY_CLRBITS(mac, 0x812, 0x30);
5820 PHY_CLRBITS(mac, 0x811, 0x30);
5824 RF_WRITE(mac, save_rf_regs[i], save_rf[i]);
5831 PHY_WRITE(mac, save_phy_comm_regs[i], save_phy_comm[i]);
5833 bwi_rf_workaround(mac, rf->rf_curchan);
5834 PHY_SETBITS(mac, 0x802, 0x3);
5835 bwi_set_gains(mac, NULL);
5836 PHY_SETBITS(mac, 0x429, 0x8000);
5840 PHY_WRITE(mac, save_phy3_regs[phy3_idx],
5845 bwi_rf_init_sw_nrssi_table(mac);
5846 bwi_rf_set_nrssi_thr_11g(mac);
5854 bwi_rf_init_sw_nrssi_table(struct bwi_mac *mac)
5856 struct bwi_rf *rf = &mac->mac_rf;
5874 bwi_rf_init_hw_nrssi_table(struct bwi_mac *mac, uint16_t adjust)
5881 val = bwi_nrssi_read(mac, i);
5889 bwi_nrssi_write(mac, i, val);
5894 bwi_rf_set_nrssi_thr_11b(struct bwi_mac *mac)
5896 struct bwi_rf *rf = &mac->mac_rf;
5900 (mac->mac_sc->sc_card_flags & BWI_CARD_F_SW_NRSSI) == 0)
5918 PHY_READ(mac, BWI_PHYR_NRSSI_THR_11B); /* dummy read */
5919 PHY_WRITE(mac, BWI_PHYR_NRSSI_THR_11B, (((uint16_t)thr) << 8) | 0x1c);
5922 PHY_WRITE(mac, 0x87, 0xe0d);
5923 PHY_WRITE(mac, 0x86, 0xc0b);
5924 PHY_WRITE(mac, 0x85, 0xa09);
5925 PHY_WRITE(mac, 0x84, 0x808);
5926 PHY_WRITE(mac, 0x83, 0x808);
5927 PHY_WRITE(mac, 0x82, 0x604);
5928 PHY_WRITE(mac, 0x81, 0x302);
5929 PHY_WRITE(mac, 0x80, 0x100);
5952 bwi_rf_set_nrssi_thr_11g(struct bwi_mac *mac)
5960 if ((mac->mac_phy.phy_flags & BWI_PHY_F_LINKED) == 0 ||
5961 (mac->mac_sc->sc_card_flags & BWI_CARD_F_SW_NRSSI) == 0) {
5964 nrssi = bwi_nrssi_read(mac, 0x20);
5977 thr1 = _nrssi_threshold(&mac->mac_rf, 0x11);
5978 thr2 = _nrssi_threshold(&mac->mac_rf, 0xe);
5985 PHY_FILT_SETBITS(mac, BWI_PHYR_NRSSI_THR_11G, 0xf000, thr);
5991 bwi_rf_clear_tssi(struct bwi_mac *mac)
5994 if (mac->mac_phy.phy_mode == IEEE80211_MODE_11A) {
6004 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ,
6009 MOBJ_WRITE_2(mac, BWI_COMM_MOBJ,
6040 bwi_rf_on_11a(struct bwi_mac *mac)
6046 bwi_rf_on_11bg(struct bwi_mac *mac)
6048 struct bwi_phy *phy = &mac->mac_phy;
6050 PHY_WRITE(mac, 0x15, 0x8000);
6051 PHY_WRITE(mac, 0x15, 0xcc00);
6053 PHY_WRITE(mac, 0x15, 0xc0);
6055 PHY_WRITE(mac, 0x15, 0);
6057 bwi_rf_set_chan(mac, 6 /* XXX */, 1);
6061 bwi_rf_set_ant_mode(struct bwi_mac *mac, int ant_mode)
6063 struct bwi_softc *sc = mac->mac_sc;
6064 struct bwi_phy *phy = &mac->mac_phy;
6071 HFLAGS_CLRBITS(mac, BWI_HFLAG_AUTO_ANTDIV);
6075 if (mac->mac_rev == 2)
6080 PHY_FILT_SETBITS(mac, 0x3e2, 0xfe7f, val);
6084 PHY_FILT_SETBITS(mac, 0x401, 0x7e7f, val);
6087 PHY_CLRBITS(mac, 0x42b, 0x100);
6093 PHY_SETBITS(mac, 0x48c, 0x2000);
6095 PHY_CLRBITS(mac, 0x48c, 0x2000);
6098 PHY_SETBITS(mac, 0x461, 0x10);
6099 PHY_FILT_SETBITS(mac, 0x4ad, 0xff00, 0x15);
6101 PHY_WRITE(mac, 0x427, 0x8);
6103 PHY_FILT_SETBITS(mac, 0x427,
6108 PHY_WRITE(mac, 0x49b, 0xdc);
6115 HFLAGS_SETBITS(mac, BWI_HFLAG_AUTO_ANTDIV);
6118 MOBJ_FILT_SETBITS_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_TX_BEACON,
6120 MOBJ_FILT_SETBITS_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_TX_ACK,
6122 MOBJ_FILT_SETBITS_2(mac, BWI_COMM_MOBJ, BWI_COMM_MOBJ_TX_PROBE_RESP,
6130 if (mac->mac_rev < 5)
6133 mac->mac_rf.rf_ant_mode = ant_mode;
6137 bwi_rf_get_latest_tssi(struct bwi_mac *mac, int8_t tssi[], uint16_t ofs)
6144 val = MOBJ_READ_2(mac, BWI_COMM_MOBJ, ofs + i);
6158 bwi_rf_tssi2dbm(struct bwi_mac *mac, int8_t tssi, int8_t *txpwr)
6160 struct bwi_rf *rf = &mac->mac_rf;
6179 bwi_rf_calc_rssi_bcm2050(struct bwi_mac *mac, const struct bwi_rxbuf_hdr *hdr)
6200 if (mac->mac_sc->sc_card_flags & BWI_CARD_F_SW_NRSSI) {
6201 struct bwi_rf *rf = &mac->mac_rf;
6213 if (mac->mac_phy.phy_mode != IEEE80211_MODE_11G)
6224 DPRINTF(mac->mac_sc, BWI_DBG_RF | BWI_DBG_RX,
6266 if (mac->mac_sc->sc_card_flags & BWI_CARD_F_SW_NRSSI) {
6267 struct bwi_rf *rf = &mac->mac_rf;
6279 if (mac->mac_phy.phy_mode != IEEE80211_MODE_11G)
6289 bwi_rf_calc_rssi_bcm2053(struct bwi_mac *mac, const struct bwi_rxbuf_hdr *hdr)
6306 bwi_rf_calc_rssi_bcm2060(struct bwi_mac *mac, const struct bwi_rxbuf_hdr *hdr)
6318 bwi_rf_lo_measure_11b(struct bwi_mac *mac)
6325 PHY_WRITE(mac, 0x15, 0xafa0);
6327 PHY_WRITE(mac, 0x15, 0xefa0);
6329 PHY_WRITE(mac, 0x15, 0xffa0);
6332 val += PHY_READ(mac, 0x2c);
6339 bwi_rf_lo_update_11b(struct bwi_mac *mac)
6341 struct bwi_softc *sc = mac->mac_sc;
6342 struct bwi_rf *rf = &mac->mac_rf;
6356 SAVE_PHY_REG(mac, &regs, 15);
6357 rf52 = RF_READ(mac, 0x52) & 0xfff0;
6359 SAVE_PHY_REG(mac, &regs, 0a);
6360 SAVE_PHY_REG(mac, &regs, 2a);
6361 SAVE_PHY_REG(mac, &regs, 35);
6362 SAVE_PHY_REG(mac, &regs, 03);
6363 SAVE_PHY_REG(mac, &regs, 01);
6364 SAVE_PHY_REG(mac, &regs, 30);
6366 SAVE_RF_REG(mac, &regs, 43);
6367 SAVE_RF_REG(mac, &regs, 7a);
6371 SAVE_RF_REG(mac, &regs, 52);
6374 PHY_WRITE(mac, 0x30, 0xff);
6376 PHY_WRITE(mac, 0x35, regs.phy_35 & 0xff7f);
6377 RF_WRITE(mac, 0x7a, regs.rf_7a & 0xfff0);
6380 PHY_WRITE(mac, 0x15, 0xb000);
6383 PHY_WRITE(mac, 0x2b, 0x203);
6384 PHY_WRITE(mac, 0x2a, 0x8a3);
6386 PHY_WRITE(mac, 0x2b, 0x1402);
6396 RF_WRITE(mac, 0x52, rf52 | i);
6397 bwi_rf_lo_measure_11b(mac); /* Ignore return value */
6400 RF_WRITE(mac, 0x52, rf52 | i);
6402 val = bwi_rf_lo_measure_11b(mac) / 10;
6408 RF_WRITE(mac, 0x52, rf52 | rf_val);
6425 PHY_WRITE(mac, 0x2f, phy2f);
6427 val = bwi_rf_lo_measure_11b(mac) / 10;
6434 PHY_WRITE(mac, 0x2f, phy_val + 0x101);
6440 RESTORE_PHY_REG(mac, &regs, 0a);
6441 RESTORE_PHY_REG(mac, &regs, 2a);
6442 RESTORE_PHY_REG(mac, &regs, 35);
6443 RESTORE_PHY_REG(mac, &regs, 03);
6444 RESTORE_PHY_REG(mac, &regs, 01);
6445 RESTORE_PHY_REG(mac, &regs, 30);
6447 RESTORE_RF_REG(mac, &regs, 43);
6448 RESTORE_RF_REG(mac, &regs, 7a);
6450 RF_FILT_SETBITS(mac, 0x52, 0xf, regs.rf_52);
6454 RESTORE_PHY_REG(mac, &regs, 15);
6456 bwi_rf_workaround(mac, rf->rf_curchan);
6983 bwi_bus_init(struct bwi_softc *sc, struct bwi_mac *mac)
6990 KASSERT(sc->sc_cur_regwin == &mac->mac_regwin);
7014 mac_mask = 1 << mac->mac_id;
7287 struct bwi_mac *mac;
7302 mac = &sc->sc_mac[0];
7303 error = bwi_regwin_switch(sc, &mac->mac_regwin, NULL);
7307 error = bwi_mac_init(mac);
7318 bwi_mac_reset_hwkeys(mac);
7320 if ((mac->mac_flags & BWI_MAC_F_HAS_TXSTATS) == 0) {
7339 if (mac->mac_phy.phy_mode == IEEE80211_MODE_11G)
7340 bwi_mac_updateslot(mac, 1);
7343 error = bwi_mac_start(mac);
7394 struct bwi_mac *mac;
7399 mac = (struct bwi_mac *)sc->sc_cur_regwin;
7412 bwi_mac_set_promisc(mac, promisc);
7652 struct bwi_mac *mac;
7664 mac = (struct bwi_mac *)sc->sc_cur_regwin;
7670 bwi_mac_stop(mac);
7676 mac = &sc->sc_mac[i];
7677 if ((mac->mac_flags & BWI_MAC_F_INITED) == 0)
7680 error = bwi_regwin_switch(sc, &mac->mac_regwin, &old_rw);
7684 bwi_mac_shutdown(mac);
7742 struct bwi_mac *mac;
7749 mac = (struct bwi_mac *)sc->sc_cur_regwin;
7752 bwi_mac_calibrate_txpower(mac, BWI_TXPWR_INIT);
8025 struct bwi_mac *mac = &sc->sc_mac[0];
8030 if (mac->mac_rev < 8) {
8033 mac->mac_rev);
8037 has_txstats = (mac->mac_flags & BWI_MAC_F_HAS_TXSTATS) != 0;
8809 struct bwi_mac *mac;
8814 mac = (struct bwi_mac *)sc->sc_cur_regwin;
8818 bwi_rf_set_chan(mac, chan, 0);
9618 struct bwi_mac *mac;
9633 mac = (struct bwi_mac *)sc->sc_cur_regwin;
9738 phy_ctrl = __SHIFTIN(mac->mac_rf.rf_ant_mode,
10277 struct bwi_mac *mac;
10284 mac = (struct bwi_mac *)sc->sc_cur_regwin;
10300 TMPLT_WRITE_4(mac, 0x20 + (i * sizeof(val)), val);
10309 struct bwi_mac *mac;
10317 mac = (struct bwi_mac *)sc->sc_cur_regwin;
10319 bwi_mac_updateslot(mac, (ic->ic_flags & IEEE80211_F_SHSLOT));
10342 struct bwi_mac *mac;
10346 mac = (struct bwi_mac *)sc->sc_cur_regwin;
10349 bwi_mac_calibrate_txpower(mac, sc->sc_txpwrcb_type);
10391 struct bwi_mac *mac;
10394 mac = (struct bwi_mac *)sc->sc_cur_regwin;
10396 return (bwi_rf_calc_rssi(mac, hdr));