Lines Matching refs:sc

137 static void	ipw2200_hwconf_get(struct ipw2200_softc *sc);
138 static int ipw2200_chip_reset(struct ipw2200_softc *sc);
139 static void ipw2200_master_stop(struct ipw2200_softc *sc);
140 static void ipw2200_stop(struct ipw2200_softc *sc);
141 static int ipw2200_config(struct ipw2200_softc *sc);
142 static int ipw2200_cmd(struct ipw2200_softc *sc,
144 static void ipw2200_ring_hwsetup(struct ipw2200_softc *sc);
145 static int ipw2200_ring_alloc(struct ipw2200_softc *sc);
146 static void ipw2200_ring_free(struct ipw2200_softc *sc);
147 static void ipw2200_ring_reset(struct ipw2200_softc *sc);
148 static int ipw2200_ring_init(struct ipw2200_softc *sc);
173 static void ipw2200_rcv_frame(struct ipw2200_softc *sc,
175 static void ipw2200_rcv_notif(struct ipw2200_softc *sc,
183 static void ipw2200_thread(struct ipw2200_softc *sc);
188 static int ipw2200_ioctl(struct ipw2200_softc *sc, queue_t *q, mblk_t *m);
189 static int ipw2200_getset(struct ipw2200_softc *sc,
191 static int iwi_wificfg_radio(struct ipw2200_softc *sc,
289 ipw2200_setup_pci(dev_info_t *dip, struct ipw2200_softc *sc) in ipw2200_setup_pci() argument
308 sc->sc_vendor = ddi_get16(cfgh, in ipw2200_setup_pci()
310 sc->sc_device = ddi_get16(cfgh, in ipw2200_setup_pci()
312 sc->sc_subven = ddi_get16(cfgh, in ipw2200_setup_pci()
314 sc->sc_subdev = ddi_get16(cfgh, in ipw2200_setup_pci()
316 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_setup_pci()
319 sc->sc_vendor, sc->sc_device, sc->sc_subven, sc->sc_subdev)); in ipw2200_setup_pci()
333 struct ipw2200_softc *sc; in ipw2200_attach() local
344 sc = ddi_get_soft_state(ipw2200_ssp, ddi_get_instance(dip)); in ipw2200_attach()
345 ASSERT(sc != NULL); in ipw2200_attach()
350 err = ipw2200_setup_pci(dip, sc); in ipw2200_attach()
352 IPW2200_DBG(IPW2200_DBG_SUSPEND, (sc->sc_dip, CE_CONT, in ipw2200_attach()
361 sc->sc_flags &= ~IPW2200_FLAG_SUSPEND; in ipw2200_attach()
362 if (sc->sc_flags & IPW2200_FLAG_RUNNING) in ipw2200_attach()
363 (void) ipw2200_init(sc); in ipw2200_attach()
365 IPW2200_DBG(IPW2200_DBG_SUSPEND, (sc->sc_dip, CE_CONT, in ipw2200_attach()
379 sc = ddi_get_soft_state(ipw2200_ssp, instance); in ipw2200_attach()
380 sc->sc_dip = dip; in ipw2200_attach()
383 err = ipw2200_setup_pci(dip, sc); in ipw2200_attach()
393 err = ddi_regs_map_setup(dip, IPW2200_PCI_CSR_RNUM, &sc->sc_regs, in ipw2200_attach()
394 0, 0, &ipw2200_csr_accattr, &sc->sc_ioh); in ipw2200_attach()
404 err = ipw2200_chip_reset(sc); in ipw2200_attach()
415 ipw2200_hwconf_get(sc); in ipw2200_attach()
416 err = ipw2200_ring_init(sc); in ipw2200_attach()
426 err = ddi_get_iblock_cookie(dip, 0, &sc->sc_iblk); in ipw2200_attach()
436 mutex_init(&sc->sc_ilock, "intr-lock", MUTEX_DRIVER, in ipw2200_attach()
437 (void *) sc->sc_iblk); in ipw2200_attach()
438 cv_init(&sc->sc_fw_cond, "firmware-ok", CV_DRIVER, NULL); in ipw2200_attach()
439 cv_init(&sc->sc_cmd_status_cond, "cmd-status-ring", CV_DRIVER, NULL); in ipw2200_attach()
444 mutex_init(&sc->sc_cmd_lock, "cmd-ring", MUTEX_DRIVER, in ipw2200_attach()
445 (void *) sc->sc_iblk); in ipw2200_attach()
446 cv_init(&sc->sc_cmd_cond, "cmd-ring", CV_DRIVER, NULL); in ipw2200_attach()
451 mutex_init(&sc->sc_tx_lock, "tx-ring", MUTEX_DRIVER, in ipw2200_attach()
452 (void *) sc->sc_iblk); in ipw2200_attach()
457 mutex_init(&sc->sc_resched_lock, "reschedule-lock", MUTEX_DRIVER, in ipw2200_attach()
458 (void *) sc->sc_iblk); in ipw2200_attach()
463 mutex_init(&sc->sc_mflock, "function-lock", MUTEX_DRIVER, in ipw2200_attach()
464 (void *) sc->sc_iblk); in ipw2200_attach()
465 cv_init(&sc->sc_mfthread_cv, NULL, CV_DRIVER, NULL); in ipw2200_attach()
466 sc->sc_mf_thread = NULL; in ipw2200_attach()
467 sc->sc_mfthread_switch = 0; in ipw2200_attach()
472 ic = &sc->sc_ic; in ipw2200_attach()
486 IEEE80211_ADDR_COPY(ic->ic_macaddr, sc->sc_macaddr); in ipw2200_attach()
491 if (sc->sc_device >= 0x4223) { in ipw2200_attach()
546 sc->sc_newstate = ic->ic_newstate; in ipw2200_attach()
549 sc->sc_authmode = IEEE80211_AUTH_OPEN; in ipw2200_attach()
554 err = ddi_add_intr(dip, 0, &sc->sc_iblk, NULL, in ipw2200_attach()
555 ipw2200_intr, (caddr_t)sc); in ipw2200_attach()
577 macp->m_driver = sc; in ipw2200_attach()
611 (void) ipw2200_cache_firmware(sc); in ipw2200_attach()
622 sc->sc_mfthread_switch = 1; in ipw2200_attach()
623 if (sc->sc_mf_thread == NULL) in ipw2200_attach()
624 sc->sc_mf_thread = thread_create((caddr_t)NULL, 0, in ipw2200_attach()
625 ipw2200_thread, sc, 0, &p0, TS_RUN, minclsyspri); in ipw2200_attach()
630 ddi_remove_intr(dip, 0, sc->sc_iblk); in ipw2200_attach()
634 mutex_destroy(&sc->sc_ilock); in ipw2200_attach()
635 mutex_destroy(&sc->sc_cmd_lock); in ipw2200_attach()
636 mutex_destroy(&sc->sc_tx_lock); in ipw2200_attach()
637 mutex_destroy(&sc->sc_mflock); in ipw2200_attach()
638 mutex_destroy(&sc->sc_resched_lock); in ipw2200_attach()
639 cv_destroy(&sc->sc_fw_cond); in ipw2200_attach()
640 cv_destroy(&sc->sc_cmd_status_cond); in ipw2200_attach()
641 cv_destroy(&sc->sc_cmd_cond); in ipw2200_attach()
642 cv_destroy(&sc->sc_mfthread_cv); in ipw2200_attach()
644 ipw2200_ring_free(sc); in ipw2200_attach()
646 ddi_regs_map_free(&sc->sc_ioh); in ipw2200_attach()
657 struct ipw2200_softc *sc; in ipw2200_detach() local
660 sc = ddi_get_soft_state(ipw2200_ssp, ddi_get_instance(dip)); in ipw2200_detach()
661 ASSERT(sc != NULL); in ipw2200_detach()
667 if (sc->sc_flags & IPW2200_FLAG_RUNNING) { in ipw2200_detach()
668 ipw2200_stop(sc); in ipw2200_detach()
670 sc->sc_flags |= IPW2200_FLAG_SUSPEND; in ipw2200_detach()
672 IPW2200_DBG(IPW2200_DBG_SUSPEND, (sc->sc_dip, CE_CONT, in ipw2200_detach()
679 err = mac_disable(sc->sc_ic.ic_mach); in ipw2200_detach()
683 ipw2200_stop(sc); in ipw2200_detach()
688 mutex_enter(&sc->sc_mflock); in ipw2200_detach()
689 sc->sc_mfthread_switch = 0; in ipw2200_detach()
690 while (sc->sc_mf_thread != NULL) { in ipw2200_detach()
691 if (cv_wait_sig(&sc->sc_mfthread_cv, &sc->sc_mflock) == 0) in ipw2200_detach()
694 mutex_exit(&sc->sc_mflock); in ipw2200_detach()
699 (void) mac_unregister(sc->sc_ic.ic_mach); in ipw2200_detach()
701 ddi_remove_intr(dip, IPW2200_PCI_INTR_NUM, sc->sc_iblk); in ipw2200_detach()
703 mutex_destroy(&sc->sc_ilock); in ipw2200_detach()
704 mutex_destroy(&sc->sc_cmd_lock); in ipw2200_detach()
705 mutex_destroy(&sc->sc_tx_lock); in ipw2200_detach()
706 mutex_destroy(&sc->sc_mflock); in ipw2200_detach()
707 mutex_destroy(&sc->sc_resched_lock); in ipw2200_detach()
708 cv_destroy(&sc->sc_fw_cond); in ipw2200_detach()
709 cv_destroy(&sc->sc_cmd_status_cond); in ipw2200_detach()
710 cv_destroy(&sc->sc_cmd_cond); in ipw2200_detach()
711 cv_destroy(&sc->sc_mfthread_cv); in ipw2200_detach()
716 ieee80211_detach(&sc->sc_ic); in ipw2200_detach()
718 (void) ipw2200_free_firmware(sc); in ipw2200_detach()
719 ipw2200_ring_free(sc); in ipw2200_detach()
721 ddi_regs_map_free(&sc->sc_ioh); in ipw2200_detach()
739 struct ipw2200_softc *sc = in ipw2200_quiesce() local
741 if (sc == NULL) in ipw2200_quiesce()
751 sc->sc_flags |= IPW2200_FLAG_QUIESCED; in ipw2200_quiesce()
756 ipw2200_master_stop(sc); in ipw2200_quiesce()
757 ipw2200_csr_put32(sc, IPW2200_CSR_RST, IPW2200_RST_SW_RESET); in ipw2200_quiesce()
762 ipw2200_stop(struct ipw2200_softc *sc) in ipw2200_stop() argument
764 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_stop()
766 IPW2200_DBG(IPW2200_DBG_HWCAP, (sc->sc_dip, CE_CONT, in ipw2200_stop()
769 ipw2200_master_stop(sc); in ipw2200_stop()
770 ipw2200_csr_put32(sc, IPW2200_CSR_RST, IPW2200_RST_SW_RESET); in ipw2200_stop()
775 ipw2200_ring_reset(sc); in ipw2200_stop()
778 sc->sc_flags &= ~IPW2200_FLAG_SCANNING; in ipw2200_stop()
779 sc->sc_flags &= ~IPW2200_FLAG_ASSOCIATED; in ipw2200_stop()
781 IPW2200_DBG(IPW2200_DBG_HWCAP, (sc->sc_dip, CE_CONT, in ipw2200_stop()
786 ipw2200_config(struct ipw2200_softc *sc) in ipw2200_config() argument
788 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_config()
806 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
808 err = ipw2200_cmd(sc, IPW2200_CMD_SET_TX_POWER, in ipw2200_config()
814 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
816 err = ipw2200_cmd(sc, IPW2200_CMD_SET_TX_POWER, in ipw2200_config()
825 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
830 err = ipw2200_cmd(sc, IPW2200_CMD_SET_MAC_ADDRESS, ic->ic_macaddr, in ipw2200_config()
846 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
848 err = ipw2200_cmd(sc, IPW2200_CMD_SET_CONFIG, in ipw2200_config()
857 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
859 err = ipw2200_cmd(sc, IPW2200_CMD_SET_POWER_MODE, in ipw2200_config()
872 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
874 err = ipw2200_cmd(sc, IPW2200_CMD_SET_RATES, &rs, sizeof (rs), 0); in ipw2200_config()
883 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
885 err = ipw2200_cmd(sc, IPW2200_CMD_SET_RATES, &rs, sizeof (rs), 0); in ipw2200_config()
893 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
895 err = ipw2200_cmd(sc, IPW2200_CMD_SET_RTS_THRESHOLD, &data, in ipw2200_config()
904 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
907 err = ipw2200_cmd(sc, IPW2200_CMD_SET_FRAG_THRESHOLD, &data, in ipw2200_config()
916 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
924 err = ipw2200_cmd(sc, IPW2200_CMD_SET_ESSID, ic->ic_des_essid, in ipw2200_config()
934 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
937 err = ipw2200_cmd(sc, IPW2200_CMD_SET_IV, &data, sizeof (data), 0); in ipw2200_config()
945 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
956 err = ipw2200_cmd(sc, IPW2200_CMD_SET_WEP_KEY, in ipw2200_config()
963 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_config()
966 return (ipw2200_cmd(sc, IPW2200_CMD_ENABLE, NULL, 0, 0)); in ipw2200_config()
970 ipw2200_cmd(struct ipw2200_softc *sc, in ipw2200_cmd() argument
977 mutex_enter(&sc->sc_cmd_lock); in ipw2200_cmd()
978 while (sc->sc_cmd_free < 1) in ipw2200_cmd()
979 cv_wait(&sc->sc_cmd_cond, &sc->sc_cmd_lock); in ipw2200_cmd()
981 idx = sc->sc_cmd_cur; in ipw2200_cmd()
982 cmd = &sc->sc_cmdsc[idx]; in ipw2200_cmd()
985 IPW2200_DBG(IPW2200_DBG_RING, (sc->sc_dip, CE_CONT, in ipw2200_cmd()
997 sc->sc_done[idx] = 0; in ipw2200_cmd()
1002 (void) ddi_dma_sync(sc->sc_dma_cmdsc.dr_hnd, in ipw2200_cmd()
1006 sc->sc_cmd_cur = RING_FORWARD(sc->sc_cmd_cur, 1, IPW2200_CMD_RING_SIZE); in ipw2200_cmd()
1007 sc->sc_cmd_free--; in ipw2200_cmd()
1009 ipw2200_csr_put32(sc, IPW2200_CSR_CMD_WRITE_INDEX, sc->sc_cmd_cur); in ipw2200_cmd()
1011 mutex_exit(&sc->sc_cmd_lock); in ipw2200_cmd()
1020 mutex_enter(&sc->sc_ilock); in ipw2200_cmd()
1021 while (sc->sc_done[idx] == 0) { in ipw2200_cmd()
1023 if (cv_reltimedwait(&sc->sc_cmd_status_cond, &sc->sc_ilock, in ipw2200_cmd()
1027 mutex_exit(&sc->sc_ilock); in ipw2200_cmd()
1029 IPW2200_DBG(IPW2200_DBG_RING, (sc->sc_dip, CE_CONT, in ipw2200_cmd()
1030 "ipw2200_cmd(): cmd-done=%s\n", sc->sc_done[idx] ? "yes" : "no")); in ipw2200_cmd()
1032 if (sc->sc_done[idx] == 0) in ipw2200_cmd()
1045 ipw2200_init(struct ipw2200_softc *sc) in ipw2200_init() argument
1052 if (!(sc->sc_flags & IPW2200_FLAG_FW_CACHED)) { in ipw2200_init()
1053 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_init()
1058 ipw2200_stop(sc); in ipw2200_init()
1060 err = ipw2200_chip_reset(sc); in ipw2200_init()
1062 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_init()
1070 err = ipw2200_load_fw(sc, sc->sc_fw.boot_base, sc->sc_fw.boot_size); in ipw2200_init()
1072 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_init()
1080 err = ipw2200_load_uc(sc, sc->sc_fw.uc_base, sc->sc_fw.uc_size); in ipw2200_init()
1082 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_init()
1087 ipw2200_master_stop(sc); in ipw2200_init()
1088 ipw2200_ring_hwsetup(sc); in ipw2200_init()
1093 err = ipw2200_load_fw(sc, sc->sc_fw.fw_base, sc->sc_fw.fw_size); in ipw2200_init()
1095 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_init()
1100 sc->sc_flags |= IPW2200_FLAG_FW_INITED; in ipw2200_init()
1105 err = ipw2200_config(sc); in ipw2200_init()
1107 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_init()
1120 ipw2200_stop(sc); in ipw2200_init()
1128 ipw2200_hwconf_get(struct ipw2200_softc *sc) in ipw2200_hwconf_get() argument
1137 val = ipw2200_rom_get16(sc, IPW2200_EEPROM_MAC + 0); in ipw2200_hwconf_get()
1138 sc->sc_macaddr[i++] = val >> 8; in ipw2200_hwconf_get()
1139 sc->sc_macaddr[i++] = val & 0xff; in ipw2200_hwconf_get()
1140 val = ipw2200_rom_get16(sc, IPW2200_EEPROM_MAC + 1); in ipw2200_hwconf_get()
1141 sc->sc_macaddr[i++] = val >> 8; in ipw2200_hwconf_get()
1142 sc->sc_macaddr[i++] = val & 0xff; in ipw2200_hwconf_get()
1143 val = ipw2200_rom_get16(sc, IPW2200_EEPROM_MAC + 2); in ipw2200_hwconf_get()
1144 sc->sc_macaddr[i++] = val >> 8; in ipw2200_hwconf_get()
1145 sc->sc_macaddr[i++] = val & 0xff; in ipw2200_hwconf_get()
1150 (void) snprintf(sc->sc_macstr, sizeof (sc->sc_macstr), in ipw2200_hwconf_get()
1152 sc->sc_macaddr[0], sc->sc_macaddr[1], in ipw2200_hwconf_get()
1153 sc->sc_macaddr[2], sc->sc_macaddr[3], in ipw2200_hwconf_get()
1154 sc->sc_macaddr[4], sc->sc_macaddr[5]); in ipw2200_hwconf_get()
1162 ipw2200_master_stop(struct ipw2200_softc *sc) in ipw2200_master_stop() argument
1169 ipw2200_csr_put32(sc, IPW2200_CSR_INTR_MASK, 0); in ipw2200_master_stop()
1170 ipw2200_csr_put32(sc, IPW2200_CSR_RST, IPW2200_RST_STOP_MASTER); in ipw2200_master_stop()
1176 if (ipw2200_csr_get32(sc, IPW2200_CSR_RST) & in ipw2200_master_stop()
1183 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_master_stop()
1186 ipw2200_csr_put32(sc, IPW2200_CSR_RST, in ipw2200_master_stop()
1188 ipw2200_csr_get32(sc, IPW2200_CSR_RST)); in ipw2200_master_stop()
1190 sc->sc_flags &= ~IPW2200_FLAG_FW_INITED; in ipw2200_master_stop()
1197 ipw2200_chip_reset(struct ipw2200_softc *sc) in ipw2200_chip_reset() argument
1202 ipw2200_master_stop(sc); in ipw2200_chip_reset()
1207 tmp = ipw2200_csr_get32(sc, IPW2200_CSR_CTL); in ipw2200_chip_reset()
1208 ipw2200_csr_put32(sc, IPW2200_CSR_CTL, tmp | IPW2200_CTL_INIT); in ipw2200_chip_reset()
1213 ipw2200_csr_put32(sc, IPW2200_CSR_READ_INT, IPW2200_READ_INT_INIT_HOST); in ipw2200_chip_reset()
1219 if (ipw2200_csr_get32(sc, IPW2200_CSR_CTL) & in ipw2200_chip_reset()
1225 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_chip_reset()
1230 tmp = ipw2200_csr_get32(sc, IPW2200_CSR_RST); in ipw2200_chip_reset()
1231 ipw2200_csr_put32(sc, IPW2200_CSR_RST, tmp | IPW2200_RST_SW_RESET); in ipw2200_chip_reset()
1235 tmp = ipw2200_csr_get32(sc, IPW2200_CSR_CTL); in ipw2200_chip_reset()
1236 ipw2200_csr_put32(sc, IPW2200_CSR_CTL, tmp | IPW2200_CTL_INIT); in ipw2200_chip_reset()
1241 ipw2200_csr_put32(sc, IPW2200_CSR_AUTOINC_ADDR, 0); in ipw2200_chip_reset()
1243 ipw2200_csr_put32(sc, IPW2200_CSR_AUTOINC_DATA, 0); in ipw2200_chip_reset()
1253 ipw2200_radio_status(struct ipw2200_softc *sc) in ipw2200_radio_status() argument
1257 val = (ipw2200_csr_get32(sc, IPW2200_CSR_IO) & in ipw2200_radio_status()
1266 ipw2200_get_statistics(struct ipw2200_softc *sc) in ipw2200_get_statistics() argument
1268 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_get_statistics()
1272 if (!(sc->sc_flags & IPW2200_FLAG_FW_INITED)) { in ipw2200_get_statistics()
1273 IPW2200_DBG(IPW2200_DBG_IOCTL, (sc->sc_dip, CE_CONT, in ipw2200_get_statistics()
1278 size = min(ipw2200_csr_get32(sc, IPW2200_CSR_TABLE0_SIZE), 128 - 1); in ipw2200_get_statistics()
1279 ipw2200_csr_getbuf32(sc, IPW2200_CSR_TABLE0_BASE, &buf[1], size); in ipw2200_get_statistics()
1307 ipw2200_dma_region_alloc(struct ipw2200_softc *sc, struct dma_region *dr, in ipw2200_dma_region_alloc() argument
1310 dev_info_t *dip = sc->sc_dip; in ipw2200_dma_region_alloc()
1313 IPW2200_DBG(IPW2200_DBG_DMA, (sc->sc_dip, CE_CONT, in ipw2200_dma_region_alloc()
1319 IPW2200_DBG(IPW2200_DBG_DMA, (sc->sc_dip, CE_CONT, in ipw2200_dma_region_alloc()
1329 IPW2200_DBG(IPW2200_DBG_DMA, (sc->sc_dip, CE_CONT, in ipw2200_dma_region_alloc()
1340 IPW2200_DBG(IPW2200_DBG_DMA, (sc->sc_dip, CE_CONT, in ipw2200_dma_region_alloc()
1346 IPW2200_DBG(IPW2200_DBG_DMA, (sc->sc_dip, CE_CONT, in ipw2200_dma_region_alloc()
1356 IPW2200_DBG(IPW2200_DBG_DMA, (sc->sc_dip, CE_CONT, in ipw2200_dma_region_alloc()
1381 ipw2200_ring_alloc(struct ipw2200_softc *sc) in ipw2200_ring_alloc() argument
1388 sc->sc_dma_txdsc.dr_name = "ipw2200-tx-desc-ring"; in ipw2200_ring_alloc()
1389 err = ipw2200_dma_region_alloc(sc, &sc->sc_dma_txdsc, in ipw2200_ring_alloc()
1398 sc->sc_dma_txbufs[i].dr_name = "ipw2200-tx-buf"; in ipw2200_ring_alloc()
1399 err = ipw2200_dma_region_alloc(sc, &sc->sc_dma_txbufs[i], in ipw2200_ring_alloc()
1403 ipw2200_dma_region_free(&sc->sc_dma_txbufs[i]); in ipw2200_ring_alloc()
1413 sc->sc_dma_rxbufs[i].dr_name = "ipw2200-rx-buf"; in ipw2200_ring_alloc()
1414 err = ipw2200_dma_region_alloc(sc, &sc->sc_dma_rxbufs[i], in ipw2200_ring_alloc()
1418 ipw2200_dma_region_free(&sc->sc_dma_rxbufs[i]); in ipw2200_ring_alloc()
1427 sc->sc_dma_cmdsc.dr_name = "ipw2200-cmd-desc-ring"; in ipw2200_ring_alloc()
1428 err = ipw2200_dma_region_alloc(sc, &sc->sc_dma_cmdsc, in ipw2200_ring_alloc()
1438 ipw2200_dma_region_free(&sc->sc_dma_rxbufs[i]); in ipw2200_ring_alloc()
1441 ipw2200_dma_region_free(&sc->sc_dma_txbufs[i]); in ipw2200_ring_alloc()
1443 ipw2200_dma_region_free(&sc->sc_dma_txdsc); in ipw2200_ring_alloc()
1449 ipw2200_ring_free(struct ipw2200_softc *sc) in ipw2200_ring_free() argument
1456 ipw2200_dma_region_free(&sc->sc_dma_txdsc); in ipw2200_ring_free()
1461 ipw2200_dma_region_free(&sc->sc_dma_txbufs[i]); in ipw2200_ring_free()
1466 ipw2200_dma_region_free(&sc->sc_dma_rxbufs[i]); in ipw2200_ring_free()
1470 ipw2200_dma_region_free(&sc->sc_dma_cmdsc); in ipw2200_ring_free()
1474 ipw2200_ring_reset(struct ipw2200_softc *sc) in ipw2200_ring_reset() argument
1481 sc->sc_tx_cur = 0; in ipw2200_ring_reset()
1482 sc->sc_tx_free = IPW2200_TX_RING_SIZE; in ipw2200_ring_reset()
1483 sc->sc_txdsc = (struct ipw2200_tx_desc *)sc->sc_dma_txdsc.dr_base; in ipw2200_ring_reset()
1485 sc->sc_txbufs[i] = (uint8_t *)sc->sc_dma_txbufs[i].dr_base; in ipw2200_ring_reset()
1489 sc->sc_rx_cur = 0; in ipw2200_ring_reset()
1490 sc->sc_rx_free = IPW2200_RX_RING_SIZE; in ipw2200_ring_reset()
1492 sc->sc_rxbufs[i] = (uint8_t *)sc->sc_dma_rxbufs[i].dr_base; in ipw2200_ring_reset()
1497 sc->sc_cmd_cur = 0; in ipw2200_ring_reset()
1498 sc->sc_cmd_free = IPW2200_CMD_RING_SIZE; in ipw2200_ring_reset()
1499 sc->sc_cmdsc = (struct ipw2200_cmd_desc *)sc->sc_dma_cmdsc.dr_base; in ipw2200_ring_reset()
1506 ipw2200_ring_init(struct ipw2200_softc *sc) in ipw2200_ring_init() argument
1510 err = ipw2200_ring_alloc(sc); in ipw2200_ring_init()
1514 ipw2200_ring_reset(sc); in ipw2200_ring_init()
1520 ipw2200_ring_hwsetup(struct ipw2200_softc *sc) in ipw2200_ring_hwsetup() argument
1527 ipw2200_csr_put32(sc, IPW2200_CSR_CMD_BASE, sc->sc_dma_cmdsc.dr_pbase); in ipw2200_ring_hwsetup()
1528 ipw2200_csr_put32(sc, IPW2200_CSR_CMD_SIZE, IPW2200_CMD_RING_SIZE); in ipw2200_ring_hwsetup()
1529 ipw2200_csr_put32(sc, IPW2200_CSR_CMD_WRITE_INDEX, sc->sc_cmd_cur); in ipw2200_ring_hwsetup()
1534 ipw2200_csr_put32(sc, IPW2200_CSR_TX1_BASE, sc->sc_dma_txdsc.dr_pbase); in ipw2200_ring_hwsetup()
1535 ipw2200_csr_put32(sc, IPW2200_CSR_TX1_SIZE, IPW2200_TX_RING_SIZE); in ipw2200_ring_hwsetup()
1536 ipw2200_csr_put32(sc, IPW2200_CSR_TX1_WRITE_INDEX, sc->sc_tx_cur); in ipw2200_ring_hwsetup()
1541 ipw2200_csr_put32(sc, IPW2200_CSR_TX2_BASE, sc->sc_dma_txdsc.dr_pbase); in ipw2200_ring_hwsetup()
1542 ipw2200_csr_put32(sc, IPW2200_CSR_TX2_SIZE, IPW2200_TX_RING_SIZE); in ipw2200_ring_hwsetup()
1543 ipw2200_csr_put32(sc, IPW2200_CSR_TX2_READ_INDEX, 0); in ipw2200_ring_hwsetup()
1544 ipw2200_csr_put32(sc, IPW2200_CSR_TX2_WRITE_INDEX, 0); in ipw2200_ring_hwsetup()
1545 ipw2200_csr_put32(sc, IPW2200_CSR_TX3_BASE, sc->sc_dma_txdsc.dr_pbase); in ipw2200_ring_hwsetup()
1546 ipw2200_csr_put32(sc, IPW2200_CSR_TX3_SIZE, IPW2200_TX_RING_SIZE); in ipw2200_ring_hwsetup()
1547 ipw2200_csr_put32(sc, IPW2200_CSR_TX3_READ_INDEX, 0); in ipw2200_ring_hwsetup()
1548 ipw2200_csr_put32(sc, IPW2200_CSR_TX3_WRITE_INDEX, 0); in ipw2200_ring_hwsetup()
1549 ipw2200_csr_put32(sc, IPW2200_CSR_TX4_BASE, sc->sc_dma_txdsc.dr_pbase); in ipw2200_ring_hwsetup()
1550 ipw2200_csr_put32(sc, IPW2200_CSR_TX4_SIZE, IPW2200_TX_RING_SIZE); in ipw2200_ring_hwsetup()
1551 ipw2200_csr_put32(sc, IPW2200_CSR_TX4_READ_INDEX, 0); in ipw2200_ring_hwsetup()
1552 ipw2200_csr_put32(sc, IPW2200_CSR_TX4_WRITE_INDEX, 0); in ipw2200_ring_hwsetup()
1558 ipw2200_csr_put32(sc, IPW2200_CSR_RX_BASE + i * 4, in ipw2200_ring_hwsetup()
1559 sc->sc_dma_rxbufs[i].dr_pbase); in ipw2200_ring_hwsetup()
1563 ipw2200_csr_put32(sc, IPW2200_CSR_RX_WRITE_INDEX, in ipw2200_ring_hwsetup()
1564 RING_BACKWARD(sc->sc_rx_cur, 1, IPW2200_RX_RING_SIZE)); in ipw2200_ring_hwsetup()
1568 ipw2200_start_scan(struct ipw2200_softc *sc) in ipw2200_start_scan() argument
1570 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_start_scan()
1575 IPW2200_DBG(IPW2200_DBG_SCAN, (sc->sc_dip, CE_CONT, in ipw2200_start_scan()
1581 sc->sc_flags |= IPW2200_FLAG_SCANNING; in ipw2200_start_scan()
1616 return (ipw2200_cmd(sc, IPW2200_CMD_SCAN, &scan, sizeof (scan), 1)); in ipw2200_start_scan()
1620 ipw2200_auth_and_assoc(struct ipw2200_softc *sc) in ipw2200_auth_and_assoc() argument
1622 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_auth_and_assoc()
1631 if (sc->sc_flags & IPW2200_FLAG_ASSOCIATED) { in ipw2200_auth_and_assoc()
1649 err = ipw2200_cmd(sc, IPW2200_CMD_SET_CONFIG, in ipw2200_auth_and_assoc()
1658 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_auth_and_assoc()
1666 err = ipw2200_cmd(sc, IPW2200_CMD_SET_ESSID, in->in_essid, in ipw2200_auth_and_assoc()
1679 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_auth_and_assoc()
1682 err = ipw2200_cmd(sc, IPW2200_CMD_SET_RATES, &rs, sizeof (rs), 1); in ipw2200_auth_and_assoc()
1699 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_auth_and_assoc()
1723 err = ipw2200_cmd(sc, IPW2200_CMD_SET_OPTIE, in ipw2200_auth_and_assoc()
1733 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_auth_and_assoc()
1736 err = ipw2200_cmd(sc, IPW2200_CMD_SET_SENSITIVITY, in ipw2200_auth_and_assoc()
1753 IPW2200_DBG(IPW2200_DBG_IOCTL, (sc->sc_dip, CE_CONT, in ipw2200_auth_and_assoc()
1770 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_auth_and_assoc()
1777 return (ipw2200_cmd(sc, IPW2200_CMD_ASSOCIATE, in ipw2200_auth_and_assoc()
1787 ipw2200_disassoc(struct ipw2200_softc *sc) in ipw2200_disassoc() argument
1791 return (ipw2200_cmd(sc, IPW2200_CMD_ASSOCIATE, &assoc, in ipw2200_disassoc()
1799 struct ipw2200_softc *sc = (struct ipw2200_softc *)ic; in ipw2200_newstate() local
1804 if (!(sc->sc_flags & IPW2200_FLAG_SCANNING)) { in ipw2200_newstate()
1806 (void) ipw2200_start_scan(sc); in ipw2200_newstate()
1813 if (sc->sc_flags & IPW2200_FLAG_ASSOCIATED) in ipw2200_newstate()
1814 (void) ipw2200_disassoc(sc); in ipw2200_newstate()
1815 (void) ipw2200_auth_and_assoc(sc); in ipw2200_newstate()
1842 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_newstate()
1858 struct ipw2200_softc *sc = (struct ipw2200_softc *)ic; in ipw2200_m_stat() local
1871 *val = sc->sc_stats.sc_rx_len_err; in ipw2200_m_stat()
1874 *val = sc->sc_stats.sc_tx_discard + in ipw2200_m_stat()
1875 sc->sc_stats.sc_tx_alloc_fail + in ipw2200_m_stat()
1876 sc->sc_stats.sc_tx_encap_fail + in ipw2200_m_stat()
1877 sc->sc_stats.sc_tx_crypto_fail; in ipw2200_m_stat()
1936 ipw2200_thread(struct ipw2200_softc *sc) in ipw2200_thread() argument
1938 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_thread()
1943 IPW2200_DBG(IPW2200_DBG_SOFTINT, (sc->sc_dip, CE_CONT, in ipw2200_thread()
1944 "ipw2200_thread(): enter, linkstate %d\n", sc->sc_linkstate)); in ipw2200_thread()
1946 mutex_enter(&sc->sc_mflock); in ipw2200_thread()
1948 while (sc->sc_mfthread_switch) { in ipw2200_thread()
1952 if ((ipw2200_radio_status(sc) == 0) || in ipw2200_thread()
1953 sc->sc_flags & IPW2200_FLAG_SUSPEND) { in ipw2200_thread()
1960 if (ic->ic_mach && (sc->sc_flags & IPW2200_FLAG_LINK_CHANGE)) { in ipw2200_thread()
1962 IPW2200_DBG(IPW2200_DBG_SOFTINT, (sc->sc_dip, CE_CONT, in ipw2200_thread()
1964 sc->sc_linkstate)); in ipw2200_thread()
1966 sc->sc_flags &= ~IPW2200_FLAG_LINK_CHANGE; in ipw2200_thread()
1967 nlstate = sc->sc_linkstate; in ipw2200_thread()
1969 mutex_exit(&sc->sc_mflock); in ipw2200_thread()
1971 mutex_enter(&sc->sc_mflock); in ipw2200_thread()
1978 (sc->sc_flags & IPW2200_FLAG_HW_ERR_RECOVER)) { in ipw2200_thread()
1980 IPW2200_DBG(IPW2200_DBG_FATAL, (sc->sc_dip, CE_CONT, in ipw2200_thread()
1984 sc->sc_flags &= ~IPW2200_FLAG_HW_ERR_RECOVER; in ipw2200_thread()
1985 mutex_exit(&sc->sc_mflock); in ipw2200_thread()
1989 (void) ipw2200_init(sc); /* Force state machine */ in ipw2200_thread()
2004 mutex_enter(&sc->sc_mflock); in ipw2200_thread()
2013 mutex_exit(&sc->sc_mflock); in ipw2200_thread()
2014 ipw2200_get_statistics(sc); in ipw2200_thread()
2015 mutex_enter(&sc->sc_mflock); in ipw2200_thread()
2021 mutex_exit(&sc->sc_mflock); in ipw2200_thread()
2023 mutex_enter(&sc->sc_mflock); in ipw2200_thread()
2026 sc->sc_mf_thread = NULL; in ipw2200_thread()
2027 cv_signal(&sc->sc_mfthread_cv); in ipw2200_thread()
2028 mutex_exit(&sc->sc_mflock); in ipw2200_thread()
2034 struct ipw2200_softc *sc = (struct ipw2200_softc *)arg; in ipw2200_m_start() local
2035 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_m_start()
2037 IPW2200_DBG(IPW2200_DBG_GLD, (sc->sc_dip, CE_CONT, in ipw2200_m_start()
2042 (void) ipw2200_init(sc); in ipw2200_m_start()
2049 sc->sc_flags |= IPW2200_FLAG_RUNNING; in ipw2200_m_start()
2062 struct ipw2200_softc *sc = (struct ipw2200_softc *)arg; in ipw2200_m_stop() local
2063 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_m_stop()
2065 IPW2200_DBG(IPW2200_DBG_GLD, (sc->sc_dip, CE_CONT, in ipw2200_m_stop()
2068 ipw2200_stop(sc); in ipw2200_m_stop()
2074 sc->sc_flags &= ~IPW2200_FLAG_RUNNING; in ipw2200_m_stop()
2080 struct ipw2200_softc *sc = (struct ipw2200_softc *)arg; in ipw2200_m_unicst() local
2081 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_m_unicst()
2084 IPW2200_DBG(IPW2200_DBG_GLD, (sc->sc_dip, CE_CONT, in ipw2200_m_unicst()
2087 IPW2200_DBG(IPW2200_DBG_GLD, (sc->sc_dip, CE_CONT, in ipw2200_m_unicst()
2097 if (sc->sc_flags & IPW2200_FLAG_RUNNING) { in ipw2200_m_unicst()
2098 err = ipw2200_config(sc); in ipw2200_m_unicst()
2100 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_m_unicst()
2116 struct ipw2200_softc *sc = (struct ipw2200_softc *)arg; in ipw2200_m_promisc() local
2118 IPW2200_DBG(IPW2200_DBG_GLD, (sc->sc_dip, CE_CONT, in ipw2200_m_promisc()
2128 struct ipw2200_softc *sc = (struct ipw2200_softc *)arg; in ipw2200_m_tx() local
2129 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_m_tx()
2135 if (sc->sc_flags & IPW2200_FLAG_SUSPEND) { in ipw2200_m_tx()
2136 IPW2200_DBG(IPW2200_DBG_SUSPEND, (sc->sc_dip, CE_CONT, in ipw2200_m_tx()
2138 sc->sc_stats.sc_tx_discard++; /* discard data */ in ipw2200_m_tx()
2149 IPW2200_DBG(IPW2200_DBG_GLD, (sc->sc_dip, CE_CONT, in ipw2200_m_tx()
2152 sc->sc_stats.sc_tx_discard++; /* discard data */ in ipw2200_m_tx()
2176 struct ipw2200_softc *sc = (struct ipw2200_softc *)ic; in ipw2200_send() local
2190 IPW2200_DBG(IPW2200_DBG_GLD, (sc->sc_dip, CE_CONT, in ipw2200_send()
2203 mutex_enter(&sc->sc_tx_lock); in ipw2200_send()
2204 if (sc->sc_flags & IPW2200_FLAG_SUSPEND) { in ipw2200_send()
2216 if (sc->sc_tx_free <= IPW2200_TX_RING_MIN) { in ipw2200_send()
2217 mutex_enter(&sc->sc_resched_lock); in ipw2200_send()
2218 IPW2200_DBG(IPW2200_DBG_RING, (sc->sc_dip, CE_WARN, in ipw2200_send()
2220 sc->sc_tx_free)); in ipw2200_send()
2222 sc->sc_flags |= IPW2200_FLAG_TX_SCHED; in ipw2200_send()
2224 mutex_exit(&sc->sc_resched_lock); in ipw2200_send()
2227 IPW2200_DBG(IPW2200_DBG_RING, (sc->sc_dip, CE_CONT, in ipw2200_send()
2229 sc->sc_tx_free, sc->sc_tx_cur)); in ipw2200_send()
2237 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_send()
2240 sc->sc_stats.sc_tx_alloc_fail++; /* alloc fail */ in ipw2200_send()
2258 sc->sc_stats.sc_tx_encap_fail++; /* tx encap fail */ in ipw2200_send()
2272 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_send()
2275 sc->sc_stats.sc_tx_crypto_fail++; /* tx encap fail */ in ipw2200_send()
2287 idx = sc->sc_tx_cur; in ipw2200_send()
2288 txdsc = &sc->sc_txdsc[idx]; in ipw2200_send()
2299 dr = &sc->sc_dma_txbufs[idx]; in ipw2200_send()
2300 p = sc->sc_txbufs[idx]; in ipw2200_send()
2332 (void) ddi_dma_sync(sc->sc_dma_txdsc.dr_hnd, in ipw2200_send()
2336 sc->sc_tx_cur = RING_FORWARD(sc->sc_tx_cur, 1, IPW2200_TX_RING_SIZE); in ipw2200_send()
2337 sc->sc_tx_free--; in ipw2200_send()
2342 ipw2200_csr_put32(sc, IPW2200_CSR_TX1_WRITE_INDEX, sc->sc_tx_cur); in ipw2200_send()
2353 mutex_exit(&sc->sc_tx_lock); in ipw2200_send()
2355 IPW2200_DBG(IPW2200_DBG_GLD, (sc->sc_dip, CE_CONT, in ipw2200_send()
2369 struct ipw2200_softc *sc = (struct ipw2200_softc *)arg; in ipw2200_m_ioctl() local
2370 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_m_ioctl()
2373 IPW2200_DBG(IPW2200_DBG_GLD, (sc->sc_dip, CE_CONT, in ipw2200_m_ioctl()
2380 if (ipw2200_ioctl(sc, q, m) == IEEE80211_IOCTL_NOT_REQUIRED) in ipw2200_m_ioctl()
2385 if (sc->sc_flags & IPW2200_FLAG_RUNNING) { in ipw2200_m_ioctl()
2386 (void) ipw2200_m_start(sc); in ipw2200_m_ioctl()
2392 if (sc->sc_flags & IPW2200_FLAG_RUNNING) in ipw2200_m_ioctl()
2393 (void) ipw2200_chip_reset(sc); in ipw2200_m_ioctl()
2397 ipw2200_ioctl(struct ipw2200_softc *sc, queue_t *q, mblk_t *m) in ipw2200_ioctl() argument
2407 IPW2200_DBG(IPW2200_DBG_IOCTL, (sc->sc_dip, CE_CONT, in ipw2200_ioctl()
2432 IPW2200_DBG(IPW2200_DBG_IOCTL, (sc->sc_dip, CE_CONT, in ipw2200_ioctl()
2470 ret = ipw2200_getset(sc, m0, cmd, &need_net80211); in ipw2200_ioctl()
2474 IPW2200_DBG(IPW2200_DBG_IOCTL, (sc->sc_dip, CE_CONT, in ipw2200_ioctl()
2488 ipw2200_getset(struct ipw2200_softc *sc, mblk_t *m, uint32_t cmd, in ipw2200_getset() argument
2500 IPW2200_DBG(IPW2200_DBG_IOCTL, (sc->sc_dip, CE_CONT, in ipw2200_getset()
2504 ret = iwi_wificfg_radio(sc, cmd, outfp); in ipw2200_getset()
2536 if ((ipw2200_radio_status(sc) == 0) && in ipw2200_getset()
2539 IPW2200_REPORT((sc->sc_dip, CE_CONT, in ipw2200_getset()
2565 struct ipw2200_softc *sc = (struct ipw2200_softc *)arg; in ipw2200_m_getprop() local
2566 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_m_getprop()
2572 IPW2200_DBG(IPW2200_DBG_BRUSSELS, (sc->sc_dip, CE_CONT, in ipw2200_m_getprop()
2576 *(wl_linkstatus_t *)wldp_buf = ipw2200_radio_status(sc); in ipw2200_m_getprop()
2592 struct ipw2200_softc *sc = (struct ipw2200_softc *)arg; in ipw2200_m_propinfo() local
2593 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_m_propinfo()
2602 struct ipw2200_softc *sc = (struct ipw2200_softc *)arg; in ipw2200_m_setprop() local
2603 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_m_setprop()
2609 IPW2200_DBG(IPW2200_DBG_BRUSSELS, (sc->sc_dip, CE_CONT, in ipw2200_m_setprop()
2614 IPW2200_DBG(IPW2200_DBG_BRUSSELS, (sc->sc_dip, CE_CONT, in ipw2200_m_setprop()
2626 if (sc->sc_flags & IPW2200_FLAG_RUNNING) { in ipw2200_m_setprop()
2627 (void) ipw2200_m_start(sc); in ipw2200_m_setprop()
2638 iwi_wificfg_radio(struct ipw2200_softc *sc, uint32_t cmd, wldp_t *outfp) in iwi_wificfg_radio() argument
2645 ipw2200_radio_status(sc); in iwi_wificfg_radio()
2702 ipw2200_rcv_frame(struct ipw2200_softc *sc, struct ipw2200_frame *frame) in ipw2200_rcv_frame() argument
2704 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_rcv_frame()
2714 IPW2200_DBG(IPW2200_DBG_RX, (sc->sc_dip, CE_CONT, in ipw2200_rcv_frame()
2717 sc->sc_stats.sc_rx_len_err++; /* length doesn't work */ in ipw2200_rcv_frame()
2720 IPW2200_DBG(IPW2200_DBG_RX, (sc->sc_dip, CE_CONT, in ipw2200_rcv_frame()
2741 IPW2200_DBG(IPW2200_DBG_RX, (sc->sc_dip, CE_CONT, in ipw2200_rcv_frame()
2757 IPW2200_WARN((sc->sc_dip, CE_WARN, in ipw2200_rcv_frame()
2764 ipw2200_rcv_notif(struct ipw2200_softc *sc, struct ipw2200_notif *notif) in ipw2200_rcv_notif() argument
2766 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_rcv_notif()
2771 IPW2200_DBG(IPW2200_DBG_NOTIF, (sc->sc_dip, CE_CONT, in ipw2200_rcv_notif()
2779 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_rcv_notif()
2785 sc->sc_flags |= IPW2200_FLAG_ASSOCIATED; in ipw2200_rcv_notif()
2789 sc->sc_flags &= ~IPW2200_FLAG_ASSOCIATED; in ipw2200_rcv_notif()
2800 IPW2200_DBG(IPW2200_DBG_WIFI, (sc->sc_dip, CE_CONT, in ipw2200_rcv_notif()
2808 sc->sc_flags &= ~IPW2200_FLAG_ASSOCIATED; in ipw2200_rcv_notif()
2811 IPW2200_DBG(IPW2200_DBG_NOTIF, (sc->sc_dip, CE_CONT, in ipw2200_rcv_notif()
2819 IPW2200_DBG(IPW2200_DBG_SCAN, (sc->sc_dip, CE_CONT, in ipw2200_rcv_notif()
2825 IPW2200_DBG(IPW2200_DBG_SCAN, (sc->sc_dip, CE_CONT, in ipw2200_rcv_notif()
2833 sc->sc_flags &= ~IPW2200_FLAG_SCANNING; in ipw2200_rcv_notif()
2845 IPW2200_DBG(IPW2200_DBG_NOTIF, (sc->sc_dip, CE_CONT, in ipw2200_rcv_notif()
2855 struct ipw2200_softc *sc = (struct ipw2200_softc *)(uintptr_t)arg; in ipw2200_intr() local
2856 struct ieee80211com *ic = &sc->sc_ic; in ipw2200_intr()
2864 if (sc->sc_flags & IPW2200_FLAG_SUSPEND) in ipw2200_intr()
2868 ireg = ipw2200_csr_get32(sc, IPW2200_CSR_INTR); in ipw2200_intr()
2876 ipw2200_csr_put32(sc, IPW2200_CSR_INTR_MASK, 0); in ipw2200_intr()
2881 ipw2200_csr_put32(sc, IPW2200_CSR_INTR, ireg); in ipw2200_intr()
2883 IPW2200_DBG(IPW2200_DBG_INT, (sc->sc_dip, CE_CONT, in ipw2200_intr()
2888 IPW2200_DBG(IPW2200_DBG_FATAL, (sc->sc_dip, CE_CONT, in ipw2200_intr()
2894 mutex_enter(&sc->sc_mflock); in ipw2200_intr()
2895 sc->sc_flags |= IPW2200_FLAG_HW_ERR_RECOVER; in ipw2200_intr()
2896 mutex_exit(&sc->sc_mflock); in ipw2200_intr()
2905 mutex_enter(&sc->sc_ilock); in ipw2200_intr()
2906 sc->sc_fw_ok = 1; in ipw2200_intr()
2907 cv_signal(&sc->sc_fw_cond); in ipw2200_intr()
2908 mutex_exit(&sc->sc_ilock); in ipw2200_intr()
2915 IPW2200_REPORT((sc->sc_dip, CE_CONT, in ipw2200_intr()
2923 ipw2200_stop(sc); in ipw2200_intr()
2930 mutex_enter(&sc->sc_cmd_lock); in ipw2200_intr()
2931 ridx = ipw2200_csr_get32(sc, in ipw2200_intr()
2933 i = RING_FORWARD(sc->sc_cmd_cur, in ipw2200_intr()
2934 sc->sc_cmd_free, IPW2200_CMD_RING_SIZE); in ipw2200_intr()
2937 IPW2200_DBG(IPW2200_DBG_INT, (sc->sc_dip, CE_CONT, in ipw2200_intr()
2942 sc->sc_cmd_free += len; in ipw2200_intr()
2943 cv_signal(&sc->sc_cmd_cond); in ipw2200_intr()
2947 sc->sc_done[i] = 1; in ipw2200_intr()
2948 mutex_exit(&sc->sc_cmd_lock); in ipw2200_intr()
2950 mutex_enter(&sc->sc_ilock); in ipw2200_intr()
2951 cv_signal(&sc->sc_cmd_status_cond); in ipw2200_intr()
2952 mutex_exit(&sc->sc_ilock); in ipw2200_intr()
2959 ridx = ipw2200_csr_get32(sc, in ipw2200_intr()
2961 widx = ipw2200_csr_get32(sc, in ipw2200_intr()
2964 IPW2200_DBG(IPW2200_DBG_INT, (sc->sc_dip, CE_CONT, in ipw2200_intr()
2968 for (; sc->sc_rx_cur != ridx; in ipw2200_intr()
2969 sc->sc_rx_cur = RING_FORWARD(sc->sc_rx_cur, 1, in ipw2200_intr()
2971 i = sc->sc_rx_cur; in ipw2200_intr()
2972 rxbuf = sc->sc_rxbufs[i]; in ipw2200_intr()
2973 dr = &sc->sc_dma_rxbufs[i]; in ipw2200_intr()
2987 IPW2200_DBG(IPW2200_DBG_INT, (sc->sc_dip, CE_CONT, in ipw2200_intr()
2993 ipw2200_rcv_frame(sc, in ipw2200_intr()
2998 ipw2200_rcv_notif(sc, in ipw2200_intr()
3003 IPW2200_DBG(IPW2200_DBG_INT, (sc->sc_dip, in ipw2200_intr()
3013 ipw2200_csr_put32(sc, IPW2200_CSR_RX_WRITE_INDEX, in ipw2200_intr()
3014 RING_BACKWARD(sc->sc_rx_cur, 1, in ipw2200_intr()
3022 mutex_enter(&sc->sc_tx_lock); in ipw2200_intr()
3023 ridx = ipw2200_csr_get32(sc, in ipw2200_intr()
3025 len = RING_FLEN(RING_FORWARD(sc->sc_tx_cur, in ipw2200_intr()
3026 sc->sc_tx_free, IPW2200_TX_RING_SIZE), in ipw2200_intr()
3028 sc->sc_tx_free += len; in ipw2200_intr()
3029 IPW2200_DBG(IPW2200_DBG_RING, (sc->sc_dip, CE_CONT, in ipw2200_intr()
3032 mutex_exit(&sc->sc_tx_lock); in ipw2200_intr()
3034 mutex_enter(&sc->sc_resched_lock); in ipw2200_intr()
3035 if ((sc->sc_tx_free > IPW2200_TX_RING_MIN) && in ipw2200_intr()
3036 (sc->sc_flags & IPW2200_FLAG_TX_SCHED)) { in ipw2200_intr()
3037 IPW2200_DBG(IPW2200_DBG_RING, (sc->sc_dip, in ipw2200_intr()
3040 sc->sc_flags &= ~IPW2200_FLAG_TX_SCHED; in ipw2200_intr()
3043 mutex_exit(&sc->sc_resched_lock); in ipw2200_intr()
3050 ipw2200_csr_put32(sc, IPW2200_CSR_INTR_MASK, IPW2200_INTR_MASK_ALL); in ipw2200_intr()