Lines Matching refs:sc

273 static int	iwk_eep_load(iwk_sc_t *sc);
274 static void iwk_get_mac_from_eep(iwk_sc_t *sc);
275 static int iwk_eep_sem_down(iwk_sc_t *sc);
276 static void iwk_eep_sem_up(iwk_sc_t *sc);
292 static int32_t iwk_curr_tempera(iwk_sc_t *sc);
293 static int iwk_tx_power_calibration(iwk_sc_t *sc);
294 static inline int iwk_is_24G_band(iwk_sc_t *sc);
295 static inline int iwk_is_fat_channel(iwk_sc_t *sc);
297 static struct iwk_eep_channel *iwk_get_eep_channel(iwk_sc_t *sc,
300 static int32_t iwk_band_number(iwk_sc_t *sc, uint16_t channel);
304 static int iwk_channel_interpolate(iwk_sc_t *sc, uint16_t channel,
309 static int iwk_txpower_table_cmd_init(iwk_sc_t *sc,
311 static void iwk_statistics_notify(iwk_sc_t *sc, iwk_rx_desc_t *desc);
312 static int iwk_is_associated(iwk_sc_t *sc);
313 static int iwk_rxgain_diff_init(iwk_sc_t *sc);
314 static int iwk_rxgain_diff(iwk_sc_t *sc);
315 static int iwk_rx_sens_init(iwk_sc_t *sc);
316 static int iwk_rx_sens(iwk_sc_t *sc);
317 static int iwk_cck_sens(iwk_sc_t *sc, uint32_t actual_rx_time);
318 static int iwk_ofdm_sens(iwk_sc_t *sc, uint32_t actual_rx_time);
346 static void iwk_destroy_locks(iwk_sc_t *sc);
348 static void iwk_thread(iwk_sc_t *sc);
352 static int iwk_fast_recover(iwk_sc_t *sc);
474 iwk_sc_t *sc; in iwk_attach() local
489 sc = ddi_get_soft_state(iwk_soft_state_p, in iwk_attach()
491 ASSERT(sc != NULL); in iwk_attach()
493 mutex_enter(&sc->sc_glock); in iwk_attach()
494 sc->sc_flags &= ~IWK_F_SUSPEND; in iwk_attach()
495 mutex_exit(&sc->sc_glock); in iwk_attach()
497 if (sc->sc_flags & IWK_F_RUNNING) in iwk_attach()
498 (void) iwk_init(sc); in iwk_attach()
500 mutex_enter(&sc->sc_glock); in iwk_attach()
501 sc->sc_flags |= IWK_F_LAZY_RESUME; in iwk_attach()
502 mutex_exit(&sc->sc_glock); in iwk_attach()
518 sc = ddi_get_soft_state(iwk_soft_state_p, instance); in iwk_attach()
519 sc->sc_dip = dip; in iwk_attach()
521 err = ddi_regs_map_setup(dip, 0, &sc->sc_cfg_base, 0, 0, in iwk_attach()
522 &iwk_reg_accattr, &sc->sc_cfg_handle); in iwk_attach()
528 sc->sc_rev = ddi_get8(sc->sc_cfg_handle, in iwk_attach()
529 (uint8_t *)(sc->sc_cfg_base + PCI_CONF_REVID)); in iwk_attach()
530 ddi_put8(sc->sc_cfg_handle, (uint8_t *)(sc->sc_cfg_base + 0x41), 0); in iwk_attach()
531 sc->sc_clsz = ddi_get16(sc->sc_cfg_handle, in iwk_attach()
532 (uint16_t *)(sc->sc_cfg_base + PCI_CONF_CACHE_LINESZ)); in iwk_attach()
533 if (!sc->sc_clsz) in iwk_attach()
534 sc->sc_clsz = 16; in iwk_attach()
535 sc->sc_clsz = (sc->sc_clsz << 2); in iwk_attach()
536 sc->sc_dmabuf_sz = roundup(0x1000 + sizeof (struct ieee80211_frame) + in iwk_attach()
539 IEEE80211_WEP_CRCLEN), sc->sc_clsz); in iwk_attach()
543 err = ddi_regs_map_setup(dip, 1, &sc->sc_base, in iwk_attach()
544 0, 0, &iwk_reg_accattr, &sc->sc_handle); in iwk_attach()
565 sc->sc_intr_htable = kmem_zalloc(sizeof (ddi_intr_handle_t), KM_SLEEP); in iwk_attach()
567 err = ddi_intr_alloc(dip, sc->sc_intr_htable, DDI_INTR_TYPE_FIXED, 0, in iwk_attach()
575 err = ddi_intr_get_pri(sc->sc_intr_htable[0], &sc->sc_intr_pri); in iwk_attach()
582 mutex_init(&sc->sc_glock, NULL, MUTEX_DRIVER, in iwk_attach()
583 DDI_INTR_PRI(sc->sc_intr_pri)); in iwk_attach()
584 mutex_init(&sc->sc_tx_lock, NULL, MUTEX_DRIVER, in iwk_attach()
585 DDI_INTR_PRI(sc->sc_intr_pri)); in iwk_attach()
586 mutex_init(&sc->sc_mt_lock, NULL, MUTEX_DRIVER, in iwk_attach()
587 DDI_INTR_PRI(sc->sc_intr_pri)); in iwk_attach()
588 mutex_init(&sc->sc_ibss.node_tb_lock, NULL, MUTEX_DRIVER, in iwk_attach()
589 DDI_INTR_PRI(sc->sc_intr_pri)); in iwk_attach()
591 cv_init(&sc->sc_fw_cv, NULL, CV_DRIVER, NULL); in iwk_attach()
592 cv_init(&sc->sc_cmd_cv, NULL, CV_DRIVER, NULL); in iwk_attach()
593 cv_init(&sc->sc_tx_cv, "tx-ring", CV_DRIVER, NULL); in iwk_attach()
597 cv_init(&sc->sc_mt_cv, NULL, CV_DRIVER, NULL); in iwk_attach()
598 sc->sc_mf_thread = NULL; in iwk_attach()
599 sc->sc_mf_thread_switch = 0; in iwk_attach()
604 err = iwk_alloc_shared(sc); in iwk_attach()
614 err = iwk_alloc_kw(sc); in iwk_attach()
624 err = iwk_preinit(sc); in iwk_attach()
632 err = iwk_eep_load(sc); /* get hardware configurations from eeprom */ in iwk_attach()
638 if (LE_16(sc->sc_eep_map.calib_version) < EEP_TX_POWER_VERSION_NEW) { in iwk_attach()
643 iwk_get_mac_from_eep(sc); in iwk_attach()
645 err = iwk_ring_init(sc); in iwk_attach()
652 sc->sc_hdr = (iwk_firmware_hdr_t *)iwk_fw_bin; in iwk_attach()
654 err = iwk_alloc_fw_dma(sc); in iwk_attach()
665 ic = &sc->sc_ic; in iwk_attach()
716 sc->sc_newstate = ic->ic_newstate; in iwk_attach()
719 sc->sc_recv_mgmt = ic->ic_recv_mgmt; in iwk_attach()
729 err = ddi_intr_add_softint(dip, &sc->sc_soft_hdl, DDI_INTR_SOFTPRI_MAX, in iwk_attach()
730 iwk_rx_softintr, (caddr_t)sc); in iwk_attach()
740 err = ddi_intr_add_handler(sc->sc_intr_htable[0], iwk_intr, in iwk_attach()
741 (caddr_t)sc, NULL); in iwk_attach()
748 err = ddi_intr_enable(sc->sc_intr_htable[0]); in iwk_attach()
770 macp->m_driver = sc; in iwk_attach()
809 sc->sc_mf_thread_switch = 1; in iwk_attach()
810 if (sc->sc_mf_thread == NULL) in iwk_attach()
811 sc->sc_mf_thread = thread_create((caddr_t)NULL, 0, in iwk_attach()
812 iwk_thread, sc, 0, &p0, TS_RUN, minclsyspri); in iwk_attach()
814 sc->sc_flags |= IWK_F_ATTACHED; in iwk_attach()
818 (void) ddi_intr_disable(sc->sc_intr_htable[0]); in iwk_attach()
820 (void) ddi_intr_remove_handler(sc->sc_intr_htable[0]); in iwk_attach()
823 (void) ddi_intr_remove_softint(sc->sc_soft_hdl); in iwk_attach()
824 sc->sc_soft_hdl = NULL; in iwk_attach()
828 iwk_free_fw_dma(sc); in iwk_attach()
830 iwk_ring_free(sc); in iwk_attach()
832 iwk_free_kw(sc); in iwk_attach()
834 iwk_free_shared(sc); in iwk_attach()
836 iwk_destroy_locks(sc); in iwk_attach()
838 (void) ddi_intr_free(sc->sc_intr_htable[0]); in iwk_attach()
840 kmem_free(sc->sc_intr_htable, sizeof (ddi_intr_handle_t)); in iwk_attach()
842 ddi_regs_map_free(&sc->sc_handle); in iwk_attach()
844 ddi_regs_map_free(&sc->sc_cfg_handle); in iwk_attach()
854 iwk_sc_t *sc; in iwk_detach() local
857 sc = ddi_get_soft_state(iwk_soft_state_p, ddi_get_instance(dip)); in iwk_detach()
858 ASSERT(sc != NULL); in iwk_detach()
864 mutex_enter(&sc->sc_glock); in iwk_detach()
865 sc->sc_flags |= IWK_F_SUSPEND; in iwk_detach()
866 mutex_exit(&sc->sc_glock); in iwk_detach()
867 if (sc->sc_flags & IWK_F_RUNNING) { in iwk_detach()
868 iwk_stop(sc); in iwk_detach()
877 if (!(sc->sc_flags & IWK_F_ATTACHED)) in iwk_detach()
880 err = mac_disable(sc->sc_ic.ic_mach); in iwk_detach()
887 mutex_enter(&sc->sc_mt_lock); in iwk_detach()
888 sc->sc_mf_thread_switch = 0; in iwk_detach()
889 while (sc->sc_mf_thread != NULL) { in iwk_detach()
890 if (cv_wait_sig(&sc->sc_mt_cv, &sc->sc_mt_lock) == 0) in iwk_detach()
893 mutex_exit(&sc->sc_mt_lock); in iwk_detach()
895 iwk_stop(sc); in iwk_detach()
901 (void) mac_unregister(sc->sc_ic.ic_mach); in iwk_detach()
903 mutex_enter(&sc->sc_glock); in iwk_detach()
904 iwk_free_fw_dma(sc); in iwk_detach()
905 iwk_ring_free(sc); in iwk_detach()
906 iwk_free_kw(sc); in iwk_detach()
907 iwk_free_shared(sc); in iwk_detach()
908 mutex_exit(&sc->sc_glock); in iwk_detach()
910 (void) ddi_intr_disable(sc->sc_intr_htable[0]); in iwk_detach()
911 (void) ddi_intr_remove_handler(sc->sc_intr_htable[0]); in iwk_detach()
912 (void) ddi_intr_free(sc->sc_intr_htable[0]); in iwk_detach()
913 kmem_free(sc->sc_intr_htable, sizeof (ddi_intr_handle_t)); in iwk_detach()
915 (void) ddi_intr_remove_softint(sc->sc_soft_hdl); in iwk_detach()
916 sc->sc_soft_hdl = NULL; in iwk_detach()
921 ieee80211_detach(&sc->sc_ic); in iwk_detach()
923 iwk_destroy_locks(sc); in iwk_detach()
925 ddi_regs_map_free(&sc->sc_handle); in iwk_detach()
926 ddi_regs_map_free(&sc->sc_cfg_handle); in iwk_detach()
946 iwk_sc_t *sc; in iwk_quiesce() local
948 sc = ddi_get_soft_state(iwk_soft_state_p, ddi_get_instance(dip)); in iwk_quiesce()
949 ASSERT(sc != NULL); in iwk_quiesce()
955 sc->sc_flags |= IWK_F_QUIESCED; in iwk_quiesce()
957 iwk_stop(sc); in iwk_quiesce()
963 iwk_destroy_locks(iwk_sc_t *sc) in iwk_destroy_locks() argument
965 cv_destroy(&sc->sc_mt_cv); in iwk_destroy_locks()
966 mutex_destroy(&sc->sc_mt_lock); in iwk_destroy_locks()
967 cv_destroy(&sc->sc_tx_cv); in iwk_destroy_locks()
968 cv_destroy(&sc->sc_cmd_cv); in iwk_destroy_locks()
969 cv_destroy(&sc->sc_fw_cv); in iwk_destroy_locks()
970 mutex_destroy(&sc->sc_tx_lock); in iwk_destroy_locks()
971 mutex_destroy(&sc->sc_glock); in iwk_destroy_locks()
978 iwk_alloc_dma_mem(iwk_sc_t *sc, size_t memsize, in iwk_alloc_dma_mem() argument
988 err = ddi_dma_alloc_handle(sc->sc_dip, dma_attr_p, in iwk_alloc_dma_mem()
1055 iwk_alloc_fw_dma(iwk_sc_t *sc) in iwk_alloc_fw_dma() argument
1065 t = (char *)(sc->sc_hdr + 1); in iwk_alloc_fw_dma()
1066 err = iwk_alloc_dma_mem(sc, LE_32(sc->sc_hdr->textsz), in iwk_alloc_fw_dma()
1069 &sc->sc_dma_fw_text); in iwk_alloc_fw_dma()
1070 dma_p = &sc->sc_dma_fw_text; in iwk_alloc_fw_dma()
1079 (void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->textsz)); in iwk_alloc_fw_dma()
1081 t += LE_32(sc->sc_hdr->textsz); in iwk_alloc_fw_dma()
1082 err = iwk_alloc_dma_mem(sc, LE_32(sc->sc_hdr->datasz), in iwk_alloc_fw_dma()
1085 &sc->sc_dma_fw_data); in iwk_alloc_fw_dma()
1086 dma_p = &sc->sc_dma_fw_data; in iwk_alloc_fw_dma()
1095 (void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->datasz)); in iwk_alloc_fw_dma()
1097 err = iwk_alloc_dma_mem(sc, LE_32(sc->sc_hdr->datasz), in iwk_alloc_fw_dma()
1100 &sc->sc_dma_fw_data_bak); in iwk_alloc_fw_dma()
1101 dma_p = &sc->sc_dma_fw_data_bak; in iwk_alloc_fw_dma()
1111 (void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->datasz)); in iwk_alloc_fw_dma()
1113 t += LE_32(sc->sc_hdr->datasz); in iwk_alloc_fw_dma()
1114 err = iwk_alloc_dma_mem(sc, LE_32(sc->sc_hdr->init_textsz), in iwk_alloc_fw_dma()
1117 &sc->sc_dma_fw_init_text); in iwk_alloc_fw_dma()
1118 dma_p = &sc->sc_dma_fw_init_text; in iwk_alloc_fw_dma()
1128 (void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->init_textsz)); in iwk_alloc_fw_dma()
1130 t += LE_32(sc->sc_hdr->init_textsz); in iwk_alloc_fw_dma()
1131 err = iwk_alloc_dma_mem(sc, LE_32(sc->sc_hdr->init_datasz), in iwk_alloc_fw_dma()
1134 &sc->sc_dma_fw_init_data); in iwk_alloc_fw_dma()
1135 dma_p = &sc->sc_dma_fw_init_data; in iwk_alloc_fw_dma()
1145 (void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->init_datasz)); in iwk_alloc_fw_dma()
1147 sc->sc_boot = t + LE_32(sc->sc_hdr->init_datasz); in iwk_alloc_fw_dma()
1153 iwk_free_fw_dma(iwk_sc_t *sc) in iwk_free_fw_dma() argument
1155 iwk_free_dma_mem(&sc->sc_dma_fw_text); in iwk_free_fw_dma()
1156 iwk_free_dma_mem(&sc->sc_dma_fw_data); in iwk_free_fw_dma()
1157 iwk_free_dma_mem(&sc->sc_dma_fw_data_bak); in iwk_free_fw_dma()
1158 iwk_free_dma_mem(&sc->sc_dma_fw_init_text); in iwk_free_fw_dma()
1159 iwk_free_dma_mem(&sc->sc_dma_fw_init_data); in iwk_free_fw_dma()
1166 iwk_alloc_shared(iwk_sc_t *sc) in iwk_alloc_shared() argument
1172 err = iwk_alloc_dma_mem(sc, sizeof (iwk_shared_t), in iwk_alloc_shared()
1175 &sc->sc_dma_sh); in iwk_alloc_shared()
1178 sc->sc_shared = (iwk_shared_t *)sc->sc_dma_sh.mem_va; in iwk_alloc_shared()
1180 dma_p = &sc->sc_dma_sh; in iwk_alloc_shared()
1187 iwk_free_shared(sc); in iwk_alloc_shared()
1192 iwk_free_shared(iwk_sc_t *sc) in iwk_free_shared() argument
1194 iwk_free_dma_mem(&sc->sc_dma_sh); in iwk_free_shared()
1201 iwk_alloc_kw(iwk_sc_t *sc) in iwk_alloc_kw() argument
1207 err = iwk_alloc_dma_mem(sc, IWK_KW_SIZE, in iwk_alloc_kw()
1210 &sc->sc_dma_kw); in iwk_alloc_kw()
1214 dma_p = &sc->sc_dma_kw; in iwk_alloc_kw()
1221 iwk_free_kw(sc); in iwk_alloc_kw()
1226 iwk_free_kw(iwk_sc_t *sc) in iwk_free_kw() argument
1228 iwk_free_dma_mem(&sc->sc_dma_kw); in iwk_free_kw()
1232 iwk_alloc_rx_ring(iwk_sc_t *sc) in iwk_alloc_rx_ring() argument
1239 ring = &sc->sc_rxq; in iwk_alloc_rx_ring()
1242 err = iwk_alloc_dma_mem(sc, RX_QUEUE_SIZE * sizeof (uint32_t), in iwk_alloc_rx_ring()
1261 err = iwk_alloc_dma_mem(sc, sc->sc_dmabuf_sz, in iwk_alloc_rx_ring()
1288 iwk_free_rx_ring(sc); in iwk_alloc_rx_ring()
1293 iwk_reset_rx_ring(iwk_sc_t *sc) in iwk_reset_rx_ring() argument
1297 iwk_mac_access_enter(sc); in iwk_reset_rx_ring()
1298 IWK_WRITE(sc, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwk_reset_rx_ring()
1300 if (IWK_READ(sc, FH_MEM_RSSR_RX_STATUS_REG) & (1 << 24)) in iwk_reset_rx_ring()
1308 iwk_mac_access_exit(sc); in iwk_reset_rx_ring()
1310 sc->sc_rxq.cur = 0; in iwk_reset_rx_ring()
1314 iwk_free_rx_ring(iwk_sc_t *sc) in iwk_free_rx_ring() argument
1319 if (sc->sc_rxq.data[i].dma_data.dma_hdl) in iwk_free_rx_ring()
1320 IWK_DMA_SYNC(sc->sc_rxq.data[i].dma_data, in iwk_free_rx_ring()
1322 iwk_free_dma_mem(&sc->sc_rxq.data[i].dma_data); in iwk_free_rx_ring()
1325 if (sc->sc_rxq.dma_desc.dma_hdl) in iwk_free_rx_ring()
1326 IWK_DMA_SYNC(sc->sc_rxq.dma_desc, DDI_DMA_SYNC_FORDEV); in iwk_free_rx_ring()
1327 iwk_free_dma_mem(&sc->sc_rxq.dma_desc); in iwk_free_rx_ring()
1331 iwk_alloc_tx_ring(iwk_sc_t *sc, iwk_tx_ring_t *ring, in iwk_alloc_tx_ring() argument
1348 err = iwk_alloc_dma_mem(sc, in iwk_alloc_tx_ring()
1366 err = iwk_alloc_dma_mem(sc, in iwk_alloc_tx_ring()
1396 err = iwk_alloc_dma_mem(sc, sc->sc_dmabuf_sz, in iwk_alloc_tx_ring()
1426 iwk_free_tx_ring(sc, ring); in iwk_alloc_tx_ring()
1431 iwk_reset_tx_ring(iwk_sc_t *sc, iwk_tx_ring_t *ring) in iwk_reset_tx_ring() argument
1436 iwk_mac_access_enter(sc); in iwk_reset_tx_ring()
1438 IWK_WRITE(sc, IWK_FH_TCSR_CHNL_TX_CONFIG_REG(ring->qid), 0); in iwk_reset_tx_ring()
1440 if (IWK_READ(sc, IWK_FH_TSSR_TX_STATUS_REG) & in iwk_reset_tx_ring()
1449 iwk_mac_access_exit(sc); in iwk_reset_tx_ring()
1462 iwk_free_tx_ring(iwk_sc_t *sc, iwk_tx_ring_t *ring) in iwk_free_tx_ring() argument
1486 iwk_ring_init(iwk_sc_t *sc) in iwk_ring_init() argument
1493 err = iwk_alloc_tx_ring(sc, &sc->sc_txq[i], TFD_TX_CMD_SLOTS, in iwk_ring_init()
1498 err = iwk_alloc_tx_ring(sc, &sc->sc_txq[IWK_CMD_QUEUE_NUM], in iwk_ring_init()
1502 err = iwk_alloc_rx_ring(sc); in iwk_ring_init()
1512 iwk_ring_free(iwk_sc_t *sc) in iwk_ring_free() argument
1516 iwk_free_rx_ring(sc); in iwk_ring_free()
1518 iwk_free_tx_ring(sc, &sc->sc_txq[i]); in iwk_ring_free()
1549 iwk_sc_t *sc = (iwk_sc_t *)ic; in iwk_newstate() local
1554 mutex_enter(&sc->sc_glock); in iwk_newstate()
1562 sc->sc_flags |= IWK_F_SCANNING; in iwk_newstate()
1563 sc->sc_scan_pending = 0; in iwk_newstate()
1564 iwk_set_led(sc, 2, 10, 2); in iwk_newstate()
1570 sc->sc_config.assoc_id = 0; in iwk_newstate()
1571 sc->sc_config.filter_flags &= in iwk_newstate()
1575 "flags %x filter_flags %x\n", sc->sc_config.chan, in iwk_newstate()
1576 sc->sc_config.flags, sc->sc_config.filter_flags)); in iwk_newstate()
1578 err = iwk_cmd(sc, REPLY_RXON, &sc->sc_config, in iwk_newstate()
1583 sc->sc_flags &= ~IWK_F_SCANNING; in iwk_newstate()
1584 mutex_exit(&sc->sc_glock); in iwk_newstate()
1592 err = iwk_cmd(sc, REPLY_ADD_STA, &node, in iwk_newstate()
1597 sc->sc_flags &= ~IWK_F_SCANNING; in iwk_newstate()
1598 mutex_exit(&sc->sc_glock); in iwk_newstate()
1607 sc->sc_flags |= IWK_F_SCANNING; in iwk_newstate()
1608 sc->sc_scan_pending = 0; in iwk_newstate()
1610 iwk_set_led(sc, 2, 10, 2); in iwk_newstate()
1613 mutex_exit(&sc->sc_glock); in iwk_newstate()
1615 err = sc->sc_newstate(ic, nstate, arg); in iwk_newstate()
1616 mutex_enter(&sc->sc_glock); in iwk_newstate()
1617 if ((err != 0) || ((err = iwk_scan(sc)) != 0)) { in iwk_newstate()
1620 sc->sc_flags &= ~IWK_F_SCANNING; in iwk_newstate()
1623 mutex_exit(&sc->sc_glock); in iwk_newstate()
1629 sc->sc_clk = 0; in iwk_newstate()
1634 sc->sc_flags &= ~IWK_F_SCANNING; in iwk_newstate()
1638 sc->sc_config.assoc_id = 0; in iwk_newstate()
1639 sc->sc_config.filter_flags &= ~LE_32(RXON_FILTER_ASSOC_MSK); in iwk_newstate()
1646 if ((err = iwk_hw_set_before_auth(sc)) != 0) { in iwk_newstate()
1649 mutex_exit(&sc->sc_glock); in iwk_newstate()
1656 sc->sc_flags &= ~IWK_F_SCANNING; in iwk_newstate()
1661 iwk_set_led(sc, 2, 10, 10); in iwk_newstate()
1677 mutex_exit(&sc->sc_glock); in iwk_newstate()
1690 mutex_exit(&sc->sc_glock); in iwk_newstate()
1696 sc->sc_tempera = iwk_curr_tempera(sc); in iwk_newstate()
1702 err = iwk_tx_power_calibration(sc); in iwk_newstate()
1706 mutex_exit(&sc->sc_glock); in iwk_newstate()
1719 mutex_exit(&sc->sc_glock); in iwk_newstate()
1725 mutex_enter(&sc->sc_mt_lock); in iwk_newstate()
1727 sc->sc_flags |= IWK_F_RATE_AUTO_CTL; in iwk_newstate()
1734 sc->sc_flags &= ~IWK_F_RATE_AUTO_CTL; in iwk_newstate()
1736 mutex_exit(&sc->sc_mt_lock); in iwk_newstate()
1739 iwk_set_led(sc, 2, 0, 1); in iwk_newstate()
1744 sc->sc_flags &= ~IWK_F_SCANNING; in iwk_newstate()
1748 iwk_set_led(sc, 2, 1, 0); in iwk_newstate()
1752 sc->sc_flags &= ~IWK_F_SCANNING; in iwk_newstate()
1758 mutex_exit(&sc->sc_glock); in iwk_newstate()
1760 err = sc->sc_newstate(ic, nstate, arg); in iwk_newstate()
1764 mutex_enter(&sc->sc_glock); in iwk_newstate()
1770 err = iwk_rx_sens_init(sc); in iwk_newstate()
1774 mutex_exit(&sc->sc_glock); in iwk_newstate()
1779 err = iwk_rxgain_diff_init(sc); in iwk_newstate()
1783 mutex_exit(&sc->sc_glock); in iwk_newstate()
1787 mutex_exit(&sc->sc_glock); in iwk_newstate()
1797 iwk_sc_t *sc = arg; in iwk_watchdog() local
1798 struct ieee80211com *ic = &sc->sc_ic; in iwk_watchdog()
1825 iwk_sc_t *sc = (iwk_sc_t *)ic; in iwk_key_set() local
1839 sc->sc_config.filter_flags &= ~LE_32(RXON_FILTER_DIS_DECRYPT_MSK | in iwk_key_set()
1842 mutex_enter(&sc->sc_glock); in iwk_key_set()
1850 mutex_exit(&sc->sc_glock); in iwk_key_set()
1851 mutex_enter(&sc->sc_ibss.node_tb_lock); in iwk_key_set()
1858 if (sc->sc_ibss.ibss_node_tb[index1].used && in iwk_key_set()
1859 IEEE80211_ADDR_EQ(sc->sc_ibss. in iwk_key_set()
1868 mutex_exit(&sc->sc_ibss.node_tb_lock); in iwk_key_set()
1875 sc->sc_ibss.ibss_node_tb[index1]. in iwk_key_set()
1877 sc->sc_ibss.ibss_node_tb[index1]. in iwk_key_set()
1880 sc->sc_ibss.ibss_node_tb[index1]. in iwk_key_set()
1882 sc->sc_ibss.ibss_node_tb[index1]. in iwk_key_set()
1886 (void) memcpy(sc->sc_ibss.ibss_node_tb[index1].node.key, in iwk_key_set()
1888 sc->sc_ibss.ibss_node_tb[index1].node.key_flags |= in iwk_key_set()
1890 sc->sc_ibss.ibss_node_tb[index1].node.key_flags = in iwk_key_set()
1891 LE_16(sc->sc_ibss.ibss_node_tb[index1]. in iwk_key_set()
1893 sc->sc_ibss.ibss_node_tb[index1].node.sta_mask = in iwk_key_set()
1895 sc->sc_ibss.ibss_node_tb[index1].node.control = 1; in iwk_key_set()
1897 mutex_enter(&sc->sc_glock); in iwk_key_set()
1898 err = iwk_cmd(sc, REPLY_ADD_STA, in iwk_key_set()
1899 &sc->sc_ibss.ibss_node_tb[index1].node, in iwk_key_set()
1904 mutex_exit(&sc->sc_glock); in iwk_key_set()
1905 mutex_exit(&sc->sc_ibss.node_tb_lock); in iwk_key_set()
1908 mutex_exit(&sc->sc_glock); in iwk_key_set()
1910 mutex_exit(&sc->sc_ibss.node_tb_lock); in iwk_key_set()
1928 err = iwk_cmd(sc, REPLY_ADD_STA, &node, sizeof (node), 1); in iwk_key_set()
1932 mutex_exit(&sc->sc_glock); in iwk_key_set()
1935 mutex_exit(&sc->sc_glock); in iwk_key_set()
1943 iwk_mac_access_enter(iwk_sc_t *sc) in iwk_mac_access_enter() argument
1948 tmp = IWK_READ(sc, CSR_GP_CNTRL); in iwk_mac_access_enter()
1949 IWK_WRITE(sc, CSR_GP_CNTRL, in iwk_mac_access_enter()
1954 if ((IWK_READ(sc, CSR_GP_CNTRL) & in iwk_mac_access_enter()
1969 iwk_mac_access_exit(iwk_sc_t *sc) in iwk_mac_access_exit() argument
1971 uint32_t tmp = IWK_READ(sc, CSR_GP_CNTRL); in iwk_mac_access_exit()
1972 IWK_WRITE(sc, CSR_GP_CNTRL, in iwk_mac_access_exit()
1977 iwk_mem_read(iwk_sc_t *sc, uint32_t addr) in iwk_mem_read() argument
1979 IWK_WRITE(sc, HBUS_TARG_MEM_RADDR, addr); in iwk_mem_read()
1980 return (IWK_READ(sc, HBUS_TARG_MEM_RDAT)); in iwk_mem_read()
1984 iwk_mem_write(iwk_sc_t *sc, uint32_t addr, uint32_t data) in iwk_mem_write() argument
1986 IWK_WRITE(sc, HBUS_TARG_MEM_WADDR, addr); in iwk_mem_write()
1987 IWK_WRITE(sc, HBUS_TARG_MEM_WDAT, data); in iwk_mem_write()
1991 iwk_reg_read(iwk_sc_t *sc, uint32_t addr) in iwk_reg_read() argument
1993 IWK_WRITE(sc, HBUS_TARG_PRPH_RADDR, addr | (3 << 24)); in iwk_reg_read()
1994 return (IWK_READ(sc, HBUS_TARG_PRPH_RDAT)); in iwk_reg_read()
1998 iwk_reg_write(iwk_sc_t *sc, uint32_t addr, uint32_t data) in iwk_reg_write() argument
2000 IWK_WRITE(sc, HBUS_TARG_PRPH_WADDR, addr | (3 << 24)); in iwk_reg_write()
2001 IWK_WRITE(sc, HBUS_TARG_PRPH_WDAT, data); in iwk_reg_write()
2005 iwk_reg_write_region_4(iwk_sc_t *sc, uint32_t addr, in iwk_reg_write_region_4() argument
2009 iwk_reg_write(sc, addr, LE_32(*data)); in iwk_reg_write_region_4()
2027 iwk_load_firmware(iwk_sc_t *sc) in iwk_load_firmware() argument
2029 uint32_t *boot_fw = (uint32_t *)sc->sc_boot; in iwk_load_firmware()
2030 uint32_t size = LE_32(sc->sc_hdr->bootsz); in iwk_load_firmware()
2038 iwk_mac_access_enter(sc); in iwk_load_firmware()
2040 iwk_reg_write(sc, BSM_DRAM_INST_PTR_REG, in iwk_load_firmware()
2041 sc->sc_dma_fw_init_text.cookie.dmac_address >> 4); in iwk_load_firmware()
2042 iwk_reg_write(sc, BSM_DRAM_DATA_PTR_REG, in iwk_load_firmware()
2043 sc->sc_dma_fw_init_data.cookie.dmac_address >> 4); in iwk_load_firmware()
2044 iwk_reg_write(sc, BSM_DRAM_INST_BYTECOUNT_REG, in iwk_load_firmware()
2045 sc->sc_dma_fw_init_text.cookie.dmac_size); in iwk_load_firmware()
2046 iwk_reg_write(sc, BSM_DRAM_DATA_BYTECOUNT_REG, in iwk_load_firmware()
2047 sc->sc_dma_fw_init_data.cookie.dmac_size); in iwk_load_firmware()
2050 iwk_reg_write_region_4(sc, BSM_SRAM_LOWER_BOUND, boot_fw, in iwk_load_firmware()
2053 iwk_reg_write(sc, BSM_WR_MEM_SRC_REG, 0); in iwk_load_firmware()
2054 iwk_reg_write(sc, BSM_WR_MEM_DST_REG, RTC_INST_LOWER_BOUND); in iwk_load_firmware()
2055 iwk_reg_write(sc, BSM_WR_DWCOUNT_REG, size / sizeof (uint32_t)); in iwk_load_firmware()
2060 iwk_reg_write(sc, BSM_WR_CTRL_REG, BSM_WR_CTRL_REG_BIT_START); in iwk_load_firmware()
2064 if (!(iwk_reg_read(sc, BSM_WR_CTRL_REG) & in iwk_load_firmware()
2076 iwk_reg_write(sc, BSM_WR_CTRL_REG, BSM_WR_CTRL_REG_BIT_START_EN); in iwk_load_firmware()
2078 iwk_mac_access_exit(sc); in iwk_load_firmware()
2085 iwk_rx_intr(iwk_sc_t *sc, iwk_rx_desc_t *desc, iwk_rx_data_t *data) in iwk_rx_intr() argument
2087 ieee80211com_t *ic = &sc->sc_ic; in iwk_rx_intr()
2088 iwk_rx_ring_t *ring = &sc->sc_rxq; in iwk_rx_intr()
2139 if ((len < 16) || (len > sc->sc_dmabuf_sz)) { in iwk_rx_intr()
2152 sc->sc_rx_err++; in iwk_rx_intr()
2159 sc->sc_assoc_id = *((uint16_t *)(wh + 1) + 2); in iwk_rx_intr()
2161 sc->sc_assoc_id)); in iwk_rx_intr()
2176 sc->sc_rx_nobuf++; in iwk_rx_intr()
2186 iwk_tx_intr(iwk_sc_t *sc, iwk_rx_desc_t *desc, iwk_rx_data_t *data) in iwk_tx_intr() argument
2188 ieee80211com_t *ic = &sc->sc_ic; in iwk_tx_intr()
2189 iwk_tx_ring_t *ring = &sc->sc_txq[desc->hdr.qid & 0x3]; in iwk_tx_intr()
2204 sc->sc_tx_retries++; in iwk_tx_intr()
2206 sc->sc_tx_retries)); in iwk_tx_intr()
2209 sc->sc_tx_timer = 0; in iwk_tx_intr()
2211 mutex_enter(&sc->sc_tx_lock); in iwk_tx_intr()
2215 if ((sc->sc_need_reschedule) && (ring->queued <= (ring->count << 3))) { in iwk_tx_intr()
2216 sc->sc_need_reschedule = 0; in iwk_tx_intr()
2217 mutex_exit(&sc->sc_tx_lock); in iwk_tx_intr()
2219 mutex_enter(&sc->sc_tx_lock); in iwk_tx_intr()
2221 mutex_exit(&sc->sc_tx_lock); in iwk_tx_intr()
2225 iwk_cmd_intr(iwk_sc_t *sc, iwk_rx_desc_t *desc) in iwk_cmd_intr() argument
2230 mutex_enter(&sc->sc_glock); in iwk_cmd_intr()
2231 sc->sc_flags |= IWK_F_CMD_DONE; in iwk_cmd_intr()
2232 cv_signal(&sc->sc_cmd_cv); in iwk_cmd_intr()
2233 mutex_exit(&sc->sc_glock); in iwk_cmd_intr()
2241 iwk_ucode_alive(iwk_sc_t *sc, iwk_rx_desc_t *desc) in iwk_ucode_alive() argument
2260 (void) memcpy(&sc->sc_card_alive_init, ar, in iwk_ucode_alive()
2263 iwk_mac_access_enter(sc); in iwk_ucode_alive()
2264 iwk_reg_write(sc, BSM_DRAM_INST_PTR_REG, in iwk_ucode_alive()
2265 sc->sc_dma_fw_text.cookie.dmac_address >> 4); in iwk_ucode_alive()
2266 iwk_reg_write(sc, BSM_DRAM_DATA_PTR_REG, in iwk_ucode_alive()
2267 sc->sc_dma_fw_data_bak.cookie.dmac_address >> 4); in iwk_ucode_alive()
2268 iwk_reg_write(sc, BSM_DRAM_DATA_BYTECOUNT_REG, in iwk_ucode_alive()
2269 sc->sc_dma_fw_data.cookie.dmac_size); in iwk_ucode_alive()
2270 iwk_reg_write(sc, BSM_DRAM_INST_BYTECOUNT_REG, in iwk_ucode_alive()
2271 sc->sc_dma_fw_text.cookie.dmac_size | 0x80000000); in iwk_ucode_alive()
2272 iwk_mac_access_exit(sc); in iwk_ucode_alive()
2275 (void) memcpy(&sc->sc_card_alive_run, ar, in iwk_ucode_alive()
2281 iwk_mac_access_enter(sc); in iwk_ucode_alive()
2284 sc->sc_scd_base = iwk_reg_read(sc, SCD_SRAM_BASE_ADDR); in iwk_ucode_alive()
2287 for (base = sc->sc_scd_base + SCD_CONTEXT_DATA_OFFSET, i = 0; in iwk_ucode_alive()
2289 iwk_mem_write(sc, base + i, 0); in iwk_ucode_alive()
2292 for (base = sc->sc_scd_base + SCD_TX_STTS_BITMAP_OFFSET; in iwk_ucode_alive()
2294 iwk_mem_write(sc, base + i, 0); in iwk_ucode_alive()
2297 for (base = sc->sc_scd_base + SCD_TRANSLATE_TBL_OFFSET; in iwk_ucode_alive()
2299 iwk_mem_write(sc, base + i, 0); in iwk_ucode_alive()
2301 iwk_reg_write(sc, SCD_DRAM_BASE_ADDR, in iwk_ucode_alive()
2302 sc->sc_dma_sh.cookie.dmac_address >> 10); in iwk_ucode_alive()
2303 iwk_reg_write(sc, SCD_QUEUECHAIN_SEL, 0); in iwk_ucode_alive()
2307 iwk_reg_write(sc, SCD_QUEUE_RDPTR(i), 0); in iwk_ucode_alive()
2308 IWK_WRITE(sc, HBUS_TARG_WRPTR, (i << 8)); in iwk_ucode_alive()
2309 iwk_mem_write(sc, sc->sc_scd_base + in iwk_ucode_alive()
2312 iwk_mem_write(sc, sc->sc_scd_base + in iwk_ucode_alive()
2317 iwk_reg_write(sc, SCD_INTERRUPT_MASK, in iwk_ucode_alive()
2320 iwk_reg_write(sc, SCD_TXFACT, in iwk_ucode_alive()
2327 iwk_reg_write(sc, in iwk_ucode_alive()
2333 iwk_mac_access_exit(sc); in iwk_ucode_alive()
2335 sc->sc_flags |= IWK_F_FW_INIT; in iwk_ucode_alive()
2336 cv_signal(&sc->sc_fw_cv); in iwk_ucode_alive()
2345 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_rx_softintr() local
2346 ieee80211com_t *ic = &sc->sc_ic; in iwk_rx_softintr()
2351 mutex_enter(&sc->sc_glock); in iwk_rx_softintr()
2352 if (sc->sc_rx_softint_pending != 1) { in iwk_rx_softintr()
2353 mutex_exit(&sc->sc_glock); in iwk_rx_softintr()
2357 IWK_WRITE(sc, CSR_INT_MASK, 0); in iwk_rx_softintr()
2358 mutex_exit(&sc->sc_glock); in iwk_rx_softintr()
2364 index = sc->sc_shared->val0 & 0xfff; in iwk_rx_softintr()
2366 while (sc->sc_rxq.cur != index) { in iwk_rx_softintr()
2367 data = &sc->sc_rxq.data[sc->sc_rxq.cur]; in iwk_rx_softintr()
2372 index, sc->sc_rxq.cur, desc->hdr.qid, desc->hdr.idx, in iwk_rx_softintr()
2382 iwk_cmd_intr(sc, desc); in iwk_rx_softintr()
2386 iwk_rx_intr(sc, desc, data); in iwk_rx_softintr()
2390 iwk_tx_intr(sc, desc, data); in iwk_rx_softintr()
2394 iwk_ucode_alive(sc, desc); in iwk_rx_softintr()
2414 sc->sc_ostate = sc->sc_ic.ic_state; in iwk_rx_softintr()
2415 ieee80211_new_state(&sc->sc_ic, in iwk_rx_softintr()
2417 sc->sc_flags |= in iwk_rx_softintr()
2443 sc->sc_scan_pending++; in iwk_rx_softintr()
2448 iwk_statistics_notify(sc, desc); in iwk_rx_softintr()
2452 sc->sc_rxq.cur = (sc->sc_rxq.cur + 1) % RX_QUEUE_SIZE; in iwk_rx_softintr()
2460 IWK_WRITE(sc, FH_RSCSR_CHNL0_RBDCB_WPTR_REG, index & (~7)); in iwk_rx_softintr()
2462 mutex_enter(&sc->sc_glock); in iwk_rx_softintr()
2464 IWK_WRITE(sc, CSR_INT_MASK, CSR_INI_SET_MASK); in iwk_rx_softintr()
2465 sc->sc_rx_softint_pending = 0; in iwk_rx_softintr()
2466 mutex_exit(&sc->sc_glock); in iwk_rx_softintr()
2475 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_intr() local
2478 mutex_enter(&sc->sc_glock); in iwk_intr()
2480 if (sc->sc_flags & IWK_F_SUSPEND) { in iwk_intr()
2481 mutex_exit(&sc->sc_glock); in iwk_intr()
2485 r = IWK_READ(sc, CSR_INT); in iwk_intr()
2487 mutex_exit(&sc->sc_glock); in iwk_intr()
2493 rfh = IWK_READ(sc, CSR_FH_INT_STATUS); in iwk_intr()
2496 IWK_WRITE(sc, CSR_INT_MASK, 0); in iwk_intr()
2498 IWK_WRITE(sc, CSR_INT, r); in iwk_intr()
2499 IWK_WRITE(sc, CSR_FH_INT_STATUS, rfh); in iwk_intr()
2501 if (sc->sc_soft_hdl == NULL) { in iwk_intr()
2502 mutex_exit(&sc->sc_glock); in iwk_intr()
2507 mutex_exit(&sc->sc_glock); in iwk_intr()
2510 iwk_write_error_log(sc); in iwk_intr()
2511 iwk_write_event_log(sc); in iwk_intr()
2513 iwk_stop(sc); in iwk_intr()
2514 sc->sc_ostate = sc->sc_ic.ic_state; in iwk_intr()
2517 if (!IWK_CHK_FAST_RECOVER(sc)) in iwk_intr()
2518 ieee80211_new_state(&sc->sc_ic, IEEE80211_S_INIT, -1); in iwk_intr()
2520 sc->sc_flags |= IWK_F_HW_ERR_RECOVER; in iwk_intr()
2525 uint32_t tmp = IWK_READ(sc, CSR_GP_CNTRL); in iwk_intr()
2532 sc->sc_rx_softint_pending = 1; in iwk_intr()
2533 (void) ddi_intr_trigger_softint(sc->sc_soft_hdl, NULL); in iwk_intr()
2541 IWK_WRITE(sc, CSR_INT_MASK, CSR_INI_SET_MASK); in iwk_intr()
2542 mutex_exit(&sc->sc_glock); in iwk_intr()
2601 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_m_tx() local
2602 ieee80211com_t *ic = &sc->sc_ic; in iwk_m_tx()
2605 if (sc->sc_flags & IWK_F_SUSPEND) { in iwk_m_tx()
2615 if ((sc->sc_flags & IWK_F_HW_ERR_RECOVER) && in iwk_m_tx()
2616 IWK_CHK_FAST_RECOVER(sc)) { in iwk_m_tx()
2637 iwk_sc_t *sc = (iwk_sc_t *)ic; in iwk_send() local
2651 ring = &sc->sc_txq[0]; in iwk_send()
2658 mutex_enter(&sc->sc_tx_lock); in iwk_send()
2659 if (sc->sc_flags & IWK_F_SUSPEND) { in iwk_send()
2660 mutex_exit(&sc->sc_tx_lock); in iwk_send()
2671 sc->sc_need_reschedule = 1; in iwk_send()
2672 mutex_exit(&sc->sc_tx_lock); in iwk_send()
2677 sc->sc_tx_nobuf++; in iwk_send()
2681 mutex_exit(&sc->sc_tx_lock); in iwk_send()
2705 mutex_enter(&sc->sc_glock); in iwk_send()
2706 mutex_enter(&sc->sc_ibss.node_tb_lock); in iwk_send()
2713 if (sc->sc_ibss.ibss_node_tb[index1].used && in iwk_send()
2714 IEEE80211_ADDR_EQ(sc->sc_ibss. in iwk_send()
2731 mutex_exit(&sc->sc_ibss.node_tb_lock); in iwk_send()
2732 mutex_exit(&sc->sc_glock); in iwk_send()
2734 sc->sc_tx_err++; in iwk_send()
2742 mutex_exit(&sc->sc_ibss.node_tb_lock); in iwk_send()
2743 mutex_exit(&sc->sc_glock); in iwk_send()
2750 sc->sc_tx_err++; in iwk_send()
2774 sc->sc_tx_err++; in iwk_send()
2904 mutex_enter(&sc->sc_tx_lock); in iwk_send()
2906 mutex_exit(&sc->sc_tx_lock); in iwk_send()
2909 sc->sc_shared->queues_byte_cnt_tbls[ring->qid]. in iwk_send()
2912 sc->sc_shared->queues_byte_cnt_tbls[ring->qid]. in iwk_send()
2920 IWK_WRITE(sc, HBUS_TARG_WRPTR, ring->qid << 8 | ring->cur); in iwk_send()
2928 if (sc->sc_tx_timer == 0) in iwk_send()
2929 sc->sc_tx_timer = 4; in iwk_send()
2938 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_m_ioctl() local
2939 ieee80211com_t *ic = &sc->sc_ic; in iwk_m_ioctl()
2958 (void) memset(&sc->sc_config, 0, sizeof (iwk_rxon_cmd_t)); in iwk_m_ioctl()
2959 IEEE80211_ADDR_COPY(sc->sc_config.node_addr, ic->ic_macaddr); in iwk_m_ioctl()
2960 IEEE80211_ADDR_COPY(sc->sc_config.wlap_bssid, ic->ic_macaddr); in iwk_m_ioctl()
2961 sc->sc_config.chan = in iwk_m_ioctl()
2963 sc->sc_config.flags = LE_32(RXON_FLG_TSF2HOST_MSK | in iwk_m_ioctl()
2966 sc->sc_config.flags &= LE_32(~RXON_FLG_CCK_MSK); in iwk_m_ioctl()
2969 sc->sc_config.dev_type = RXON_DEV_TYPE_ESS; in iwk_m_ioctl()
2970 sc->sc_config.filter_flags |= in iwk_m_ioctl()
2977 sc->sc_config.dev_type = RXON_DEV_TYPE_IBSS; in iwk_m_ioctl()
2978 sc->sc_config.flags |= in iwk_m_ioctl()
2980 sc->sc_config.filter_flags = in iwk_m_ioctl()
2986 sc->sc_config.dev_type = RXON_DEV_TYPE_AP; in iwk_m_ioctl()
2989 sc->sc_config.dev_type = RXON_DEV_TYPE_SNIFFER; in iwk_m_ioctl()
2990 sc->sc_config.filter_flags |= in iwk_m_ioctl()
2996 sc->sc_config.cck_basic_rates = 0x0f; in iwk_m_ioctl()
2997 sc->sc_config.ofdm_basic_rates = 0xff; in iwk_m_ioctl()
2998 sc->sc_config.ofdm_ht_single_stream_basic_rates = 0xff; in iwk_m_ioctl()
2999 sc->sc_config.ofdm_ht_dual_stream_basic_rates = 0xff; in iwk_m_ioctl()
3001 mutex_enter(&sc->sc_glock); in iwk_m_ioctl()
3002 sc->sc_config.rx_chain = LE_16(RXON_RX_CHAIN_DRIVER_FORCE_MSK | in iwk_m_ioctl()
3006 err1 = iwk_cmd(sc, REPLY_RXON, &sc->sc_config, in iwk_m_ioctl()
3020 txpower.channel = sc->sc_config.chan; in iwk_m_ioctl()
3032 err1 = iwk_cmd(sc, REPLY_TX_PWR_TABLE_CMD, &txpower, in iwk_m_ioctl()
3043 err1 = iwk_cmd(sc, REPLY_ADD_STA, &node, sizeof (node), 1); in iwk_m_ioctl()
3063 err1 = iwk_cmd(sc, REPLY_TX_LINK_QUALITY_CMD, &link_quality, in iwk_m_ioctl()
3069 mutex_exit(&sc->sc_glock); in iwk_m_ioctl()
3083 if (sc->sc_flags & IWK_F_RUNNING) { in iwk_m_ioctl()
3084 iwk_m_stop(sc); in iwk_m_ioctl()
3085 (void) iwk_m_start(sc); in iwk_m_ioctl()
3102 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_m_getprop() local
3104 err = ieee80211_getprop(&sc->sc_ic, pr_name, wldp_pr_num, in iwk_m_getprop()
3115 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_m_setprop() local
3116 ieee80211com_t *ic = &sc->sc_ic; in iwk_m_setprop()
3123 if (sc->sc_flags & IWK_F_RUNNING) { in iwk_m_setprop()
3124 iwk_m_stop(sc); in iwk_m_setprop()
3125 (void) iwk_m_start(sc); in iwk_m_setprop()
3140 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_m_propinfo() local
3141 ieee80211com_t *ic = &sc->sc_ic; in iwk_m_propinfo()
3150 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_m_stat() local
3151 ieee80211com_t *ic = &sc->sc_ic; in iwk_m_stat()
3154 mutex_enter(&sc->sc_glock); in iwk_m_stat()
3163 *val = sc->sc_tx_nobuf; in iwk_m_stat()
3166 *val = sc->sc_rx_nobuf; in iwk_m_stat()
3169 *val = sc->sc_rx_err; in iwk_m_stat()
3185 *val = sc->sc_tx_err; in iwk_m_stat()
3188 *val = sc->sc_tx_retries; in iwk_m_stat()
3200 mutex_exit(&sc->sc_glock); in iwk_m_stat()
3203 mutex_exit(&sc->sc_glock); in iwk_m_stat()
3206 mutex_exit(&sc->sc_glock); in iwk_m_stat()
3215 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_m_start() local
3216 ieee80211com_t *ic = &sc->sc_ic; in iwk_m_start()
3219 err = iwk_init(sc); in iwk_m_start()
3227 mutex_enter(&sc->sc_glock); in iwk_m_start()
3228 sc->sc_flags |= IWK_F_HW_ERR_RECOVER; in iwk_m_start()
3229 mutex_exit(&sc->sc_glock); in iwk_m_start()
3235 mutex_enter(&sc->sc_glock); in iwk_m_start()
3236 sc->sc_flags |= IWK_F_RUNNING; in iwk_m_start()
3237 mutex_exit(&sc->sc_glock); in iwk_m_start()
3245 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_m_stop() local
3246 ieee80211com_t *ic = &sc->sc_ic; in iwk_m_stop()
3248 iwk_stop(sc); in iwk_m_stop()
3251 mutex_enter(&sc->sc_mt_lock); in iwk_m_stop()
3252 sc->sc_flags &= ~IWK_F_HW_ERR_RECOVER; in iwk_m_stop()
3253 sc->sc_flags &= ~IWK_F_RATE_AUTO_CTL; in iwk_m_stop()
3254 mutex_exit(&sc->sc_mt_lock); in iwk_m_stop()
3255 mutex_enter(&sc->sc_glock); in iwk_m_stop()
3256 sc->sc_flags &= ~IWK_F_RUNNING; in iwk_m_stop()
3257 mutex_exit(&sc->sc_glock); in iwk_m_stop()
3264 iwk_sc_t *sc = (iwk_sc_t *)arg; in iwk_m_unicst() local
3265 ieee80211com_t *ic = &sc->sc_ic; in iwk_m_unicst()
3270 mutex_enter(&sc->sc_glock); in iwk_m_unicst()
3271 err = iwk_config(sc); in iwk_m_unicst()
3272 mutex_exit(&sc->sc_glock); in iwk_m_unicst()
3300 iwk_thread(iwk_sc_t *sc) in iwk_thread() argument
3302 ieee80211com_t *ic = &sc->sc_ic; in iwk_thread()
3307 mutex_enter(&sc->sc_mt_lock); in iwk_thread()
3308 while (sc->sc_mf_thread_switch) { in iwk_thread()
3309 tmp = IWK_READ(sc, CSR_GP_CNTRL); in iwk_thread()
3311 sc->sc_flags &= ~IWK_F_RADIO_OFF; in iwk_thread()
3313 sc->sc_flags |= IWK_F_RADIO_OFF; in iwk_thread()
3318 if ((sc->sc_flags & IWK_F_SUSPEND) || in iwk_thread()
3319 (sc->sc_flags & IWK_F_RADIO_OFF)) { in iwk_thread()
3320 mutex_exit(&sc->sc_mt_lock); in iwk_thread()
3322 mutex_enter(&sc->sc_mt_lock); in iwk_thread()
3330 (sc->sc_flags & IWK_F_HW_ERR_RECOVER)) { in iwk_thread()
3336 iwk_stop(sc); in iwk_thread()
3338 if (IWK_CHK_FAST_RECOVER(sc)) { in iwk_thread()
3340 bcopy(&sc->sc_config, &sc->sc_config_save, in iwk_thread()
3341 sizeof (sc->sc_config)); in iwk_thread()
3343 mutex_exit(&sc->sc_mt_lock); in iwk_thread()
3346 mutex_enter(&sc->sc_mt_lock); in iwk_thread()
3349 err = iwk_init(sc); in iwk_thread()
3357 sc->sc_flags |= IWK_F_RUNNING; in iwk_thread()
3359 if (!IWK_CHK_FAST_RECOVER(sc) || in iwk_thread()
3360 iwk_fast_recover(sc) != IWK_SUCCESS) { in iwk_thread()
3361 sc->sc_flags &= ~IWK_F_HW_ERR_RECOVER; in iwk_thread()
3363 mutex_exit(&sc->sc_mt_lock); in iwk_thread()
3365 if (sc->sc_ostate != IEEE80211_S_INIT) in iwk_thread()
3368 mutex_enter(&sc->sc_mt_lock); in iwk_thread()
3372 if (ic->ic_mach && (sc->sc_flags & IWK_F_LAZY_RESUME)) { in iwk_thread()
3376 sc->sc_flags &= ~IWK_F_LAZY_RESUME; in iwk_thread()
3377 mutex_exit(&sc->sc_mt_lock); in iwk_thread()
3384 ieee80211_new_state(&sc->sc_ic, IEEE80211_S_INIT, -1); in iwk_thread()
3385 mutex_enter(&sc->sc_mt_lock); in iwk_thread()
3389 (sc->sc_flags & IWK_F_SCANNING) && sc->sc_scan_pending) { in iwk_thread()
3393 sc->sc_scan_pending--; in iwk_thread()
3394 mutex_exit(&sc->sc_mt_lock); in iwk_thread()
3396 if (sc->sc_flags & IWK_F_SCANNING) in iwk_thread()
3398 mutex_enter(&sc->sc_mt_lock); in iwk_thread()
3405 (sc->sc_flags & IWK_F_RATE_AUTO_CTL)) { in iwk_thread()
3407 if (clk > sc->sc_clk + drv_usectohz(500000)) { in iwk_thread()
3408 iwk_amrr_timeout(sc); in iwk_thread()
3419 mutex_exit(&sc->sc_mt_lock); in iwk_thread()
3421 mutex_enter(&sc->sc_mt_lock); in iwk_thread()
3423 if (sc->sc_tx_timer) { in iwk_thread()
3426 sc->sc_tx_timer--; in iwk_thread()
3427 if (sc->sc_tx_timer == 0) { in iwk_thread()
3428 sc->sc_flags |= IWK_F_HW_ERR_RECOVER; in iwk_thread()
3429 sc->sc_ostate = IEEE80211_S_RUN; in iwk_thread()
3439 sc->sc_mf_thread = NULL; in iwk_thread()
3440 cv_signal(&sc->sc_mt_cv); in iwk_thread()
3441 mutex_exit(&sc->sc_mt_lock); in iwk_thread()
3449 iwk_cmd(iwk_sc_t *sc, int code, const void *buf, int size, int async) in iwk_cmd() argument
3451 iwk_tx_ring_t *ring = &sc->sc_txq[IWK_CMD_QUEUE_NUM]; in iwk_cmd()
3457 ASSERT(mutex_owned(&sc->sc_glock)); in iwk_cmd()
3476 sc->sc_shared->queues_byte_cnt_tbls[ring->qid]. in iwk_cmd()
3479 sc->sc_shared->queues_byte_cnt_tbls[ring->qid]. in iwk_cmd()
3483 IWK_WRITE(sc, HBUS_TARG_WRPTR, ring->qid << 8 | ring->cur); in iwk_cmd()
3488 sc->sc_flags &= ~IWK_F_CMD_DONE; in iwk_cmd()
3490 while (!(sc->sc_flags & IWK_F_CMD_DONE)) { in iwk_cmd()
3491 if (cv_timedwait(&sc->sc_cmd_cv, &sc->sc_glock, clk) < in iwk_cmd()
3495 if (sc->sc_flags & IWK_F_CMD_DONE) in iwk_cmd()
3503 iwk_set_led(iwk_sc_t *sc, uint8_t id, uint8_t off, uint8_t on) in iwk_set_led() argument
3512 (void) iwk_cmd(sc, REPLY_LEDS_CMD, &led, sizeof (led), 1); in iwk_set_led()
3516 iwk_hw_set_before_auth(iwk_sc_t *sc) in iwk_hw_set_before_auth() argument
3518 ieee80211com_t *ic = &sc->sc_ic; in iwk_hw_set_before_auth()
3534 IEEE80211_ADDR_COPY(sc->sc_config.bssid, in->in_bssid); in iwk_hw_set_before_auth()
3535 sc->sc_config.chan = LE_16(ieee80211_chan2ieee(ic, in->in_chan)); in iwk_hw_set_before_auth()
3537 sc->sc_config.cck_basic_rates = 0x03; in iwk_hw_set_before_auth()
3538 sc->sc_config.ofdm_basic_rates = 0; in iwk_hw_set_before_auth()
3541 sc->sc_config.cck_basic_rates = 0; in iwk_hw_set_before_auth()
3542 sc->sc_config.ofdm_basic_rates = 0x15; in iwk_hw_set_before_auth()
3544 sc->sc_config.cck_basic_rates = 0x0f; in iwk_hw_set_before_auth()
3545 sc->sc_config.ofdm_basic_rates = 0xff; in iwk_hw_set_before_auth()
3548 sc->sc_config.flags &= ~LE_32(RXON_FLG_SHORT_PREAMBLE_MSK | in iwk_hw_set_before_auth()
3552 sc->sc_config.flags |= LE_32(RXON_FLG_SHORT_SLOT_MSK); in iwk_hw_set_before_auth()
3554 sc->sc_config.flags &= LE_32(~RXON_FLG_SHORT_SLOT_MSK); in iwk_hw_set_before_auth()
3557 sc->sc_config.flags |= LE_32(RXON_FLG_SHORT_PREAMBLE_MSK); in iwk_hw_set_before_auth()
3559 sc->sc_config.flags &= LE_32(~RXON_FLG_SHORT_PREAMBLE_MSK); in iwk_hw_set_before_auth()
3564 LE_16(sc->sc_config.chan), LE_32(sc->sc_config.flags), in iwk_hw_set_before_auth()
3565 LE_32(sc->sc_config.filter_flags), in iwk_hw_set_before_auth()
3566 sc->sc_config.cck_basic_rates, sc->sc_config.ofdm_basic_rates, in iwk_hw_set_before_auth()
3567 sc->sc_config.bssid[0], sc->sc_config.bssid[1], in iwk_hw_set_before_auth()
3568 sc->sc_config.bssid[2], sc->sc_config.bssid[3], in iwk_hw_set_before_auth()
3569 sc->sc_config.bssid[4], sc->sc_config.bssid[5])); in iwk_hw_set_before_auth()
3570 err = iwk_cmd(sc, REPLY_RXON, &sc->sc_config, in iwk_hw_set_before_auth()
3575 sc->sc_config.chan); in iwk_hw_set_before_auth()
3580 sc->sc_tempera = iwk_curr_tempera(sc); in iwk_hw_set_before_auth()
3583 err = iwk_tx_power_calibration(sc); in iwk_hw_set_before_auth()
3594 err = iwk_cmd(sc, REPLY_ADD_STA, &node, sizeof (node), 1); in iwk_hw_set_before_auth()
3622 err = iwk_cmd(sc, REPLY_TX_LINK_QUALITY_CMD, &link_quality, in iwk_hw_set_before_auth()
3637 iwk_scan(iwk_sc_t *sc) in iwk_scan() argument
3639 ieee80211com_t *ic = &sc->sc_ic; in iwk_scan()
3640 iwk_tx_ring_t *ring = &sc->sc_txq[IWK_CMD_QUEUE_NUM]; in iwk_scan()
3788 sc->sc_shared->queues_byte_cnt_tbls[ring->qid]. in iwk_scan()
3791 sc->sc_shared->queues_byte_cnt_tbls[ring->qid]. in iwk_scan()
3797 IWK_WRITE(sc, HBUS_TARG_WRPTR, ring->qid << 8 | ring->cur); in iwk_scan()
3803 iwk_config(iwk_sc_t *sc) in iwk_config() argument
3805 ieee80211com_t *ic = &sc->sc_ic; in iwk_config()
3818 err = iwk_cmd(sc, POWER_TABLE_CMD, &powertable, in iwk_config()
3830 err = iwk_cmd(sc, REPLY_BT_CONFIG, &bt, in iwk_config()
3840 (void) memset(&sc->sc_config, 0, sizeof (iwk_rxon_cmd_t)); in iwk_config()
3841 IEEE80211_ADDR_COPY(sc->sc_config.node_addr, ic->ic_macaddr); in iwk_config()
3842 IEEE80211_ADDR_COPY(sc->sc_config.wlap_bssid, ic->ic_macaddr); in iwk_config()
3843 sc->sc_config.chan = LE_16(ieee80211_chan2ieee(ic, ic->ic_curchan)); in iwk_config()
3844 sc->sc_config.flags = LE_32(RXON_FLG_TSF2HOST_MSK | in iwk_config()
3846 sc->sc_config.flags &= LE_32(~RXON_FLG_CCK_MSK); in iwk_config()
3849 sc->sc_config.dev_type = RXON_DEV_TYPE_ESS; in iwk_config()
3850 sc->sc_config.filter_flags |= LE_32(RXON_FILTER_ACCEPT_GRP_MSK | in iwk_config()
3856 sc->sc_config.dev_type = RXON_DEV_TYPE_IBSS; in iwk_config()
3857 sc->sc_config.flags |= LE_32(RXON_FLG_SHORT_PREAMBLE_MSK); in iwk_config()
3858 sc->sc_config.filter_flags = LE_32(RXON_FILTER_ACCEPT_GRP_MSK | in iwk_config()
3863 sc->sc_config.dev_type = RXON_DEV_TYPE_AP; in iwk_config()
3866 sc->sc_config.dev_type = RXON_DEV_TYPE_SNIFFER; in iwk_config()
3867 sc->sc_config.filter_flags |= LE_32(RXON_FILTER_ACCEPT_GRP_MSK | in iwk_config()
3871 sc->sc_config.cck_basic_rates = 0x0f; in iwk_config()
3872 sc->sc_config.ofdm_basic_rates = 0xff; in iwk_config()
3874 sc->sc_config.ofdm_ht_single_stream_basic_rates = 0xff; in iwk_config()
3875 sc->sc_config.ofdm_ht_dual_stream_basic_rates = 0xff; in iwk_config()
3879 sc->sc_config.rx_chain = LE_16(RXON_RX_CHAIN_DRIVER_FORCE_MSK | in iwk_config()
3884 err = iwk_cmd(sc, REPLY_RXON, &sc->sc_config, in iwk_config()
3892 sc->sc_tempera = iwk_curr_tempera(sc); in iwk_config()
3895 err = iwk_tx_power_calibration(sc); in iwk_config()
3906 err = iwk_cmd(sc, REPLY_ADD_STA, &node, sizeof (node), 0); in iwk_config()
3928 err = iwk_cmd(sc, REPLY_TX_LINK_QUALITY_CMD, &link_quality, in iwk_config()
3940 iwk_stop_master(iwk_sc_t *sc) in iwk_stop_master() argument
3945 tmp = IWK_READ(sc, CSR_RESET); in iwk_stop_master()
3946 IWK_WRITE(sc, CSR_RESET, tmp | CSR_RESET_REG_FLAG_STOP_MASTER); in iwk_stop_master()
3948 tmp = IWK_READ(sc, CSR_GP_CNTRL); in iwk_stop_master()
3954 if (IWK_READ(sc, CSR_RESET) & in iwk_stop_master()
3965 iwk_power_up(iwk_sc_t *sc) in iwk_power_up() argument
3969 iwk_mac_access_enter(sc); in iwk_power_up()
3970 tmp = iwk_reg_read(sc, ALM_APMG_PS_CTL); in iwk_power_up()
3973 iwk_reg_write(sc, ALM_APMG_PS_CTL, tmp); in iwk_power_up()
3974 iwk_mac_access_exit(sc); in iwk_power_up()
3981 iwk_preinit(iwk_sc_t *sc) in iwk_preinit() argument
3988 IWK_WRITE(sc, CSR_INT, 0xffffffff); in iwk_preinit()
3990 tmp = IWK_READ(sc, CSR_GIO_CHICKEN_BITS); in iwk_preinit()
3991 IWK_WRITE(sc, CSR_GIO_CHICKEN_BITS, in iwk_preinit()
3994 tmp = IWK_READ(sc, CSR_GP_CNTRL); in iwk_preinit()
3995 IWK_WRITE(sc, CSR_GP_CNTRL, tmp | CSR_GP_CNTRL_REG_FLAG_INIT_DONE); in iwk_preinit()
3999 if (IWK_READ(sc, CSR_GP_CNTRL) & in iwk_preinit()
4009 iwk_mac_access_enter(sc); in iwk_preinit()
4010 tmp = iwk_reg_read(sc, APMG_CLK_CTRL_REG); in iwk_preinit()
4011 iwk_reg_write(sc, APMG_CLK_CTRL_REG, tmp | in iwk_preinit()
4015 tmp = iwk_reg_read(sc, ALM_APMG_PCIDEV_STT); in iwk_preinit()
4016 iwk_reg_write(sc, ALM_APMG_PCIDEV_STT, tmp | in iwk_preinit()
4018 iwk_mac_access_exit(sc); in iwk_preinit()
4020 IWK_WRITE(sc, CSR_INT_COALESCING, 512 / 32); /* ??? */ in iwk_preinit()
4022 (void) iwk_power_up(sc); in iwk_preinit()
4024 if ((sc->sc_rev & 0x80) == 0x80 && (sc->sc_rev & 0x7f) < 8) { in iwk_preinit()
4025 tmp = ddi_get32(sc->sc_cfg_handle, in iwk_preinit()
4026 (uint32_t *)(sc->sc_cfg_base + 0xe8)); in iwk_preinit()
4027 ddi_put32(sc->sc_cfg_handle, in iwk_preinit()
4028 (uint32_t *)(sc->sc_cfg_base + 0xe8), in iwk_preinit()
4033 vlink = ddi_get8(sc->sc_cfg_handle, in iwk_preinit()
4034 (uint8_t *)(sc->sc_cfg_base + 0xf0)); in iwk_preinit()
4035 ddi_put8(sc->sc_cfg_handle, (uint8_t *)(sc->sc_cfg_base + 0xf0), in iwk_preinit()
4038 tmp = IWK_READ(sc, CSR_SW_VER); in iwk_preinit()
4042 IWK_WRITE(sc, CSR_SW_VER, tmp); in iwk_preinit()
4045 iwk_mac_access_enter(sc); in iwk_preinit()
4046 tmp = iwk_reg_read(sc, ALM_APMG_PS_CTL); in iwk_preinit()
4048 iwk_reg_write(sc, ALM_APMG_PS_CTL, tmp); in iwk_preinit()
4050 tmp = iwk_reg_read(sc, ALM_APMG_PS_CTL); in iwk_preinit()
4052 iwk_reg_write(sc, ALM_APMG_PS_CTL, tmp); in iwk_preinit()
4053 iwk_mac_access_exit(sc); in iwk_preinit()
4060 static int iwk_eep_sem_down(iwk_sc_t *sc) in iwk_eep_sem_down() argument
4066 tmp = IWK_READ(sc, CSR_HW_IF_CONFIG_REG); in iwk_eep_sem_down()
4067 IWK_WRITE(sc, CSR_HW_IF_CONFIG_REG, in iwk_eep_sem_down()
4071 if (IWK_READ(sc, CSR_HW_IF_CONFIG_REG) & in iwk_eep_sem_down()
4083 static void iwk_eep_sem_up(iwk_sc_t *sc) in iwk_eep_sem_up() argument
4087 tmp = IWK_READ(sc, CSR_HW_IF_CONFIG_REG); in iwk_eep_sem_up()
4088 IWK_WRITE(sc, CSR_HW_IF_CONFIG_REG, in iwk_eep_sem_up()
4096 static int iwk_eep_load(iwk_sc_t *sc) in iwk_eep_load() argument
4100 uint16_t addr, eep_sz = sizeof (sc->sc_eep_map); in iwk_eep_load()
4101 uint16_t *eep_p = (uint16_t *)&sc->sc_eep_map; in iwk_eep_load()
4104 eep_gp = IWK_READ(sc, CSR_EEPROM_GP); in iwk_eep_load()
4111 rr = iwk_eep_sem_down(sc); in iwk_eep_load()
4118 IWK_WRITE(sc, CSR_EEPROM_REG, addr<<1); in iwk_eep_load()
4119 tmp = IWK_READ(sc, CSR_EEPROM_REG); in iwk_eep_load()
4120 IWK_WRITE(sc, CSR_EEPROM_REG, tmp & ~(0x2)); in iwk_eep_load()
4123 rv = IWK_READ(sc, CSR_EEPROM_REG); in iwk_eep_load()
4131 iwk_eep_sem_up(sc); in iwk_eep_load()
4138 iwk_eep_sem_up(sc); in iwk_eep_load()
4145 static void iwk_get_mac_from_eep(iwk_sc_t *sc) in iwk_get_mac_from_eep() argument
4147 ieee80211com_t *ic = &sc->sc_ic; in iwk_get_mac_from_eep()
4148 struct iwk_eep *ep = &sc->sc_eep_map; in iwk_get_mac_from_eep()
4158 iwk_init(iwk_sc_t *sc) in iwk_init() argument
4164 mutex_enter(&sc->sc_glock); in iwk_init()
4165 sc->sc_flags &= ~IWK_F_FW_INIT; in iwk_init()
4167 (void) iwk_preinit(sc); in iwk_init()
4169 tmp = IWK_READ(sc, CSR_GP_CNTRL); in iwk_init()
4176 iwk_mac_access_enter(sc); in iwk_init()
4177 IWK_WRITE(sc, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwk_init()
4179 IWK_WRITE(sc, FH_RSCSR_CHNL0_RBDCB_WPTR_REG, 0); in iwk_init()
4180 IWK_WRITE(sc, FH_RSCSR_CHNL0_RBDCB_BASE_REG, in iwk_init()
4181 sc->sc_rxq.dma_desc.cookie.dmac_address >> 8); in iwk_init()
4183 IWK_WRITE(sc, FH_RSCSR_CHNL0_STTS_WPTR_REG, in iwk_init()
4184 ((uint32_t)(sc->sc_dma_sh.cookie.dmac_address + in iwk_init()
4187 IWK_WRITE(sc, FH_MEM_RCSR_CHNL0_CONFIG_REG, in iwk_init()
4193 iwk_mac_access_exit(sc); in iwk_init()
4194 IWK_WRITE(sc, FH_RSCSR_CHNL0_RBDCB_WPTR_REG, in iwk_init()
4198 iwk_mac_access_enter(sc); in iwk_init()
4199 iwk_reg_write(sc, SCD_TXFACT, 0); in iwk_init()
4202 iwk_reg_write(sc, IWK_FH_KW_MEM_ADDR_REG, in iwk_init()
4203 sc->sc_dma_kw.cookie.dmac_address >> 4); in iwk_init()
4206 IWK_WRITE(sc, FH_MEM_CBBC_QUEUE(qid), in iwk_init()
4207 sc->sc_txq[qid].dma_desc.cookie.dmac_address >> 8); in iwk_init()
4208 IWK_WRITE(sc, IWK_FH_TCSR_CHNL_TX_CONFIG_REG(qid), in iwk_init()
4212 iwk_mac_access_exit(sc); in iwk_init()
4215 IWK_WRITE(sc, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL); in iwk_init()
4216 IWK_WRITE(sc, CSR_UCODE_DRV_GP1_CLR, in iwk_init()
4220 IWK_WRITE(sc, CSR_INT, 0xffffffff); in iwk_init()
4223 IWK_WRITE(sc, CSR_INT_MASK, CSR_INI_SET_MASK); in iwk_init()
4225 IWK_WRITE(sc, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL); in iwk_init()
4226 IWK_WRITE(sc, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL); in iwk_init()
4231 (void) memcpy(sc->sc_dma_fw_data_bak.mem_va, in iwk_init()
4232 sc->sc_dma_fw_data.mem_va, in iwk_init()
4233 sc->sc_dma_fw_data.alength); in iwk_init()
4237 err = iwk_load_firmware(sc); in iwk_init()
4245 IWK_WRITE(sc, CSR_RESET, 0); in iwk_init()
4254 while (!(sc->sc_flags & IWK_F_FW_INIT)) { in iwk_init()
4255 if (cv_timedwait(&sc->sc_fw_cv, &sc->sc_glock, clk) < 0) in iwk_init()
4258 if (!(sc->sc_flags & IWK_F_FW_INIT)) { in iwk_init()
4268 err = iwk_config(sc); in iwk_init()
4275 mutex_exit(&sc->sc_glock); in iwk_init()
4280 mutex_exit(&sc->sc_glock); in iwk_init()
4285 iwk_stop(iwk_sc_t *sc) in iwk_stop() argument
4290 if (!(sc->sc_flags & IWK_F_QUIESCED)) in iwk_stop()
4291 mutex_enter(&sc->sc_glock); in iwk_stop()
4293 IWK_WRITE(sc, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET); in iwk_stop()
4295 IWK_WRITE(sc, CSR_INT_MASK, 0); in iwk_stop()
4296 IWK_WRITE(sc, CSR_INT, CSR_INI_SET_MASK); in iwk_stop()
4297 IWK_WRITE(sc, CSR_FH_INT_STATUS, 0xffffffff); in iwk_stop()
4301 iwk_reset_tx_ring(sc, &sc->sc_txq[i]); in iwk_stop()
4304 iwk_reset_rx_ring(sc); in iwk_stop()
4306 iwk_mac_access_enter(sc); in iwk_stop()
4307 iwk_reg_write(sc, ALM_APMG_CLK_DIS, APMG_CLK_REG_VAL_DMA_CLK_RQT); in iwk_stop()
4308 iwk_mac_access_exit(sc); in iwk_stop()
4312 iwk_stop_master(sc); in iwk_stop()
4314 sc->sc_tx_timer = 0; in iwk_stop()
4315 sc->sc_flags &= ~IWK_F_SCANNING; in iwk_stop()
4316 sc->sc_scan_pending = 0; in iwk_stop()
4318 tmp = IWK_READ(sc, CSR_RESET); in iwk_stop()
4319 IWK_WRITE(sc, CSR_RESET, tmp | CSR_RESET_REG_FLAG_SW_RESET); in iwk_stop()
4321 if (!(sc->sc_flags & IWK_F_QUIESCED)) in iwk_stop()
4322 mutex_exit(&sc->sc_glock); in iwk_stop()
4362 iwk_amrr_timeout(iwk_sc_t *sc) in iwk_amrr_timeout() argument
4364 ieee80211com_t *ic = &sc->sc_ic; in iwk_amrr_timeout()
4371 sc->sc_clk = ddi_get_lbolt(); in iwk_amrr_timeout()
4426 static int32_t iwk_curr_tempera(iwk_sc_t *sc) in iwk_curr_tempera() argument
4433 if (iwk_is_fat_channel(sc)) { in iwk_curr_tempera()
4434 r1 = (int32_t)LE_32(sc->sc_card_alive_init.therm_r1[1]); in iwk_curr_tempera()
4435 r2 = (int32_t)LE_32(sc->sc_card_alive_init.therm_r2[1]); in iwk_curr_tempera()
4436 r3 = (int32_t)LE_32(sc->sc_card_alive_init.therm_r3[1]); in iwk_curr_tempera()
4437 r4_u = LE_32(sc->sc_card_alive_init.therm_r4[1]); in iwk_curr_tempera()
4439 r1 = (int32_t)LE_32(sc->sc_card_alive_init.therm_r1[0]); in iwk_curr_tempera()
4440 r2 = (int32_t)LE_32(sc->sc_card_alive_init.therm_r2[0]); in iwk_curr_tempera()
4441 r3 = (int32_t)LE_32(sc->sc_card_alive_init.therm_r3[0]); in iwk_curr_tempera()
4442 r4_u = LE_32(sc->sc_card_alive_init.therm_r4[0]); in iwk_curr_tempera()
4445 if (sc->sc_flags & IWK_F_STATISTICS) { in iwk_curr_tempera()
4446 r4_s = (int32_t)(LE_32(sc->sc_statistics.general.temperature) << in iwk_curr_tempera()
4473 static inline int iwk_is_24G_band(iwk_sc_t *sc) in iwk_is_24G_band() argument
4475 return (LE_32(sc->sc_config.flags) & RXON_FLG_BAND_24G_MSK); in iwk_is_24G_band()
4479 static inline int iwk_is_fat_channel(iwk_sc_t *sc) in iwk_is_fat_channel() argument
4481 return ((LE_32(sc->sc_config.flags) & in iwk_is_fat_channel()
4483 (LE_32(sc->sc_config.flags) & RXON_FLG_CHANNEL_MODE_MIXED_MSK)); in iwk_is_fat_channel()
4555 static struct iwk_eep_channel *iwk_get_eep_channel(iwk_sc_t *sc, in iwk_get_eep_channel() argument
4572 return (&sc->sc_eep_map.band_24_channels[i]); in iwk_get_eep_channel()
4577 return (&sc->sc_eep_map.band_52_channels[i]); in iwk_get_eep_channel()
4583 return (&sc->sc_eep_map.band_1_channels[i]); in iwk_get_eep_channel()
4589 return (&sc->sc_eep_map.band_2_channels[i]); in iwk_get_eep_channel()
4594 return (&sc->sc_eep_map.band_3_channels[i]); in iwk_get_eep_channel()
4599 return (&sc->sc_eep_map.band_4_channels[i]); in iwk_get_eep_channel()
4604 return (&sc->sc_eep_map.band_5_channels[i]); in iwk_get_eep_channel()
4616 static int32_t iwk_band_number(iwk_sc_t *sc, uint16_t channel) in iwk_band_number() argument
4621 if (0 == sc->sc_eep_map.calib_info.band_info_tbl[b_n].ch_from) { in iwk_band_number()
4626 (uint16_t)sc->sc_eep_map.calib_info. in iwk_band_number()
4629 (uint16_t)sc->sc_eep_map.calib_info. in iwk_band_number()
4673 static int iwk_channel_interpolate(iwk_sc_t *sc, uint16_t channel, in iwk_channel_interpolate() argument
4682 ban_n = iwk_band_number(sc, channel); in iwk_channel_interpolate()
4688 (uint32_t)sc->sc_eep_map.calib_info.band_info_tbl[ban_n].ch1.ch_num; in iwk_channel_interpolate()
4690 (uint32_t)sc->sc_eep_map.calib_info.band_info_tbl[ban_n].ch2.ch_num; in iwk_channel_interpolate()
4703 &(sc->sc_eep_map.calib_info. in iwk_channel_interpolate()
4706 &(sc->sc_eep_map.calib_info.band_info_tbl[ban_n]. in iwk_channel_interpolate()
4809 static int iwk_txpower_table_cmd_init(iwk_sc_t *sc, in iwk_txpower_table_cmd_init() argument
4837 channel = LE_16(sc->sc_config.chan); in iwk_txpower_table_cmd_init()
4840 is_24G = iwk_is_24G_band(sc); in iwk_txpower_table_cmd_init()
4843 is_fat = iwk_is_fat_channel(sc); in iwk_txpower_table_cmd_init()
4849 if (is_fat && (LE_32(sc->sc_config.flags) & in iwk_txpower_table_cmd_init()
4856 eep_chan_p = iwk_get_eep_channel(sc, channel, is_24G, in iwk_txpower_table_cmd_init()
4872 sc->sc_user_txpower = (int32_t)eep_chan_p->max_power_avg; in iwk_txpower_table_cmd_init()
4873 if (sc->sc_user_txpower < IWK_TX_POWER_TARGET_POWER_MIN) { in iwk_txpower_table_cmd_init()
4877 } else if (sc->sc_user_txpower > IWK_TX_POWER_TARGET_POWER_MAX) { in iwk_txpower_table_cmd_init()
4883 target_power = 2 * sc->sc_user_txpower; in iwk_txpower_table_cmd_init()
4903 sc->sc_eep_map.calib_info.saturation_power24; in iwk_txpower_table_cmd_init()
4906 sc->sc_eep_map.calib_info.saturation_power52; in iwk_txpower_table_cmd_init()
4933 (void) iwk_channel_interpolate(sc, channel, &eep_chan_calib); in iwk_txpower_table_cmd_init()
4935 eep_voltage = (int32_t)LE_16(sc->sc_eep_map.calib_info.voltage); in iwk_txpower_table_cmd_init()
4936 init_voltage = (int32_t)LE_32(sc->sc_card_alive_init.voltage); in iwk_txpower_table_cmd_init()
4942 if (sc->sc_tempera >= IWK_TX_POWER_TEMPERATURE_MIN) { in iwk_txpower_table_cmd_init()
4943 temperature = sc->sc_tempera; in iwk_txpower_table_cmd_init()
4947 if (sc->sc_tempera <= IWK_TX_POWER_TEMPERATURE_MAX) { in iwk_txpower_table_cmd_init()
4948 temperature = sc->sc_tempera; in iwk_txpower_table_cmd_init()
4999 LE_32(sc->sc_card_alive_init. in iwk_txpower_table_cmd_init()
5067 static int iwk_tx_power_calibration(iwk_sc_t *sc) in iwk_tx_power_calibration() argument
5072 if (sc->sc_flags & IWK_F_SCANNING) { in iwk_tx_power_calibration()
5077 cmd.band = (uint8_t)iwk_is_24G_band(sc); in iwk_tx_power_calibration()
5078 cmd.channel = sc->sc_config.chan; in iwk_tx_power_calibration()
5082 rv = iwk_txpower_table_cmd_init(sc, &cmd.tx_power); in iwk_tx_power_calibration()
5089 rv = iwk_cmd(sc, REPLY_TX_PWR_TABLE_CMD, &cmd, sizeof (cmd), 1); in iwk_tx_power_calibration()
5095 sc->sc_last_tempera = sc->sc_tempera; in iwk_tx_power_calibration()
5101 static void iwk_statistics_notify(iwk_sc_t *sc, iwk_rx_desc_t *desc) in iwk_statistics_notify() argument
5107 mutex_enter(&sc->sc_glock); in iwk_statistics_notify()
5109 is_diff = (sc->sc_statistics.general.temperature != in iwk_statistics_notify()
5111 (LE_32(sc->sc_statistics.flag) & in iwk_statistics_notify()
5116 (void) memcpy(&sc->sc_statistics, statistics_p, in iwk_statistics_notify()
5119 sc->sc_flags |= IWK_F_STATISTICS; in iwk_statistics_notify()
5121 if (!(sc->sc_flags & IWK_F_SCANNING)) { in iwk_statistics_notify()
5123 (void) iwk_rxgain_diff(sc); in iwk_statistics_notify()
5126 (void) iwk_rx_sens(sc); in iwk_statistics_notify()
5131 mutex_exit(&sc->sc_glock); in iwk_statistics_notify()
5136 sc->sc_tempera = iwk_curr_tempera(sc); in iwk_statistics_notify()
5139 if (((sc->sc_tempera - sc->sc_last_tempera) >= 3) || in iwk_statistics_notify()
5140 ((sc->sc_last_tempera - sc->sc_tempera) >= 3)) { in iwk_statistics_notify()
5142 (void) iwk_tx_power_calibration(sc); in iwk_statistics_notify()
5145 mutex_exit(&sc->sc_glock); in iwk_statistics_notify()
5149 static int iwk_is_associated(iwk_sc_t *sc) in iwk_is_associated() argument
5151 return (LE_32(sc->sc_config.filter_flags) & RXON_FILTER_ASSOC_MSK); in iwk_is_associated()
5155 static int iwk_rxgain_diff_init(iwk_sc_t *sc) in iwk_rxgain_diff_init() argument
5161 gain_diff_p = &sc->sc_rxgain_diff; in iwk_rxgain_diff_init()
5170 if (iwk_is_associated(sc)) { in iwk_rxgain_diff_init()
5177 rv = iwk_cmd(sc, REPLY_PHY_CALIBRATION_CMD, &cmd, in iwk_rxgain_diff_init()
5193 static int iwk_rxgain_diff(iwk_sc_t *sc) in iwk_rxgain_diff() argument
5207 &sc->sc_statistics.rx.general; in iwk_rxgain_diff()
5208 struct iwk_rx_gain_diff *gain_diff_p = &sc->sc_rxgain_diff; in iwk_rxgain_diff()
5219 is_24G = iwk_is_24G_band(sc); in iwk_rxgain_diff()
5220 channel_n = sc->sc_config.chan; /* channel number */ in iwk_rxgain_diff()
5222 if ((channel_n != (LE_32(sc->sc_statistics.flag) >> 16)) || in iwk_rxgain_diff()
5224 (LE_32(sc->sc_statistics.flag) & in iwk_rxgain_diff()
5366 rv = iwk_cmd(sc, REPLY_PHY_CALIBRATION_CMD, in iwk_rxgain_diff()
5388 static int iwk_rx_sens_init(iwk_sc_t *sc) in iwk_rx_sens_init() argument
5392 struct iwk_rx_sensitivity *rx_sens_p = &sc->sc_rx_sens; in iwk_rx_sens_init()
5458 rv = iwk_cmd(sc, SENSITIVITY_CMD, &cmd, sizeof (cmd), 1); in iwk_rx_sens_init()
5475 static int iwk_rx_sens(iwk_sc_t *sc) in iwk_rx_sens() argument
5480 &sc->sc_statistics.rx.general; in iwk_rx_sens()
5481 struct iwk_rx_sensitivity *rx_sens_p = &sc->sc_rx_sens; in iwk_rx_sens()
5507 rv = iwk_ofdm_sens(sc, actual_rx_time); in iwk_rx_sens()
5513 rv = iwk_cck_sens(sc, actual_rx_time); in iwk_rx_sens()
5552 rv = iwk_cmd(sc, SENSITIVITY_CMD, &cmd, sizeof (cmd), 1); in iwk_rx_sens()
5567 static int iwk_cck_sens(iwk_sc_t *sc, uint32_t actual_rx_time) in iwk_cck_sens() argument
5578 &sc->sc_statistics.rx.general; in iwk_cck_sens()
5579 struct iwk_rx_sensitivity *rx_sens_p = &sc->sc_rx_sens; in iwk_cck_sens()
5581 cck_fa = LE_32(sc->sc_statistics.rx.cck.false_alarm_cnt); in iwk_cck_sens()
5582 cck_bp = LE_32(sc->sc_statistics.rx.cck.plcp_err); in iwk_cck_sens()
5772 static int iwk_ofdm_sens(iwk_sc_t *sc, uint32_t actual_rx_time) in iwk_ofdm_sens() argument
5778 struct iwk_rx_sensitivity *rx_sens_p = &sc->sc_rx_sens; in iwk_ofdm_sens()
5780 ofdm_fa = LE_32(sc->sc_statistics.rx.ofdm.false_alarm_cnt); in iwk_ofdm_sens()
5781 ofdm_bp = LE_32(sc->sc_statistics.rx.ofdm.plcp_err); in iwk_ofdm_sens()
5856 iwk_sc_t *sc = (iwk_sc_t *)ic; in iwk_recv_mgmt() local
5861 sc->sc_recv_mgmt(ic, mp, in, subtype, rssi, rstamp); in iwk_recv_mgmt()
5863 mutex_enter(&sc->sc_glock); in iwk_recv_mgmt()
5866 if (sc->sc_ibss.ibss_beacon.syncbeacon && in == ic->ic_bss && in iwk_recv_mgmt()
5869 &sc->sc_ibss.ibss_beacon.iwk_boff, in iwk_recv_mgmt()
5870 sc->sc_ibss.ibss_beacon.mp, 0)) { in iwk_recv_mgmt()
5871 bcopy(sc->sc_ibss.ibss_beacon.mp->b_rptr, in iwk_recv_mgmt()
5872 sc->sc_ibss.ibss_beacon.beacon_cmd. in iwk_recv_mgmt()
5874 MBLKL(sc->sc_ibss.ibss_beacon.mp)); in iwk_recv_mgmt()
5876 err = iwk_cmd(sc, REPLY_TX_BEACON, in iwk_recv_mgmt()
5877 &sc->sc_ibss.ibss_beacon.beacon_cmd, in iwk_recv_mgmt()
5878 sc->sc_ibss.ibss_beacon.beacon_cmd_len, 1); in iwk_recv_mgmt()
5883 sc->sc_ibss.ibss_beacon.syncbeacon = 0; in iwk_recv_mgmt()
5888 mutex_enter(&sc->sc_ibss.node_tb_lock); in iwk_recv_mgmt()
5894 if (sc->sc_ibss.ibss_node_tb[index1].used && in iwk_recv_mgmt()
5895 IEEE80211_ADDR_EQ(sc->sc_ibss. in iwk_recv_mgmt()
5913 mutex_exit(&sc->sc_ibss.node_tb_lock); in iwk_recv_mgmt()
5919 mutex_exit(&sc->sc_glock); in iwk_recv_mgmt()
5945 static void iwk_write_event_log(iwk_sc_t *sc) in iwk_write_event_log() argument
5959 log_event_table_ptr = LE_32(sc->sc_card_alive_run.log_event_table_ptr); in iwk_write_event_log()
5965 iwk_mac_access_enter(sc); in iwk_write_event_log()
5968 log_size = iwk_mem_read(sc, log_event_table_ptr); in iwk_write_event_log()
5970 type = iwk_mem_read(sc, log_event_table_ptr); in iwk_write_event_log()
5972 wraps = iwk_mem_read(sc, log_event_table_ptr); in iwk_write_event_log()
5974 idx = iwk_mem_read(sc, log_event_table_ptr); in iwk_write_event_log()
5979 iwk_mac_access_exit(sc); in iwk_write_event_log()
5993 event_id = iwk_mem_read(sc, logptr); in iwk_write_event_log()
5995 data1 = iwk_mem_read(sc, logptr); in iwk_write_event_log()
6001 data2 = iwk_mem_read(sc, logptr); in iwk_write_event_log()
6015 event_id = iwk_mem_read(sc, logptr); in iwk_write_event_log()
6017 data1 = iwk_mem_read(sc, logptr); in iwk_write_event_log()
6023 data2 = iwk_mem_read(sc, logptr); in iwk_write_event_log()
6032 iwk_mac_access_exit(sc); in iwk_write_event_log()
6056 static void iwk_write_error_log(iwk_sc_t *sc) in iwk_write_error_log() argument
6061 err_ptr = LE_32(sc->sc_card_alive_run.error_event_table_ptr); in iwk_write_error_log()
6067 iwk_mac_access_enter(sc); in iwk_write_error_log()
6069 valid = iwk_mem_read(sc, err_ptr); in iwk_write_error_log()
6072 iwk_mac_access_exit(sc); in iwk_write_error_log()
6076 IWK_DBG((IWK_DEBUG_EEPROM, "err=%d ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6078 IWK_DBG((IWK_DEBUG_EEPROM, "pc=0x%X ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6081 "branch link1=0x%X ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6084 "branch link2=0x%X ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6087 "interrupt link1=0x%X ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6090 "interrupt link2=0x%X ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6092 IWK_DBG((IWK_DEBUG_EEPROM, "data1=0x%X ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6094 IWK_DBG((IWK_DEBUG_EEPROM, "data2=0x%X ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6096 IWK_DBG((IWK_DEBUG_EEPROM, "line=%d ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6098 IWK_DBG((IWK_DEBUG_EEPROM, "bcon_time=%d ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6100 IWK_DBG((IWK_DEBUG_EEPROM, "tsf_low=%d ", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6102 IWK_DBG((IWK_DEBUG_EEPROM, "tsf_hi=%d\n", iwk_mem_read(sc, err_ptr))); in iwk_write_error_log()
6104 iwk_mac_access_exit(sc); in iwk_write_error_log()
6110 iwk_sc_t *sc = (iwk_sc_t *)ic; in iwk_run_state_config_ibss() local
6114 mutex_enter(&sc->sc_ibss.node_tb_lock); in iwk_run_state_config_ibss()
6121 sc->sc_ibss.ibss_node_tb[i].used = 0; in iwk_run_state_config_ibss()
6122 (void) memset(&sc->sc_ibss.ibss_node_tb[i].node, in iwk_run_state_config_ibss()
6127 sc->sc_ibss.node_number = 0; in iwk_run_state_config_ibss()
6129 mutex_exit(&sc->sc_ibss.node_tb_lock); in iwk_run_state_config_ibss()
6134 sc->sc_config.dev_type = RXON_DEV_TYPE_IBSS; in iwk_run_state_config_ibss()
6136 sc->sc_config.flags |= LE_32(RXON_FLG_SHORT_PREAMBLE_MSK); in iwk_run_state_config_ibss()
6137 sc->sc_config.filter_flags = in iwk_run_state_config_ibss()
6142 sc->sc_config.assoc_id = 0; in iwk_run_state_config_ibss()
6144 IEEE80211_ADDR_COPY(sc->sc_config.bssid, in->in_bssid); in iwk_run_state_config_ibss()
6145 sc->sc_config.chan = LE_16(ieee80211_chan2ieee(ic, in iwk_run_state_config_ibss()
6149 sc->sc_config.cck_basic_rates = 0x03; in iwk_run_state_config_ibss()
6150 sc->sc_config.ofdm_basic_rates = 0; in iwk_run_state_config_ibss()
6153 sc->sc_config.cck_basic_rates = 0; in iwk_run_state_config_ibss()
6154 sc->sc_config.ofdm_basic_rates = 0x15; in iwk_run_state_config_ibss()
6157 sc->sc_config.cck_basic_rates = 0x0f; in iwk_run_state_config_ibss()
6158 sc->sc_config.ofdm_basic_rates = 0xff; in iwk_run_state_config_ibss()
6161 sc->sc_config.flags &= in iwk_run_state_config_ibss()
6166 sc->sc_config.flags |= in iwk_run_state_config_ibss()
6171 sc->sc_config.flags |= in iwk_run_state_config_ibss()
6175 sc->sc_config.filter_flags |= in iwk_run_state_config_ibss()
6178 err = iwk_cmd(sc, REPLY_RXON, &sc->sc_config, in iwk_run_state_config_ibss()
6193 iwk_sc_t *sc = (iwk_sc_t *)ic; in iwk_run_state_config_sta() local
6198 if (sc->sc_assoc_id != in->in_associd) { in iwk_run_state_config_sta()
6202 in->in_associd, sc->sc_assoc_id); in iwk_run_state_config_sta()
6204 sc->sc_config.assoc_id = LE_16(in->in_associd & 0x3fff); in iwk_run_state_config_sta()
6210 sc->sc_config.flags &= in iwk_run_state_config_sta()
6215 sc->sc_config.flags |= in iwk_run_state_config_sta()
6219 sc->sc_config.flags |= in iwk_run_state_config_sta()
6222 sc->sc_config.filter_flags |= in iwk_run_state_config_sta()
6226 sc->sc_config.filter_flags |= in iwk_run_state_config_sta()
6231 sc->sc_config.chan, sc->sc_config.flags, in iwk_run_state_config_sta()
6232 sc->sc_config.filter_flags)); in iwk_run_state_config_sta()
6234 err = iwk_cmd(sc, REPLY_RXON, &sc->sc_config, in iwk_run_state_config_sta()
6246 iwk_fast_recover(iwk_sc_t *sc) in iwk_fast_recover() argument
6248 ieee80211com_t *ic = &sc->sc_ic; in iwk_fast_recover()
6251 mutex_enter(&sc->sc_glock); in iwk_fast_recover()
6254 bcopy(&sc->sc_config_save, &sc->sc_config, in iwk_fast_recover()
6255 sizeof (sc->sc_config)); in iwk_fast_recover()
6258 sc->sc_config.assoc_id = 0; in iwk_fast_recover()
6259 sc->sc_config.filter_flags &= in iwk_fast_recover()
6262 if ((err = iwk_hw_set_before_auth(sc)) != 0) { in iwk_fast_recover()
6265 mutex_exit(&sc->sc_glock); in iwk_fast_recover()
6269 bcopy(&sc->sc_config_save, &sc->sc_config, in iwk_fast_recover()
6270 sizeof (sc->sc_config)); in iwk_fast_recover()
6277 mutex_exit(&sc->sc_glock); in iwk_fast_recover()
6282 sc->sc_tempera = iwk_curr_tempera(sc); in iwk_fast_recover()
6288 err = iwk_tx_power_calibration(sc); in iwk_fast_recover()
6292 mutex_exit(&sc->sc_glock); in iwk_fast_recover()
6300 err = iwk_rx_sens_init(sc); in iwk_fast_recover()
6304 mutex_exit(&sc->sc_glock); in iwk_fast_recover()
6309 err = iwk_rxgain_diff_init(sc); in iwk_fast_recover()
6313 mutex_exit(&sc->sc_glock); in iwk_fast_recover()
6318 iwk_set_led(sc, 2, 0, 1); in iwk_fast_recover()
6320 mutex_exit(&sc->sc_glock); in iwk_fast_recover()
6338 sc->sc_flags &= ~IWK_F_HW_ERR_RECOVER; in iwk_fast_recover()
6351 iwk_sc_t *sc = (iwk_sc_t *)ic; in iwk_start_tx_beacon() local
6362 tx_beacon_p = &sc->sc_ibss.ibss_beacon.beacon_cmd; in iwk_start_tx_beacon()
6373 if (sc->sc_ibss.ibss_beacon.mp != NULL) { in iwk_start_tx_beacon()
6374 freemsg(sc->sc_ibss.ibss_beacon.mp); in iwk_start_tx_beacon()
6375 sc->sc_ibss.ibss_beacon.mp = NULL; in iwk_start_tx_beacon()
6378 sc->sc_ibss.ibss_beacon.mp = in iwk_start_tx_beacon()
6380 &sc->sc_ibss.ibss_beacon.iwk_boff); in iwk_start_tx_beacon()
6381 if (sc->sc_ibss.ibss_beacon.mp == NULL) { in iwk_start_tx_beacon()
6387 mp = sc->sc_ibss.ibss_beacon.mp; in iwk_start_tx_beacon()
6394 sc->sc_ibss.ibss_beacon.beacon_cmd_len = in iwk_start_tx_beacon()
6419 sc->sc_ibss.ibss_beacon.syncbeacon = 1; in iwk_start_tx_beacon()
6422 &sc->sc_ibss.ibss_beacon.iwk_boff, in iwk_start_tx_beacon()
6429 err = iwk_cmd(sc, REPLY_TX_BEACON, in iwk_start_tx_beacon()
6431 sc->sc_ibss.ibss_beacon.beacon_cmd_len, in iwk_start_tx_beacon()
6439 sc->sc_ibss.ibss_beacon.syncbeacon = 0; in iwk_start_tx_beacon()
6449 iwk_sc_t *sc = (iwk_sc_t *)ic; in iwk_clean_add_node_ibss() local
6467 if (!sc->sc_ibss.ibss_node_tb[index].used) { in iwk_clean_add_node_ibss()
6476 sc->sc_ibss.node_number >= 25) { in iwk_clean_add_node_ibss()
6477 if (iwk_cmd(sc, REPLY_REMOVE_ALL_STA, in iwk_clean_add_node_ibss()
6485 sc->sc_ibss.ibss_node_tb[i].used = 0; in iwk_clean_add_node_ibss()
6486 (void) memset(&sc->sc_ibss.ibss_node_tb[i].node, in iwk_clean_add_node_ibss()
6490 sc->sc_ibss.node_number = 0; in iwk_clean_add_node_ibss()
6500 err = iwk_cmd(sc, REPLY_ADD_STA, &bc_node, sizeof (bc_node), 1); in iwk_clean_add_node_ibss()
6523 err = iwk_cmd(sc, REPLY_TX_LINK_QUALITY_CMD, in iwk_clean_add_node_ibss()
6541 ibss_node_p = &sc->sc_ibss.ibss_node_tb[index]; in iwk_clean_add_node_ibss()
6553 err = iwk_cmd(sc, REPLY_ADD_STA, &ibss_node_p->node, in iwk_clean_add_node_ibss()
6564 sc->sc_ibss.node_number++; in iwk_clean_add_node_ibss()
6597 err = iwk_cmd(sc, REPLY_TX_LINK_QUALITY_CMD, in iwk_clean_add_node_ibss()