Lines Matching refs:il

90 il3945_get_antenna_flags(const struct il_priv *il)  in il3945_get_antenna_flags()  argument
92 struct il3945_eeprom *eeprom = (struct il3945_eeprom *)il->eeprom; in il3945_get_antenna_flags()
117 il3945_set_ccmp_dynamic_key_info(struct il_priv *il, in il3945_set_ccmp_dynamic_key_info() argument
127 if (sta_id == il->hw_params.bcast_id) in il3945_set_ccmp_dynamic_key_info()
134 spin_lock_irqsave(&il->sta_lock, flags); in il3945_set_ccmp_dynamic_key_info()
135 il->stations[sta_id].keyinfo.cipher = keyconf->cipher; in il3945_set_ccmp_dynamic_key_info()
136 il->stations[sta_id].keyinfo.keylen = keyconf->keylen; in il3945_set_ccmp_dynamic_key_info()
137 memcpy(il->stations[sta_id].keyinfo.key, keyconf->key, keyconf->keylen); in il3945_set_ccmp_dynamic_key_info()
139 memcpy(il->stations[sta_id].sta.key.key, keyconf->key, keyconf->keylen); in il3945_set_ccmp_dynamic_key_info()
141 if ((il->stations[sta_id].sta.key. in il3945_set_ccmp_dynamic_key_info()
143 il->stations[sta_id].sta.key.key_offset = in il3945_set_ccmp_dynamic_key_info()
144 il_get_free_ucode_key_idx(il); in il3945_set_ccmp_dynamic_key_info()
148 WARN(il->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET, in il3945_set_ccmp_dynamic_key_info()
151 il->stations[sta_id].sta.key.key_flags = key_flags; in il3945_set_ccmp_dynamic_key_info()
152 il->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; in il3945_set_ccmp_dynamic_key_info()
153 il->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; in il3945_set_ccmp_dynamic_key_info()
157 ret = il_send_add_sta(il, &il->stations[sta_id].sta, CMD_ASYNC); in il3945_set_ccmp_dynamic_key_info()
159 spin_unlock_irqrestore(&il->sta_lock, flags); in il3945_set_ccmp_dynamic_key_info()
165 il3945_set_tkip_dynamic_key_info(struct il_priv *il, in il3945_set_tkip_dynamic_key_info() argument
172 il3945_set_wep_dynamic_key_info(struct il_priv *il, in il3945_set_wep_dynamic_key_info() argument
179 il3945_clear_sta_key_info(struct il_priv *il, u8 sta_id) in il3945_clear_sta_key_info() argument
184 spin_lock_irqsave(&il->sta_lock, flags); in il3945_clear_sta_key_info()
185 memset(&il->stations[sta_id].keyinfo, 0, sizeof(struct il_hw_key)); in il3945_clear_sta_key_info()
186 memset(&il->stations[sta_id].sta.key, 0, sizeof(struct il4965_keyinfo)); in il3945_clear_sta_key_info()
187 il->stations[sta_id].sta.key.key_flags = STA_KEY_FLG_NO_ENC; in il3945_clear_sta_key_info()
188 il->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; in il3945_clear_sta_key_info()
189 il->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; in il3945_clear_sta_key_info()
190 memcpy(&sta_cmd, &il->stations[sta_id].sta, in il3945_clear_sta_key_info()
192 spin_unlock_irqrestore(&il->sta_lock, flags); in il3945_clear_sta_key_info()
195 return il_send_add_sta(il, &sta_cmd, CMD_SYNC); in il3945_clear_sta_key_info()
199 il3945_set_dynamic_key(struct il_priv *il, struct ieee80211_key_conf *keyconf, in il3945_set_dynamic_key() argument
208 ret = il3945_set_ccmp_dynamic_key_info(il, keyconf, sta_id); in il3945_set_dynamic_key()
211 ret = il3945_set_tkip_dynamic_key_info(il, keyconf, sta_id); in il3945_set_dynamic_key()
215 ret = il3945_set_wep_dynamic_key_info(il, keyconf, sta_id); in il3945_set_dynamic_key()
229 il3945_remove_static_key(struct il_priv *il) in il3945_remove_static_key() argument
235 il3945_set_static_key(struct il_priv *il, struct ieee80211_key_conf *key) in il3945_set_static_key() argument
246 il3945_clear_free_frames(struct il_priv *il) in il3945_clear_free_frames() argument
250 D_INFO("%d frames on pre-allocated heap on clear.\n", il->frames_count); in il3945_clear_free_frames()
252 while (!list_empty(&il->free_frames)) { in il3945_clear_free_frames()
253 element = il->free_frames.next; in il3945_clear_free_frames()
256 il->frames_count--; in il3945_clear_free_frames()
259 if (il->frames_count) { in il3945_clear_free_frames()
261 il->frames_count); in il3945_clear_free_frames()
262 il->frames_count = 0; in il3945_clear_free_frames()
267 il3945_get_free_frame(struct il_priv *il) in il3945_get_free_frame() argument
271 if (list_empty(&il->free_frames)) { in il3945_get_free_frame()
278 il->frames_count++; in il3945_get_free_frame()
282 element = il->free_frames.next; in il3945_get_free_frame()
288 il3945_free_frame(struct il_priv *il, struct il3945_frame *frame) in il3945_free_frame() argument
291 list_add(&frame->list, &il->free_frames); in il3945_free_frame()
295 il3945_fill_beacon_frame(struct il_priv *il, struct ieee80211_hdr *hdr, in il3945_fill_beacon_frame() argument
299 if (!il_is_associated(il) || !il->beacon_skb) in il3945_fill_beacon_frame()
302 if (il->beacon_skb->len > left) in il3945_fill_beacon_frame()
305 memcpy(hdr, il->beacon_skb->data, il->beacon_skb->len); in il3945_fill_beacon_frame()
307 return il->beacon_skb->len; in il3945_fill_beacon_frame()
311 il3945_send_beacon_cmd(struct il_priv *il) in il3945_send_beacon_cmd() argument
318 frame = il3945_get_free_frame(il); in il3945_send_beacon_cmd()
326 rate = il_get_lowest_plcp(il); in il3945_send_beacon_cmd()
328 frame_size = il3945_hw_get_beacon_cmd(il, frame, rate); in il3945_send_beacon_cmd()
330 rc = il_send_cmd_pdu(il, C_TX_BEACON, frame_size, &frame->u.cmd[0]); in il3945_send_beacon_cmd()
332 il3945_free_frame(il, frame); in il3945_send_beacon_cmd()
338 il3945_unset_hw_params(struct il_priv *il) in il3945_unset_hw_params() argument
340 if (il->_3945.shared_virt) in il3945_unset_hw_params()
341 dma_free_coherent(&il->pci_dev->dev, in il3945_unset_hw_params()
343 il->_3945.shared_virt, il->_3945.shared_phys); in il3945_unset_hw_params()
347 il3945_build_tx_cmd_hwcrypto(struct il_priv *il, struct ieee80211_tx_info *info, in il3945_build_tx_cmd_hwcrypto() argument
352 struct il_hw_key *keyinfo = &il->stations[sta_id].keyinfo; in il3945_build_tx_cmd_hwcrypto()
391 il3945_build_tx_cmd_basic(struct il_priv *il, struct il_device_cmd *cmd, in il3945_build_tx_cmd_basic() argument
424 il_tx_cmd_protection(il, info, fc, &tx_flags); in il3945_build_tx_cmd_basic()
445 il3945_tx_skb(struct il_priv *il, in il3945_tx_skb() argument
467 spin_lock_irqsave(&il->lock, flags); in il3945_tx_skb()
468 if (il_is_rfkill(il)) { in il3945_tx_skb()
473 if ((ieee80211_get_tx_rate(il->hw, info)->hw_value & 0xFF) == in il3945_tx_skb()
490 spin_unlock_irqrestore(&il->lock, flags); in il3945_tx_skb()
495 sta_id = il_sta_id_or_broadcast(il, sta); in il3945_tx_skb()
511 txq = &il->txq[txq_id]; in il3945_tx_skb()
517 spin_lock_irqsave(&il->lock, flags); in il3945_tx_skb()
545 il3945_build_tx_cmd_hwcrypto(il, info, out_cmd, skb, sta_id); in il3945_tx_skb()
548 il3945_build_tx_cmd_basic(il, out_cmd, info, hdr, sta_id); in il3945_tx_skb()
550 il3945_hw_build_tx_cmd_rate(il, out_cmd, info, hdr, sta_id); in il3945_tx_skb()
575 pci_map_single(il->pci_dev, &out_cmd->hdr, firstlen, in il3945_tx_skb()
577 if (unlikely(pci_dma_mapping_error(il->pci_dev, txcmd_phys))) in il3945_tx_skb()
585 pci_map_single(il->pci_dev, skb->data + hdr_len, secondlen, in il3945_tx_skb()
587 if (unlikely(pci_dma_mapping_error(il->pci_dev, phys_addr))) in il3945_tx_skb()
593 il->ops->txq_attach_buf_to_tfd(il, txq, txcmd_phys, firstlen, 1, 0); in il3945_tx_skb()
597 il->ops->txq_attach_buf_to_tfd(il, txq, phys_addr, secondlen, 0, in il3945_tx_skb()
607 il_update_stats(il, true, fc, skb->len); in il3945_tx_skb()
611 il_print_hex_dump(il, IL_DL_TX, tx_cmd, sizeof(*tx_cmd)); in il3945_tx_skb()
612 il_print_hex_dump(il, IL_DL_TX, (u8 *) tx_cmd->hdr, in il3945_tx_skb()
617 il_txq_update_write_ptr(il, txq); in il3945_tx_skb()
618 spin_unlock_irqrestore(&il->lock, flags); in il3945_tx_skb()
620 if (il_queue_space(q) < q->high_mark && il->mac80211_registered) { in il3945_tx_skb()
622 spin_lock_irqsave(&il->lock, flags); in il3945_tx_skb()
624 il_txq_update_write_ptr(il, txq); in il3945_tx_skb()
625 spin_unlock_irqrestore(&il->lock, flags); in il3945_tx_skb()
628 il_stop_queue(il, txq); in il3945_tx_skb()
634 spin_unlock_irqrestore(&il->lock, flags); in il3945_tx_skb()
640 il3945_get_measurement(struct il_priv *il, in il3945_get_measurement() argument
655 if (il_is_associated(il)) in il3945_get_measurement()
657 il_usecs_to_beacons(il, in il3945_get_measurement()
659 il->_3945.last_tsf, in il3945_get_measurement()
660 le16_to_cpu(il->timing.beacon_interval)); in il3945_get_measurement()
671 if (il_is_associated(il)) in il3945_get_measurement()
673 il_add_beacon_time(il, il->_3945.last_beacon_time, add_time, in il3945_get_measurement()
674 le16_to_cpu(il->timing.beacon_interval)); in il3945_get_measurement()
681 if (il->active.flags & RXON_FLG_BAND_24G_MSK) in il3945_get_measurement()
686 rc = il_send_cmd_sync(il, &cmd); in il3945_get_measurement()
702 il->measurement_status &= ~MEASUREMENT_READY; in il3945_get_measurement()
704 il->measurement_status |= MEASUREMENT_ACTIVE; in il3945_get_measurement()
713 il_free_pages(il, cmd.reply_page); in il3945_get_measurement()
719 il3945_hdl_alive(struct il_priv *il, struct il_rx_buf *rxb) in il3945_hdl_alive() argument
732 memcpy(&il->card_alive_init, &pkt->u.alive_frame, in il3945_hdl_alive()
734 pwork = &il->init_alive_start; in il3945_hdl_alive()
737 memcpy(&il->card_alive, &pkt->u.alive_frame, in il3945_hdl_alive()
739 pwork = &il->alive_start; in il3945_hdl_alive()
740 il3945_disable_events(il); in il3945_hdl_alive()
746 queue_delayed_work(il->workqueue, pwork, msecs_to_jiffies(5)); in il3945_hdl_alive()
752 il3945_hdl_add_sta(struct il_priv *il, struct il_rx_buf *rxb) in il3945_hdl_add_sta() argument
762 il3945_hdl_beacon(struct il_priv *il, struct il_rx_buf *rxb) in il3945_hdl_beacon() argument
776 il->ibss_manager = le32_to_cpu(beacon->ibss_mgr_status); in il3945_hdl_beacon()
783 il3945_hdl_card_state(struct il_priv *il, struct il_rx_buf *rxb) in il3945_hdl_card_state() argument
787 unsigned long status = il->status; in il3945_hdl_card_state()
793 _il_wr(il, CSR_UCODE_DRV_GP1_SET, CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED); in il3945_hdl_card_state()
796 set_bit(S_RFKILL, &il->status); in il3945_hdl_card_state()
798 clear_bit(S_RFKILL, &il->status); in il3945_hdl_card_state()
800 il_scan_cancel(il); in il3945_hdl_card_state()
803 test_bit(S_RFKILL, &il->status))) in il3945_hdl_card_state()
804 wiphy_rfkill_set_hw_state(il->hw->wiphy, in il3945_hdl_card_state()
805 test_bit(S_RFKILL, &il->status)); in il3945_hdl_card_state()
807 wake_up(&il->wait_command_queue); in il3945_hdl_card_state()
820 il3945_setup_handlers(struct il_priv *il) in il3945_setup_handlers() argument
822 il->handlers[N_ALIVE] = il3945_hdl_alive; in il3945_setup_handlers()
823 il->handlers[C_ADD_STA] = il3945_hdl_add_sta; in il3945_setup_handlers()
824 il->handlers[N_ERROR] = il_hdl_error; in il3945_setup_handlers()
825 il->handlers[N_CHANNEL_SWITCH] = il_hdl_csa; in il3945_setup_handlers()
826 il->handlers[N_SPECTRUM_MEASUREMENT] = il_hdl_spectrum_measurement; in il3945_setup_handlers()
827 il->handlers[N_PM_SLEEP] = il_hdl_pm_sleep; in il3945_setup_handlers()
828 il->handlers[N_PM_DEBUG_STATS] = il_hdl_pm_debug_stats; in il3945_setup_handlers()
829 il->handlers[N_BEACON] = il3945_hdl_beacon; in il3945_setup_handlers()
836 il->handlers[C_STATS] = il3945_hdl_c_stats; in il3945_setup_handlers()
837 il->handlers[N_STATS] = il3945_hdl_stats; in il3945_setup_handlers()
839 il_setup_rx_scan_handlers(il); in il3945_setup_handlers()
840 il->handlers[N_CARD_STATE] = il3945_hdl_card_state; in il3945_setup_handlers()
843 il3945_hw_handler_setup(il); in il3945_setup_handlers()
914 il3945_dma_addr2rbd_ptr(struct il_priv *il, dma_addr_t dma_addr) in il3945_dma_addr2rbd_ptr() argument
931 il3945_rx_queue_restock(struct il_priv *il) in il3945_rx_queue_restock() argument
933 struct il_rx_queue *rxq = &il->rxq; in il3945_rx_queue_restock()
947 il3945_dma_addr2rbd_ptr(il, rxb->page_dma); in il3945_rx_queue_restock()
956 queue_work(il->workqueue, &il->rx_replenish); in il3945_rx_queue_restock()
965 il_rx_queue_update_write_ptr(il, rxq); in il3945_rx_queue_restock()
978 il3945_rx_allocate(struct il_priv *il, gfp_t priority) in il3945_rx_allocate() argument
980 struct il_rx_queue *rxq = &il->rxq; in il3945_rx_allocate()
999 if (il->hw_params.rx_page_order > 0) in il3945_rx_allocate()
1003 page = alloc_pages(gfp_mask, il->hw_params.rx_page_order); in il3945_rx_allocate()
1020 pci_map_page(il->pci_dev, page, 0, in il3945_rx_allocate()
1021 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_allocate()
1024 if (unlikely(pci_dma_mapping_error(il->pci_dev, page_dma))) { in il3945_rx_allocate()
1025 __free_pages(page, il->hw_params.rx_page_order); in il3945_rx_allocate()
1033 pci_unmap_page(il->pci_dev, page_dma, in il3945_rx_allocate()
1034 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_allocate()
1036 __free_pages(page, il->hw_params.rx_page_order); in il3945_rx_allocate()
1048 il->alloc_rxb_page++; in il3945_rx_allocate()
1055 il3945_rx_queue_reset(struct il_priv *il, struct il_rx_queue *rxq) in il3945_rx_queue_reset() argument
1067 pci_unmap_page(il->pci_dev, rxq->pool[i].page_dma, in il3945_rx_queue_reset()
1068 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_queue_reset()
1070 __il_free_pages(il, rxq->pool[i].page); in il3945_rx_queue_reset()
1087 struct il_priv *il = data; in il3945_rx_replenish() local
1090 il3945_rx_allocate(il, GFP_KERNEL); in il3945_rx_replenish()
1092 spin_lock_irqsave(&il->lock, flags); in il3945_rx_replenish()
1093 il3945_rx_queue_restock(il); in il3945_rx_replenish()
1094 spin_unlock_irqrestore(&il->lock, flags); in il3945_rx_replenish()
1098 il3945_rx_replenish_now(struct il_priv *il) in il3945_rx_replenish_now() argument
1100 il3945_rx_allocate(il, GFP_ATOMIC); in il3945_rx_replenish_now()
1102 il3945_rx_queue_restock(il); in il3945_rx_replenish_now()
1111 il3945_rx_queue_free(struct il_priv *il, struct il_rx_queue *rxq) in il3945_rx_queue_free() argument
1116 pci_unmap_page(il->pci_dev, rxq->pool[i].page_dma, in il3945_rx_queue_free()
1117 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_queue_free()
1119 __il_free_pages(il, rxq->pool[i].page); in il3945_rx_queue_free()
1124 dma_free_coherent(&il->pci_dev->dev, 4 * RX_QUEUE_SIZE, rxq->bd, in il3945_rx_queue_free()
1126 dma_free_coherent(&il->pci_dev->dev, sizeof(struct il_rb_status), in il3945_rx_queue_free()
1178 il3945_rx_handle(struct il_priv *il) in il3945_rx_handle() argument
1182 struct il_rx_queue *rxq = &il->rxq; in il3945_rx_handle()
1218 pci_unmap_page(il->pci_dev, rxb->page_dma, in il3945_rx_handle()
1219 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_handle()
1226 reclaim = il_need_reclaim(il, pkt); in il3945_rx_handle()
1231 if (il->handlers[pkt->hdr.cmd]) { in il3945_rx_handle()
1234 il->isr_stats.handlers[pkt->hdr.cmd]++; in il3945_rx_handle()
1235 il->handlers[pkt->hdr.cmd] (il, rxb); in il3945_rx_handle()
1254 il_tx_cmd_complete(il, rxb); in il3945_rx_handle()
1265 pci_map_page(il->pci_dev, rxb->page, 0, in il3945_rx_handle()
1266 PAGE_SIZE << il->hw_params. in il3945_rx_handle()
1268 if (unlikely(pci_dma_mapping_error(il->pci_dev, in il3945_rx_handle()
1270 __il_free_pages(il, rxb->page); in il3945_rx_handle()
1289 il3945_rx_replenish_now(il); in il3945_rx_handle()
1298 il3945_rx_replenish_now(il); in il3945_rx_handle()
1300 il3945_rx_queue_restock(il); in il3945_rx_handle()
1305 il3945_synchronize_irq(struct il_priv *il) in il3945_synchronize_irq() argument
1308 synchronize_irq(il->pci_dev->irq); in il3945_synchronize_irq()
1309 tasklet_kill(&il->irq_tasklet); in il3945_synchronize_irq()
1337 il3945_dump_nic_error_log(struct il_priv *il) in il3945_dump_nic_error_log() argument
1343 base = le32_to_cpu(il->card_alive.error_event_table_ptr); in il3945_dump_nic_error_log()
1350 count = il_read_targ_mem(il, base); in il3945_dump_nic_error_log()
1354 IL_ERR("Status: 0x%08lX, count: %d\n", il->status, count); in il3945_dump_nic_error_log()
1362 desc = il_read_targ_mem(il, base + i); in il3945_dump_nic_error_log()
1363 time = il_read_targ_mem(il, base + i + 1 * sizeof(u32)); in il3945_dump_nic_error_log()
1364 blink1 = il_read_targ_mem(il, base + i + 2 * sizeof(u32)); in il3945_dump_nic_error_log()
1365 blink2 = il_read_targ_mem(il, base + i + 3 * sizeof(u32)); in il3945_dump_nic_error_log()
1366 ilink1 = il_read_targ_mem(il, base + i + 4 * sizeof(u32)); in il3945_dump_nic_error_log()
1367 ilink2 = il_read_targ_mem(il, base + i + 5 * sizeof(u32)); in il3945_dump_nic_error_log()
1368 data1 = il_read_targ_mem(il, base + i + 6 * sizeof(u32)); in il3945_dump_nic_error_log()
1379 struct il_priv *il = from_tasklet(il, t, irq_tasklet); in il3945_irq_tasklet() local
1387 spin_lock_irqsave(&il->lock, flags); in il3945_irq_tasklet()
1392 inta = _il_rd(il, CSR_INT); in il3945_irq_tasklet()
1393 _il_wr(il, CSR_INT, inta); in il3945_irq_tasklet()
1398 inta_fh = _il_rd(il, CSR_FH_INT_STATUS); in il3945_irq_tasklet()
1399 _il_wr(il, CSR_FH_INT_STATUS, inta_fh); in il3945_irq_tasklet()
1402 if (il_get_debug_level(il) & IL_DL_ISR) { in il3945_irq_tasklet()
1404 inta_mask = _il_rd(il, CSR_INT_MASK); in il3945_irq_tasklet()
1410 spin_unlock_irqrestore(&il->lock, flags); in il3945_irq_tasklet()
1426 il_disable_interrupts(il); in il3945_irq_tasklet()
1428 il->isr_stats.hw++; in il3945_irq_tasklet()
1429 il_irq_handle_error(il); in il3945_irq_tasklet()
1436 if (il_get_debug_level(il) & (IL_DL_ISR)) { in il3945_irq_tasklet()
1441 il->isr_stats.sch++; in il3945_irq_tasklet()
1447 il->isr_stats.alive++; in il3945_irq_tasklet()
1458 il->isr_stats.sw++; in il3945_irq_tasklet()
1459 il_irq_handle_error(il); in il3945_irq_tasklet()
1466 il_rx_queue_update_write_ptr(il, &il->rxq); in il3945_irq_tasklet()
1468 spin_lock_irqsave(&il->lock, flags); in il3945_irq_tasklet()
1469 il_txq_update_write_ptr(il, &il->txq[0]); in il3945_irq_tasklet()
1470 il_txq_update_write_ptr(il, &il->txq[1]); in il3945_irq_tasklet()
1471 il_txq_update_write_ptr(il, &il->txq[2]); in il3945_irq_tasklet()
1472 il_txq_update_write_ptr(il, &il->txq[3]); in il3945_irq_tasklet()
1473 il_txq_update_write_ptr(il, &il->txq[4]); in il3945_irq_tasklet()
1474 spin_unlock_irqrestore(&il->lock, flags); in il3945_irq_tasklet()
1476 il->isr_stats.wakeup++; in il3945_irq_tasklet()
1484 il3945_rx_handle(il); in il3945_irq_tasklet()
1485 il->isr_stats.rx++; in il3945_irq_tasklet()
1491 il->isr_stats.tx++; in il3945_irq_tasklet()
1493 _il_wr(il, CSR_FH_INT_STATUS, (1 << 6)); in il3945_irq_tasklet()
1494 il_wr(il, FH39_TCSR_CREDIT(FH39_SRVC_CHNL), 0x0); in il3945_irq_tasklet()
1500 il->isr_stats.unhandled++; in il3945_irq_tasklet()
1503 if (inta & ~il->inta_mask) { in il3945_irq_tasklet()
1505 inta & ~il->inta_mask); in il3945_irq_tasklet()
1511 if (test_bit(S_INT_ENABLED, &il->status)) in il3945_irq_tasklet()
1512 il_enable_interrupts(il); in il3945_irq_tasklet()
1515 if (il_get_debug_level(il) & (IL_DL_ISR)) { in il3945_irq_tasklet()
1516 inta = _il_rd(il, CSR_INT); in il3945_irq_tasklet()
1517 inta_mask = _il_rd(il, CSR_INT_MASK); in il3945_irq_tasklet()
1518 inta_fh = _il_rd(il, CSR_FH_INT_STATUS); in il3945_irq_tasklet()
1526 il3945_get_channels_for_scan(struct il_priv *il, enum nl80211_band band, in il3945_get_channels_for_scan() argument
1538 sband = il_get_hw_mode(il, band); in il3945_get_channels_for_scan()
1542 active_dwell = il_get_active_dwell_time(il, band, n_probes); in il3945_get_channels_for_scan()
1543 passive_dwell = il_get_passive_dwell_time(il, band, vif); in il3945_get_channels_for_scan()
1548 for (i = 0, added = 0; i < il->scan_request->n_channels; i++) { in il3945_get_channels_for_scan()
1549 chan = il->scan_request->channels[i]; in il3945_get_channels_for_scan()
1556 ch_info = il_get_channel_info(il, band, scan_ch->channel); in il3945_get_channels_for_scan()
1571 if (IL_UCODE_API(il->ucode_ver) == 1) in il3945_get_channels_for_scan()
1582 if (IL_UCODE_API(il->ucode_ver) >= 2) { in il3945_get_channels_for_scan()
1620 il3945_init_hw_rates(struct il_priv *il, struct ieee80211_rate *rates) in il3945_init_hw_rates() argument
1647 il3945_dealloc_ucode_pci(struct il_priv *il) in il3945_dealloc_ucode_pci() argument
1649 il_free_fw_desc(il->pci_dev, &il->ucode_code); in il3945_dealloc_ucode_pci()
1650 il_free_fw_desc(il->pci_dev, &il->ucode_data); in il3945_dealloc_ucode_pci()
1651 il_free_fw_desc(il->pci_dev, &il->ucode_data_backup); in il3945_dealloc_ucode_pci()
1652 il_free_fw_desc(il->pci_dev, &il->ucode_init); in il3945_dealloc_ucode_pci()
1653 il_free_fw_desc(il->pci_dev, &il->ucode_init_data); in il3945_dealloc_ucode_pci()
1654 il_free_fw_desc(il->pci_dev, &il->ucode_boot); in il3945_dealloc_ucode_pci()
1662 il3945_verify_inst_full(struct il_priv *il, __le32 * image, u32 len) in il3945_verify_inst_full() argument
1671 il_wr(il, HBUS_TARG_MEM_RADDR, IL39_RTC_INST_LOWER_BOUND); in il3945_verify_inst_full()
1678 val = _il_rd(il, HBUS_TARG_MEM_RDAT); in il3945_verify_inst_full()
1702 il3945_verify_inst_sparse(struct il_priv *il, __le32 * image, u32 len) in il3945_verify_inst_sparse() argument
1715 il_wr(il, HBUS_TARG_MEM_RADDR, i + IL39_RTC_INST_LOWER_BOUND); in il3945_verify_inst_sparse()
1716 val = _il_rd(il, HBUS_TARG_MEM_RDAT); in il3945_verify_inst_sparse()
1738 il3945_verify_ucode(struct il_priv *il) in il3945_verify_ucode() argument
1745 image = (__le32 *) il->ucode_boot.v_addr; in il3945_verify_ucode()
1746 len = il->ucode_boot.len; in il3945_verify_ucode()
1747 rc = il3945_verify_inst_sparse(il, image, len); in il3945_verify_ucode()
1754 image = (__le32 *) il->ucode_init.v_addr; in il3945_verify_ucode()
1755 len = il->ucode_init.len; in il3945_verify_ucode()
1756 rc = il3945_verify_inst_sparse(il, image, len); in il3945_verify_ucode()
1763 image = (__le32 *) il->ucode_code.v_addr; in il3945_verify_ucode()
1764 len = il->ucode_code.len; in il3945_verify_ucode()
1765 rc = il3945_verify_inst_sparse(il, image, len); in il3945_verify_ucode()
1776 image = (__le32 *) il->ucode_boot.v_addr; in il3945_verify_ucode()
1777 len = il->ucode_boot.len; in il3945_verify_ucode()
1778 rc = il3945_verify_inst_full(il, image, len); in il3945_verify_ucode()
1784 il3945_nic_start(struct il_priv *il) in il3945_nic_start() argument
1787 _il_wr(il, CSR_RESET, 0); in il3945_nic_start()
1820 il3945_read_ucode(struct il_priv *il) in il3945_read_ucode() argument
1826 const char *name_pre = il->cfg->fw_name_pre; in il3945_read_ucode()
1827 const unsigned int api_max = il->cfg->ucode_api_max; in il3945_read_ucode()
1828 const unsigned int api_min = il->cfg->ucode_api_min; in il3945_read_ucode()
1838 ret = request_firmware(&ucode_raw, buf, &il->pci_dev->dev); in il3945_read_ucode()
1870 il->ucode_ver = le32_to_cpu(ucode->ver); in il3945_read_ucode()
1871 api_ver = IL_UCODE_API(il->ucode_ver); in il3945_read_ucode()
1887 il->ucode_ver = 0; in il3945_read_ucode()
1898 IL_UCODE_MAJOR(il->ucode_ver), IL_UCODE_MINOR(il->ucode_ver), in il3945_read_ucode()
1899 IL_UCODE_API(il->ucode_ver), IL_UCODE_SERIAL(il->ucode_ver)); in il3945_read_ucode()
1901 snprintf(il->hw->wiphy->fw_version, sizeof(il->hw->wiphy->fw_version), in il3945_read_ucode()
1902 "%u.%u.%u.%u", IL_UCODE_MAJOR(il->ucode_ver), in il3945_read_ucode()
1903 IL_UCODE_MINOR(il->ucode_ver), IL_UCODE_API(il->ucode_ver), in il3945_read_ucode()
1904 IL_UCODE_SERIAL(il->ucode_ver)); in il3945_read_ucode()
1906 D_INFO("f/w package hdr ucode version raw = 0x%x\n", il->ucode_ver); in il3945_read_ucode()
1960 il->ucode_code.len = inst_size; in il3945_read_ucode()
1961 il_alloc_fw_desc(il->pci_dev, &il->ucode_code); in il3945_read_ucode()
1963 il->ucode_data.len = data_size; in il3945_read_ucode()
1964 il_alloc_fw_desc(il->pci_dev, &il->ucode_data); in il3945_read_ucode()
1966 il->ucode_data_backup.len = data_size; in il3945_read_ucode()
1967 il_alloc_fw_desc(il->pci_dev, &il->ucode_data_backup); in il3945_read_ucode()
1969 if (!il->ucode_code.v_addr || !il->ucode_data.v_addr || in il3945_read_ucode()
1970 !il->ucode_data_backup.v_addr) in il3945_read_ucode()
1975 il->ucode_init.len = init_size; in il3945_read_ucode()
1976 il_alloc_fw_desc(il->pci_dev, &il->ucode_init); in il3945_read_ucode()
1978 il->ucode_init_data.len = init_data_size; in il3945_read_ucode()
1979 il_alloc_fw_desc(il->pci_dev, &il->ucode_init_data); in il3945_read_ucode()
1981 if (!il->ucode_init.v_addr || !il->ucode_init_data.v_addr) in il3945_read_ucode()
1987 il->ucode_boot.len = boot_size; in il3945_read_ucode()
1988 il_alloc_fw_desc(il->pci_dev, &il->ucode_boot); in il3945_read_ucode()
1990 if (!il->ucode_boot.v_addr) in il3945_read_ucode()
1999 memcpy(il->ucode_code.v_addr, src, len); in il3945_read_ucode()
2003 il->ucode_code.v_addr, (u32) il->ucode_code.p_addr); in il3945_read_ucode()
2009 memcpy(il->ucode_data.v_addr, src, len); in il3945_read_ucode()
2010 memcpy(il->ucode_data_backup.v_addr, src, len); in il3945_read_ucode()
2017 memcpy(il->ucode_init.v_addr, src, len); in il3945_read_ucode()
2025 memcpy(il->ucode_init_data.v_addr, src, len); in il3945_read_ucode()
2032 memcpy(il->ucode_boot.v_addr, src, len); in il3945_read_ucode()
2041 il3945_dealloc_ucode_pci(il); in il3945_read_ucode()
2060 il3945_set_ucode_ptrs(struct il_priv *il) in il3945_set_ucode_ptrs() argument
2066 pinst = il->ucode_code.p_addr; in il3945_set_ucode_ptrs()
2067 pdata = il->ucode_data_backup.p_addr; in il3945_set_ucode_ptrs()
2070 il_wr_prph(il, BSM_DRAM_INST_PTR_REG, pinst); in il3945_set_ucode_ptrs()
2071 il_wr_prph(il, BSM_DRAM_DATA_PTR_REG, pdata); in il3945_set_ucode_ptrs()
2072 il_wr_prph(il, BSM_DRAM_DATA_BYTECOUNT_REG, il->ucode_data.len); in il3945_set_ucode_ptrs()
2076 il_wr_prph(il, BSM_DRAM_INST_BYTECOUNT_REG, in il3945_set_ucode_ptrs()
2077 il->ucode_code.len | BSM_DRAM_INST_LOAD); in il3945_set_ucode_ptrs()
2092 il3945_init_alive_start(struct il_priv *il) in il3945_init_alive_start() argument
2095 if (il->card_alive_init.is_valid != UCODE_VALID_OK) { in il3945_init_alive_start()
2105 if (il3945_verify_ucode(il)) { in il3945_init_alive_start()
2116 if (il3945_set_ucode_ptrs(il)) { in il3945_init_alive_start()
2125 queue_work(il->workqueue, &il->restart); in il3945_init_alive_start()
2134 il3945_alive_start(struct il_priv *il) in il3945_alive_start() argument
2141 if (il->card_alive.is_valid != UCODE_VALID_OK) { in il3945_alive_start()
2151 if (il3945_verify_ucode(il)) { in il3945_alive_start()
2158 rfkill = il_rd_prph(il, APMG_RFKILL_REG); in il3945_alive_start()
2162 clear_bit(S_RFKILL, &il->status); in il3945_alive_start()
2165 while (il3945_hw_get_temperature(il) == 0) { in il3945_alive_start()
2174 set_bit(S_RFKILL, &il->status); in il3945_alive_start()
2177 set_bit(S_ALIVE, &il->status); in il3945_alive_start()
2180 il_setup_watchdog(il); in il3945_alive_start()
2182 if (il_is_rfkill(il)) in il3945_alive_start()
2185 ieee80211_wake_queues(il->hw); in il3945_alive_start()
2187 il->active_rate = RATES_MASK_3945; in il3945_alive_start()
2189 il_power_update_mode(il, true); in il3945_alive_start()
2191 if (il_is_associated(il)) { in il3945_alive_start()
2193 (struct il3945_rxon_cmd *)(&il->active); in il3945_alive_start()
2195 il->staging.filter_flags |= RXON_FILTER_ASSOC_MSK; in il3945_alive_start()
2199 il_connection_init_rx_config(il); in il3945_alive_start()
2203 il_send_bt_config(il); in il3945_alive_start()
2205 set_bit(S_READY, &il->status); in il3945_alive_start()
2208 il3945_commit_rxon(il); in il3945_alive_start()
2210 il3945_reg_txpower_periodic(il); in il3945_alive_start()
2213 wake_up(&il->wait_command_queue); in il3945_alive_start()
2218 queue_work(il->workqueue, &il->restart); in il3945_alive_start()
2221 static void il3945_cancel_deferred_work(struct il_priv *il);
2224 __il3945_down(struct il_priv *il) in __il3945_down() argument
2231 il_scan_cancel_timeout(il, 200); in __il3945_down()
2233 exit_pending = test_and_set_bit(S_EXIT_PENDING, &il->status); in __il3945_down()
2237 del_timer_sync(&il->watchdog); in __il3945_down()
2240 il_clear_ucode_stations(il); in __il3945_down()
2241 il_dealloc_bcast_stations(il); in __il3945_down()
2242 il_clear_driver_stations(il); in __il3945_down()
2245 wake_up_all(&il->wait_command_queue); in __il3945_down()
2250 clear_bit(S_EXIT_PENDING, &il->status); in __il3945_down()
2253 _il_wr(il, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET); in __il3945_down()
2256 spin_lock_irqsave(&il->lock, flags); in __il3945_down()
2257 il_disable_interrupts(il); in __il3945_down()
2258 spin_unlock_irqrestore(&il->lock, flags); in __il3945_down()
2259 il3945_synchronize_irq(il); in __il3945_down()
2261 if (il->mac80211_registered) in __il3945_down()
2262 ieee80211_stop_queues(il->hw); in __il3945_down()
2266 if (!il_is_init(il)) { in __il3945_down()
2267 il->status = in __il3945_down()
2268 test_bit(S_RFKILL, &il->status) << S_RFKILL | in __il3945_down()
2269 test_bit(S_GEO_CONFIGURED, &il->status) << S_GEO_CONFIGURED | in __il3945_down()
2270 test_bit(S_EXIT_PENDING, &il->status) << S_EXIT_PENDING; in __il3945_down()
2276 il->status &= in __il3945_down()
2277 test_bit(S_RFKILL, &il->status) << S_RFKILL | in __il3945_down()
2278 test_bit(S_GEO_CONFIGURED, &il->status) << S_GEO_CONFIGURED | in __il3945_down()
2279 test_bit(S_FW_ERROR, &il->status) << S_FW_ERROR | in __il3945_down()
2280 test_bit(S_EXIT_PENDING, &il->status) << S_EXIT_PENDING; in __il3945_down()
2287 spin_lock_irq(&il->reg_lock); in __il3945_down()
2290 il3945_hw_txq_ctx_stop(il); in __il3945_down()
2291 il3945_hw_rxq_stop(il); in __il3945_down()
2293 _il_wr_prph(il, APMG_CLK_DIS_REG, APMG_CLK_VAL_DMA_CLK_RQT); in __il3945_down()
2296 _il_apm_stop(il); in __il3945_down()
2298 spin_unlock_irq(&il->reg_lock); in __il3945_down()
2300 il3945_hw_txq_ctx_free(il); in __il3945_down()
2302 memset(&il->card_alive, 0, sizeof(struct il_alive_resp)); in __il3945_down()
2303 dev_kfree_skb(il->beacon_skb); in __il3945_down()
2304 il->beacon_skb = NULL; in __il3945_down()
2307 il3945_clear_free_frames(il); in __il3945_down()
2311 il3945_down(struct il_priv *il) in il3945_down() argument
2313 mutex_lock(&il->mutex); in il3945_down()
2314 __il3945_down(il); in il3945_down()
2315 mutex_unlock(&il->mutex); in il3945_down()
2317 il3945_cancel_deferred_work(il); in il3945_down()
2323 il3945_alloc_bcast_station(struct il_priv *il) in il3945_alloc_bcast_station() argument
2328 spin_lock_irqsave(&il->sta_lock, flags); in il3945_alloc_bcast_station()
2329 sta_id = il_prep_station(il, il_bcast_addr, false, NULL); in il3945_alloc_bcast_station()
2332 spin_unlock_irqrestore(&il->sta_lock, flags); in il3945_alloc_bcast_station()
2337 il->stations[sta_id].used |= IL_STA_DRIVER_ACTIVE; in il3945_alloc_bcast_station()
2338 il->stations[sta_id].used |= IL_STA_BCAST; in il3945_alloc_bcast_station()
2339 spin_unlock_irqrestore(&il->sta_lock, flags); in il3945_alloc_bcast_station()
2345 __il3945_up(struct il_priv *il) in __il3945_up() argument
2349 rc = il3945_alloc_bcast_station(il); in __il3945_up()
2353 if (test_bit(S_EXIT_PENDING, &il->status)) { in __il3945_up()
2358 if (!il->ucode_data_backup.v_addr || !il->ucode_data.v_addr) { in __il3945_up()
2364 if (_il_rd(il, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW) in __il3945_up()
2365 clear_bit(S_RFKILL, &il->status); in __il3945_up()
2367 set_bit(S_RFKILL, &il->status); in __il3945_up()
2371 _il_wr(il, CSR_INT, 0xFFFFFFFF); in __il3945_up()
2373 rc = il3945_hw_nic_init(il); in __il3945_up()
2380 _il_wr(il, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL); in __il3945_up()
2381 _il_wr(il, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED); in __il3945_up()
2384 _il_wr(il, CSR_INT, 0xFFFFFFFF); in __il3945_up()
2385 il_enable_interrupts(il); in __il3945_up()
2388 _il_wr(il, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL); in __il3945_up()
2389 _il_wr(il, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL); in __il3945_up()
2394 memcpy(il->ucode_data_backup.v_addr, il->ucode_data.v_addr, in __il3945_up()
2395 il->ucode_data.len); in __il3945_up()
2398 if (test_bit(S_RFKILL, &il->status)) in __il3945_up()
2406 rc = il->ops->load_ucode(il); in __il3945_up()
2414 il3945_nic_start(il); in __il3945_up()
2421 set_bit(S_EXIT_PENDING, &il->status); in __il3945_up()
2422 __il3945_down(il); in __il3945_up()
2423 clear_bit(S_EXIT_PENDING, &il->status); in __il3945_up()
2440 struct il_priv *il = in il3945_bg_init_alive_start() local
2443 mutex_lock(&il->mutex); in il3945_bg_init_alive_start()
2444 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_bg_init_alive_start()
2447 il3945_init_alive_start(il); in il3945_bg_init_alive_start()
2449 mutex_unlock(&il->mutex); in il3945_bg_init_alive_start()
2455 struct il_priv *il = in il3945_bg_alive_start() local
2458 mutex_lock(&il->mutex); in il3945_bg_alive_start()
2459 if (test_bit(S_EXIT_PENDING, &il->status) || il->txq == NULL) in il3945_bg_alive_start()
2462 il3945_alive_start(il); in il3945_bg_alive_start()
2464 mutex_unlock(&il->mutex); in il3945_bg_alive_start()
2476 struct il_priv *il = in il3945_rfkill_poll() local
2478 bool old_rfkill = test_bit(S_RFKILL, &il->status); in il3945_rfkill_poll()
2480 !(_il_rd(il, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW); in il3945_rfkill_poll()
2484 set_bit(S_RFKILL, &il->status); in il3945_rfkill_poll()
2486 clear_bit(S_RFKILL, &il->status); in il3945_rfkill_poll()
2488 wiphy_rfkill_set_hw_state(il->hw->wiphy, new_rfkill); in il3945_rfkill_poll()
2496 queue_delayed_work(il->workqueue, &il->_3945.rfkill_poll, in il3945_rfkill_poll()
2502 il3945_request_scan(struct il_priv *il, struct ieee80211_vif *vif) in il3945_request_scan() argument
2516 lockdep_assert_held(&il->mutex); in il3945_request_scan()
2518 if (!il->scan_cmd) { in il3945_request_scan()
2519 il->scan_cmd = in il3945_request_scan()
2522 if (!il->scan_cmd) { in il3945_request_scan()
2527 scan = il->scan_cmd; in il3945_request_scan()
2533 if (il_is_associated(il)) { in il3945_request_scan()
2563 if (il->scan_request->n_ssids) { in il3945_request_scan()
2566 for (i = 0; i < il->scan_request->n_ssids; i++) { in il3945_request_scan()
2568 if (!il->scan_request->ssids[i].ssid_len) in il3945_request_scan()
2572 il->scan_request->ssids[i].ssid_len; in il3945_request_scan()
2574 il->scan_request->ssids[i].ssid, in il3945_request_scan()
2575 il->scan_request->ssids[i].ssid_len); in il3945_request_scan()
2586 scan->tx_cmd.sta_id = il->hw_params.bcast_id; in il3945_request_scan()
2591 switch (il->scan_band) { in il3945_request_scan()
2615 il_fill_probe_req(il, (struct ieee80211_mgmt *)scan->data, in il3945_request_scan()
2616 vif->addr, il->scan_request->ie, in il3945_request_scan()
2617 il->scan_request->ie_len, in il3945_request_scan()
2622 scan->flags |= il3945_get_antenna_flags(il); in il3945_request_scan()
2625 il3945_get_channels_for_scan(il, band, is_active, n_probes, in il3945_request_scan()
2638 set_bit(S_SCAN_HW, &il->status); in il3945_request_scan()
2639 ret = il_send_cmd_sync(il, &cmd); in il3945_request_scan()
2641 clear_bit(S_SCAN_HW, &il->status); in il3945_request_scan()
2646 il3945_post_scan(struct il_priv *il) in il3945_post_scan() argument
2652 if (memcmp(&il->staging, &il->active, sizeof(il->staging))) in il3945_post_scan()
2653 il3945_commit_rxon(il); in il3945_post_scan()
2659 struct il_priv *il = container_of(data, struct il_priv, restart); in il3945_bg_restart() local
2661 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_bg_restart()
2664 if (test_and_clear_bit(S_FW_ERROR, &il->status)) { in il3945_bg_restart()
2665 mutex_lock(&il->mutex); in il3945_bg_restart()
2666 il->is_open = 0; in il3945_bg_restart()
2667 mutex_unlock(&il->mutex); in il3945_bg_restart()
2668 il3945_down(il); in il3945_bg_restart()
2669 ieee80211_restart_hw(il->hw); in il3945_bg_restart()
2671 il3945_down(il); in il3945_bg_restart()
2673 mutex_lock(&il->mutex); in il3945_bg_restart()
2674 if (test_bit(S_EXIT_PENDING, &il->status)) { in il3945_bg_restart()
2675 mutex_unlock(&il->mutex); in il3945_bg_restart()
2679 __il3945_up(il); in il3945_bg_restart()
2680 mutex_unlock(&il->mutex); in il3945_bg_restart()
2687 struct il_priv *il = container_of(data, struct il_priv, rx_replenish); in il3945_bg_rx_replenish() local
2689 mutex_lock(&il->mutex); in il3945_bg_rx_replenish()
2690 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_bg_rx_replenish()
2693 il3945_rx_replenish(il); in il3945_bg_rx_replenish()
2695 mutex_unlock(&il->mutex); in il3945_bg_rx_replenish()
2699 il3945_post_associate(struct il_priv *il) in il3945_post_associate() argument
2703 if (!il->vif || !il->is_open) in il3945_post_associate()
2706 D_ASSOC("Associated as %d to: %pM\n", il->vif->bss_conf.aid, in il3945_post_associate()
2707 il->active.bssid_addr); in il3945_post_associate()
2709 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_post_associate()
2712 il_scan_cancel_timeout(il, 200); in il3945_post_associate()
2714 il->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK; in il3945_post_associate()
2715 il3945_commit_rxon(il); in il3945_post_associate()
2717 rc = il_send_rxon_timing(il); in il3945_post_associate()
2721 il->staging.filter_flags |= RXON_FILTER_ASSOC_MSK; in il3945_post_associate()
2723 il->staging.assoc_id = cpu_to_le16(il->vif->bss_conf.aid); in il3945_post_associate()
2725 D_ASSOC("assoc id %d beacon interval %d\n", il->vif->bss_conf.aid, in il3945_post_associate()
2726 il->vif->bss_conf.beacon_int); in il3945_post_associate()
2728 if (il->vif->bss_conf.use_short_preamble) in il3945_post_associate()
2729 il->staging.flags |= RXON_FLG_SHORT_PREAMBLE_MSK; in il3945_post_associate()
2731 il->staging.flags &= ~RXON_FLG_SHORT_PREAMBLE_MSK; in il3945_post_associate()
2733 if (il->staging.flags & RXON_FLG_BAND_24G_MSK) { in il3945_post_associate()
2734 if (il->vif->bss_conf.use_short_slot) in il3945_post_associate()
2735 il->staging.flags |= RXON_FLG_SHORT_SLOT_MSK; in il3945_post_associate()
2737 il->staging.flags &= ~RXON_FLG_SHORT_SLOT_MSK; in il3945_post_associate()
2740 il3945_commit_rxon(il); in il3945_post_associate()
2742 switch (il->vif->type) { in il3945_post_associate()
2744 il3945_rate_scale_init(il->hw, IL_AP_ID); in il3945_post_associate()
2747 il3945_send_beacon_cmd(il); in il3945_post_associate()
2751 il->vif->type); in il3945_post_associate()
2767 struct il_priv *il = hw->priv; in il3945_mac_start() local
2771 mutex_lock(&il->mutex); in il3945_mac_start()
2777 if (!il->ucode_code.len) { in il3945_mac_start()
2778 ret = il3945_read_ucode(il); in il3945_mac_start()
2781 mutex_unlock(&il->mutex); in il3945_mac_start()
2786 ret = __il3945_up(il); in il3945_mac_start()
2788 mutex_unlock(&il->mutex); in il3945_mac_start()
2797 ret = wait_event_timeout(il->wait_command_queue, in il3945_mac_start()
2798 test_bit(S_READY, &il->status), in il3945_mac_start()
2801 if (!test_bit(S_READY, &il->status)) { in il3945_mac_start()
2811 cancel_delayed_work(&il->_3945.rfkill_poll); in il3945_mac_start()
2813 il->is_open = 1; in il3945_mac_start()
2818 il->is_open = 0; in il3945_mac_start()
2826 struct il_priv *il = hw->priv; in il3945_mac_stop() local
2830 if (!il->is_open) { in il3945_mac_stop()
2835 il->is_open = 0; in il3945_mac_stop()
2837 il3945_down(il); in il3945_mac_stop()
2839 flush_workqueue(il->workqueue); in il3945_mac_stop()
2842 queue_delayed_work(il->workqueue, &il->_3945.rfkill_poll, in il3945_mac_stop()
2853 struct il_priv *il = hw->priv; in il3945_mac_tx() local
2860 if (il3945_tx_skb(il, control->sta, skb)) in il3945_mac_tx()
2867 il3945_config_ap(struct il_priv *il) in il3945_config_ap() argument
2869 struct ieee80211_vif *vif = il->vif; in il3945_config_ap()
2872 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_config_ap()
2876 if (!(il_is_associated(il))) { in il3945_config_ap()
2879 il->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK; in il3945_config_ap()
2880 il3945_commit_rxon(il); in il3945_config_ap()
2883 rc = il_send_rxon_timing(il); in il3945_config_ap()
2888 il->staging.assoc_id = 0; in il3945_config_ap()
2891 il->staging.flags |= RXON_FLG_SHORT_PREAMBLE_MSK; in il3945_config_ap()
2893 il->staging.flags &= ~RXON_FLG_SHORT_PREAMBLE_MSK; in il3945_config_ap()
2895 if (il->staging.flags & RXON_FLG_BAND_24G_MSK) { in il3945_config_ap()
2897 il->staging.flags |= RXON_FLG_SHORT_SLOT_MSK; in il3945_config_ap()
2899 il->staging.flags &= ~RXON_FLG_SHORT_SLOT_MSK; in il3945_config_ap()
2902 il->staging.filter_flags |= RXON_FILTER_ASSOC_MSK; in il3945_config_ap()
2903 il3945_commit_rxon(il); in il3945_config_ap()
2905 il3945_send_beacon_cmd(il); in il3945_config_ap()
2913 struct il_priv *il = hw->priv; in il3945_mac_set_key() local
2935 static_key = !il_is_associated(il); in il3945_mac_set_key()
2938 sta_id = il_sta_id_or_broadcast(il, sta); in il3945_mac_set_key()
2945 mutex_lock(&il->mutex); in il3945_mac_set_key()
2946 il_scan_cancel_timeout(il, 100); in il3945_mac_set_key()
2951 ret = il3945_set_static_key(il, key); in il3945_mac_set_key()
2953 ret = il3945_set_dynamic_key(il, key, sta_id); in il3945_mac_set_key()
2958 ret = il3945_remove_static_key(il); in il3945_mac_set_key()
2960 ret = il3945_clear_sta_key_info(il, sta_id); in il3945_mac_set_key()
2968 mutex_unlock(&il->mutex); in il3945_mac_set_key()
2977 struct il_priv *il = hw->priv; in il3945_mac_sta_add() local
2983 mutex_lock(&il->mutex); in il3945_mac_sta_add()
2987 ret = il_add_station_common(il, sta->addr, is_ap, sta, &sta_id); in il3945_mac_sta_add()
2991 mutex_unlock(&il->mutex); in il3945_mac_sta_add()
2999 il3945_rs_rate_init(il, sta, sta_id); in il3945_mac_sta_add()
3000 mutex_unlock(&il->mutex); in il3945_mac_sta_add()
3009 struct il_priv *il = hw->priv; in il3945_configure_filter() local
3028 mutex_lock(&il->mutex); in il3945_configure_filter()
3030 il->staging.filter_flags &= ~filter_nand; in il3945_configure_filter()
3031 il->staging.filter_flags |= filter_or; in il3945_configure_filter()
3039 mutex_unlock(&il->mutex); in il3945_configure_filter()
3075 struct il_priv *il = dev_get_drvdata(d); in il3945_show_debug_level() local
3076 return sprintf(buf, "0x%08X\n", il_get_debug_level(il)); in il3945_show_debug_level()
3083 struct il_priv *il = dev_get_drvdata(d); in il3945_store_debug_level() local
3091 il->debug_level = val; in il3945_store_debug_level()
3105 struct il_priv *il = dev_get_drvdata(d); in il3945_show_temperature() local
3107 if (!il_is_alive(il)) in il3945_show_temperature()
3110 return sprintf(buf, "%d\n", il3945_hw_get_temperature(il)); in il3945_show_temperature()
3118 struct il_priv *il = dev_get_drvdata(d); in il3945_show_tx_power() local
3119 return sprintf(buf, "%d\n", il->tx_power_user_lmt); in il3945_show_tx_power()
3126 struct il_priv *il = dev_get_drvdata(d); in il3945_store_tx_power() local
3134 il3945_hw_reg_set_txpower(il, val); in il3945_store_tx_power()
3144 struct il_priv *il = dev_get_drvdata(d); in il3945_show_flags() local
3146 return sprintf(buf, "0x%04X\n", il->active.flags); in il3945_show_flags()
3153 struct il_priv *il = dev_get_drvdata(d); in il3945_store_flags() local
3156 mutex_lock(&il->mutex); in il3945_store_flags()
3157 if (le32_to_cpu(il->staging.flags) != flags) { in il3945_store_flags()
3159 if (il_scan_cancel_timeout(il, 100)) in il3945_store_flags()
3163 il->staging.flags = cpu_to_le32(flags); in il3945_store_flags()
3164 il3945_commit_rxon(il); in il3945_store_flags()
3167 mutex_unlock(&il->mutex); in il3945_store_flags()
3178 struct il_priv *il = dev_get_drvdata(d); in il3945_show_filter_flags() local
3180 return sprintf(buf, "0x%04X\n", le32_to_cpu(il->active.filter_flags)); in il3945_show_filter_flags()
3187 struct il_priv *il = dev_get_drvdata(d); in il3945_store_filter_flags() local
3190 mutex_lock(&il->mutex); in il3945_store_filter_flags()
3191 if (le32_to_cpu(il->staging.filter_flags) != filter_flags) { in il3945_store_filter_flags()
3193 if (il_scan_cancel_timeout(il, 100)) in il3945_store_filter_flags()
3198 il->staging.filter_flags = cpu_to_le32(filter_flags); in il3945_store_filter_flags()
3199 il3945_commit_rxon(il); in il3945_store_filter_flags()
3202 mutex_unlock(&il->mutex); in il3945_store_filter_flags()
3214 struct il_priv *il = dev_get_drvdata(d); in il3945_show_measurement() local
3220 spin_lock_irqsave(&il->lock, flags); in il3945_show_measurement()
3221 if (!(il->measurement_status & MEASUREMENT_READY)) { in il3945_show_measurement()
3222 spin_unlock_irqrestore(&il->lock, flags); in il3945_show_measurement()
3225 memcpy(&measure_report, &il->measure_report, size); in il3945_show_measurement()
3226 il->measurement_status = 0; in il3945_show_measurement()
3227 spin_unlock_irqrestore(&il->lock, flags); in il3945_show_measurement()
3247 struct il_priv *il = dev_get_drvdata(d); in il3945_store_measurement() local
3249 .channel = le16_to_cpu(il->active.channel), in il3945_store_measurement()
3250 .start_time = cpu_to_le64(il->_3945.last_tsf), in il3945_store_measurement()
3273 il3945_get_measurement(il, &params, type); in il3945_store_measurement()
3285 struct il_priv *il = dev_get_drvdata(d); in il3945_store_retry_rate() local
3287 il->retry_rate = simple_strtoul(buf, NULL, 0); in il3945_store_retry_rate()
3288 if (il->retry_rate <= 0) in il3945_store_retry_rate()
3289 il->retry_rate = 1; in il3945_store_retry_rate()
3298 struct il_priv *il = dev_get_drvdata(d); in il3945_show_retry_rate() local
3299 return sprintf(buf, "%d", il->retry_rate); in il3945_show_retry_rate()
3317 struct il_priv *il = dev_get_drvdata(d); in il3945_show_antenna() local
3319 if (!il_is_alive(il)) in il3945_show_antenna()
3329 struct il_priv *il __maybe_unused = dev_get_drvdata(d); in il3945_store_antenna()
3354 struct il_priv *il = dev_get_drvdata(d); in il3945_show_status() local
3355 if (!il_is_alive(il)) in il3945_show_status()
3357 return sprintf(buf, "0x%08x\n", (int)il->status); in il3945_show_status()
3366 struct il_priv *il = dev_get_drvdata(d); in il3945_dump_error_log() local
3370 il3945_dump_nic_error_log(il); in il3945_dump_error_log()
3384 il3945_setup_deferred_work(struct il_priv *il) in il3945_setup_deferred_work() argument
3386 il->workqueue = create_singlethread_workqueue(DRV_NAME); in il3945_setup_deferred_work()
3388 init_waitqueue_head(&il->wait_command_queue); in il3945_setup_deferred_work()
3390 INIT_WORK(&il->restart, il3945_bg_restart); in il3945_setup_deferred_work()
3391 INIT_WORK(&il->rx_replenish, il3945_bg_rx_replenish); in il3945_setup_deferred_work()
3392 INIT_DELAYED_WORK(&il->init_alive_start, il3945_bg_init_alive_start); in il3945_setup_deferred_work()
3393 INIT_DELAYED_WORK(&il->alive_start, il3945_bg_alive_start); in il3945_setup_deferred_work()
3394 INIT_DELAYED_WORK(&il->_3945.rfkill_poll, il3945_rfkill_poll); in il3945_setup_deferred_work()
3396 il_setup_scan_deferred_work(il); in il3945_setup_deferred_work()
3398 il3945_hw_setup_deferred_work(il); in il3945_setup_deferred_work()
3400 timer_setup(&il->watchdog, il_bg_watchdog, 0); in il3945_setup_deferred_work()
3402 tasklet_setup(&il->irq_tasklet, il3945_irq_tasklet); in il3945_setup_deferred_work()
3406 il3945_cancel_deferred_work(struct il_priv *il) in il3945_cancel_deferred_work() argument
3408 il3945_hw_cancel_deferred_work(il); in il3945_cancel_deferred_work()
3410 cancel_delayed_work_sync(&il->init_alive_start); in il3945_cancel_deferred_work()
3411 cancel_delayed_work(&il->alive_start); in il3945_cancel_deferred_work()
3413 il_cancel_scan_deferred_work(il); in il3945_cancel_deferred_work()
3459 il3945_init_drv(struct il_priv *il) in il3945_init_drv() argument
3462 struct il3945_eeprom *eeprom = (struct il3945_eeprom *)il->eeprom; in il3945_init_drv()
3464 il->retry_rate = 1; in il3945_init_drv()
3465 il->beacon_skb = NULL; in il3945_init_drv()
3467 spin_lock_init(&il->sta_lock); in il3945_init_drv()
3468 spin_lock_init(&il->hcmd_lock); in il3945_init_drv()
3470 INIT_LIST_HEAD(&il->free_frames); in il3945_init_drv()
3472 mutex_init(&il->mutex); in il3945_init_drv()
3474 il->ieee_channels = NULL; in il3945_init_drv()
3475 il->ieee_rates = NULL; in il3945_init_drv()
3476 il->band = NL80211_BAND_2GHZ; in il3945_init_drv()
3478 il->iw_mode = NL80211_IFTYPE_STATION; in il3945_init_drv()
3479 il->missed_beacon_threshold = IL_MISSED_BEACON_THRESHOLD_DEF; in il3945_init_drv()
3482 il->force_reset.reset_duration = IL_DELAY_NEXT_FORCE_FW_RELOAD; in il3945_init_drv()
3490 ret = il_init_channel_map(il); in il3945_init_drv()
3497 if (il3945_txpower_set_from_eeprom(il)) { in il3945_init_drv()
3502 ret = il_init_geos(il); in il3945_init_drv()
3507 il3945_init_hw_rates(il, il->ieee_rates); in il3945_init_drv()
3512 il_free_channel_map(il); in il3945_init_drv()
3520 il3945_setup_mac(struct il_priv *il) in il3945_setup_mac() argument
3523 struct ieee80211_hw *hw = il->hw; in il3945_setup_mac()
3551 if (il->bands[NL80211_BAND_2GHZ].n_channels) in il3945_setup_mac()
3552 il->hw->wiphy->bands[NL80211_BAND_2GHZ] = in il3945_setup_mac()
3553 &il->bands[NL80211_BAND_2GHZ]; in il3945_setup_mac()
3555 if (il->bands[NL80211_BAND_5GHZ].n_channels) in il3945_setup_mac()
3556 il->hw->wiphy->bands[NL80211_BAND_5GHZ] = in il3945_setup_mac()
3557 &il->bands[NL80211_BAND_5GHZ]; in il3945_setup_mac()
3559 il_leds_init(il); in il3945_setup_mac()
3561 wiphy_ext_feature_set(il->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST); in il3945_setup_mac()
3563 ret = ieee80211_register_hw(il->hw); in il3945_setup_mac()
3568 il->mac80211_registered = 1; in il3945_setup_mac()
3577 struct il_priv *il; in il3945_pci_probe() local
3592 il = hw->priv; in il3945_pci_probe()
3593 il->hw = hw; in il3945_pci_probe()
3596 il->cmd_queue = IL39_CMD_QUEUE_NUM; in il3945_pci_probe()
3599 il->cfg = cfg; in il3945_pci_probe()
3600 il->ops = &il3945_ops; in il3945_pci_probe()
3602 il->debugfs_ops = &il3945_debugfs_ops; in il3945_pci_probe()
3604 il->pci_dev = pdev; in il3945_pci_probe()
3605 il->inta_mask = CSR_INI_SET_MASK; in il3945_pci_probe()
3629 pci_set_drvdata(pdev, il); in il3945_pci_probe()
3637 il->hw_base = pci_ioremap_bar(pdev, 0); in il3945_pci_probe()
3638 if (!il->hw_base) { in il3945_pci_probe()
3645 D_INFO("pci_resource_base = %p\n", il->hw_base); in il3945_pci_probe()
3654 spin_lock_init(&il->reg_lock); in il3945_pci_probe()
3655 spin_lock_init(&il->lock); in il3945_pci_probe()
3662 _il_wr(il, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET); in il3945_pci_probe()
3669 err = il_eeprom_init(il); in il3945_pci_probe()
3675 eeprom = (struct il3945_eeprom *)il->eeprom; in il3945_pci_probe()
3677 SET_IEEE80211_PERM_ADDR(il->hw, eeprom->mac_address); in il3945_pci_probe()
3683 err = il3945_hw_set_hw_params(il); in il3945_pci_probe()
3693 err = il3945_init_drv(il); in il3945_pci_probe()
3699 IL_INFO("Detected Intel Wireless WiFi Link %s\n", il->cfg->name); in il3945_pci_probe()
3705 spin_lock_irqsave(&il->lock, flags); in il3945_pci_probe()
3706 il_disable_interrupts(il); in il3945_pci_probe()
3707 spin_unlock_irqrestore(&il->lock, flags); in il3945_pci_probe()
3709 pci_enable_msi(il->pci_dev); in il3945_pci_probe()
3711 err = request_irq(il->pci_dev->irq, il_isr, IRQF_SHARED, DRV_NAME, il); in il3945_pci_probe()
3713 IL_ERR("Error allocating IRQ %d\n", il->pci_dev->irq); in il3945_pci_probe()
3723 il_set_rxon_channel(il, &il->bands[NL80211_BAND_2GHZ].channels[5]); in il3945_pci_probe()
3724 il3945_setup_deferred_work(il); in il3945_pci_probe()
3725 il3945_setup_handlers(il); in il3945_pci_probe()
3726 il_power_initialize(il); in il3945_pci_probe()
3732 il_enable_interrupts(il); in il3945_pci_probe()
3734 err = il3945_setup_mac(il); in il3945_pci_probe()
3738 il_dbgfs_register(il, DRV_NAME); in il3945_pci_probe()
3741 queue_delayed_work(il->workqueue, &il->_3945.rfkill_poll, 2 * HZ); in il3945_pci_probe()
3746 destroy_workqueue(il->workqueue); in il3945_pci_probe()
3747 il->workqueue = NULL; in il3945_pci_probe()
3750 free_irq(il->pci_dev->irq, il); in il3945_pci_probe()
3752 pci_disable_msi(il->pci_dev); in il3945_pci_probe()
3753 il_free_geos(il); in il3945_pci_probe()
3754 il_free_channel_map(il); in il3945_pci_probe()
3756 il3945_unset_hw_params(il); in il3945_pci_probe()
3758 il_eeprom_free(il); in il3945_pci_probe()
3760 iounmap(il->hw_base); in il3945_pci_probe()
3766 ieee80211_free_hw(il->hw); in il3945_pci_probe()
3774 struct il_priv *il = pci_get_drvdata(pdev); in il3945_pci_remove() local
3777 if (!il) in il3945_pci_remove()
3782 il_dbgfs_unregister(il); in il3945_pci_remove()
3784 set_bit(S_EXIT_PENDING, &il->status); in il3945_pci_remove()
3786 il_leds_exit(il); in il3945_pci_remove()
3788 if (il->mac80211_registered) { in il3945_pci_remove()
3789 ieee80211_unregister_hw(il->hw); in il3945_pci_remove()
3790 il->mac80211_registered = 0; in il3945_pci_remove()
3792 il3945_down(il); in il3945_pci_remove()
3802 il_apm_stop(il); in il3945_pci_remove()
3807 spin_lock_irqsave(&il->lock, flags); in il3945_pci_remove()
3808 il_disable_interrupts(il); in il3945_pci_remove()
3809 spin_unlock_irqrestore(&il->lock, flags); in il3945_pci_remove()
3811 il3945_synchronize_irq(il); in il3945_pci_remove()
3815 cancel_delayed_work_sync(&il->_3945.rfkill_poll); in il3945_pci_remove()
3817 il3945_dealloc_ucode_pci(il); in il3945_pci_remove()
3819 if (il->rxq.bd) in il3945_pci_remove()
3820 il3945_rx_queue_free(il, &il->rxq); in il3945_pci_remove()
3821 il3945_hw_txq_ctx_free(il); in il3945_pci_remove()
3823 il3945_unset_hw_params(il); in il3945_pci_remove()
3826 flush_workqueue(il->workqueue); in il3945_pci_remove()
3831 destroy_workqueue(il->workqueue); in il3945_pci_remove()
3832 il->workqueue = NULL; in il3945_pci_remove()
3834 free_irq(pdev->irq, il); in il3945_pci_remove()
3837 iounmap(il->hw_base); in il3945_pci_remove()
3841 il_free_channel_map(il); in il3945_pci_remove()
3842 il_free_geos(il); in il3945_pci_remove()
3843 kfree(il->scan_cmd); in il3945_pci_remove()
3844 dev_kfree_skb(il->beacon_skb); in il3945_pci_remove()
3845 ieee80211_free_hw(il->hw); in il3945_pci_remove()