Lines Matching refs:il
106 il3945_get_antenna_flags(const struct il_priv *il) in il3945_get_antenna_flags() argument
108 struct il3945_eeprom *eeprom = (struct il3945_eeprom *)il->eeprom; in il3945_get_antenna_flags()
133 il3945_set_ccmp_dynamic_key_info(struct il_priv *il, in il3945_set_ccmp_dynamic_key_info() argument
143 if (sta_id == il->hw_params.bcast_id) in il3945_set_ccmp_dynamic_key_info()
150 spin_lock_irqsave(&il->sta_lock, flags); in il3945_set_ccmp_dynamic_key_info()
151 il->stations[sta_id].keyinfo.cipher = keyconf->cipher; in il3945_set_ccmp_dynamic_key_info()
152 il->stations[sta_id].keyinfo.keylen = keyconf->keylen; in il3945_set_ccmp_dynamic_key_info()
153 memcpy(il->stations[sta_id].keyinfo.key, keyconf->key, keyconf->keylen); in il3945_set_ccmp_dynamic_key_info()
155 memcpy(il->stations[sta_id].sta.key.key, keyconf->key, keyconf->keylen); in il3945_set_ccmp_dynamic_key_info()
157 if ((il->stations[sta_id].sta.key. in il3945_set_ccmp_dynamic_key_info()
159 il->stations[sta_id].sta.key.key_offset = in il3945_set_ccmp_dynamic_key_info()
160 il_get_free_ucode_key_idx(il); in il3945_set_ccmp_dynamic_key_info()
164 WARN(il->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET, in il3945_set_ccmp_dynamic_key_info()
167 il->stations[sta_id].sta.key.key_flags = key_flags; in il3945_set_ccmp_dynamic_key_info()
168 il->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; in il3945_set_ccmp_dynamic_key_info()
169 il->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; in il3945_set_ccmp_dynamic_key_info()
173 ret = il_send_add_sta(il, &il->stations[sta_id].sta, CMD_ASYNC); in il3945_set_ccmp_dynamic_key_info()
175 spin_unlock_irqrestore(&il->sta_lock, flags); in il3945_set_ccmp_dynamic_key_info()
181 il3945_set_tkip_dynamic_key_info(struct il_priv *il, in il3945_set_tkip_dynamic_key_info() argument
188 il3945_set_wep_dynamic_key_info(struct il_priv *il, in il3945_set_wep_dynamic_key_info() argument
195 il3945_clear_sta_key_info(struct il_priv *il, u8 sta_id) in il3945_clear_sta_key_info() argument
200 spin_lock_irqsave(&il->sta_lock, flags); in il3945_clear_sta_key_info()
201 memset(&il->stations[sta_id].keyinfo, 0, sizeof(struct il_hw_key)); in il3945_clear_sta_key_info()
202 memset(&il->stations[sta_id].sta.key, 0, sizeof(struct il4965_keyinfo)); in il3945_clear_sta_key_info()
203 il->stations[sta_id].sta.key.key_flags = STA_KEY_FLG_NO_ENC; in il3945_clear_sta_key_info()
204 il->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; in il3945_clear_sta_key_info()
205 il->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; in il3945_clear_sta_key_info()
206 memcpy(&sta_cmd, &il->stations[sta_id].sta, in il3945_clear_sta_key_info()
208 spin_unlock_irqrestore(&il->sta_lock, flags); in il3945_clear_sta_key_info()
211 return il_send_add_sta(il, &sta_cmd, CMD_SYNC); in il3945_clear_sta_key_info()
215 il3945_set_dynamic_key(struct il_priv *il, struct ieee80211_key_conf *keyconf, in il3945_set_dynamic_key() argument
224 ret = il3945_set_ccmp_dynamic_key_info(il, keyconf, sta_id); in il3945_set_dynamic_key()
227 ret = il3945_set_tkip_dynamic_key_info(il, keyconf, sta_id); in il3945_set_dynamic_key()
231 ret = il3945_set_wep_dynamic_key_info(il, keyconf, sta_id); in il3945_set_dynamic_key()
245 il3945_remove_static_key(struct il_priv *il) in il3945_remove_static_key() argument
253 il3945_set_static_key(struct il_priv *il, struct ieee80211_key_conf *key) in il3945_set_static_key() argument
264 il3945_clear_free_frames(struct il_priv *il) in il3945_clear_free_frames() argument
268 D_INFO("%d frames on pre-allocated heap on clear.\n", il->frames_count); in il3945_clear_free_frames()
270 while (!list_empty(&il->free_frames)) { in il3945_clear_free_frames()
271 element = il->free_frames.next; in il3945_clear_free_frames()
274 il->frames_count--; in il3945_clear_free_frames()
277 if (il->frames_count) { in il3945_clear_free_frames()
279 il->frames_count); in il3945_clear_free_frames()
280 il->frames_count = 0; in il3945_clear_free_frames()
285 il3945_get_free_frame(struct il_priv *il) in il3945_get_free_frame() argument
289 if (list_empty(&il->free_frames)) { in il3945_get_free_frame()
296 il->frames_count++; in il3945_get_free_frame()
300 element = il->free_frames.next; in il3945_get_free_frame()
306 il3945_free_frame(struct il_priv *il, struct il3945_frame *frame) in il3945_free_frame() argument
309 list_add(&frame->list, &il->free_frames); in il3945_free_frame()
313 il3945_fill_beacon_frame(struct il_priv *il, struct ieee80211_hdr *hdr, in il3945_fill_beacon_frame() argument
317 if (!il_is_associated(il) || !il->beacon_skb) in il3945_fill_beacon_frame()
320 if (il->beacon_skb->len > left) in il3945_fill_beacon_frame()
323 memcpy(hdr, il->beacon_skb->data, il->beacon_skb->len); in il3945_fill_beacon_frame()
325 return il->beacon_skb->len; in il3945_fill_beacon_frame()
329 il3945_send_beacon_cmd(struct il_priv *il) in il3945_send_beacon_cmd() argument
336 frame = il3945_get_free_frame(il); in il3945_send_beacon_cmd()
344 rate = il_get_lowest_plcp(il); in il3945_send_beacon_cmd()
346 frame_size = il3945_hw_get_beacon_cmd(il, frame, rate); in il3945_send_beacon_cmd()
348 rc = il_send_cmd_pdu(il, C_TX_BEACON, frame_size, &frame->u.cmd[0]); in il3945_send_beacon_cmd()
350 il3945_free_frame(il, frame); in il3945_send_beacon_cmd()
356 il3945_unset_hw_params(struct il_priv *il) in il3945_unset_hw_params() argument
358 if (il->_3945.shared_virt) in il3945_unset_hw_params()
359 dma_free_coherent(&il->pci_dev->dev, in il3945_unset_hw_params()
361 il->_3945.shared_virt, il->_3945.shared_phys); in il3945_unset_hw_params()
365 il3945_build_tx_cmd_hwcrypto(struct il_priv *il, struct ieee80211_tx_info *info, in il3945_build_tx_cmd_hwcrypto() argument
370 struct il_hw_key *keyinfo = &il->stations[sta_id].keyinfo; in il3945_build_tx_cmd_hwcrypto()
409 il3945_build_tx_cmd_basic(struct il_priv *il, struct il_device_cmd *cmd, in il3945_build_tx_cmd_basic() argument
442 il_tx_cmd_protection(il, info, fc, &tx_flags); in il3945_build_tx_cmd_basic()
463 il3945_tx_skb(struct il_priv *il, in il3945_tx_skb() argument
487 spin_lock_irqsave(&il->lock, flags); in il3945_tx_skb()
488 if (il_is_rfkill(il)) { in il3945_tx_skb()
493 if ((ieee80211_get_tx_rate(il->hw, info)->hw_value & 0xFF) == in il3945_tx_skb()
513 spin_unlock_irqrestore(&il->lock, flags); in il3945_tx_skb()
518 sta_id = il_sta_id_or_broadcast(il, sta); in il3945_tx_skb()
534 txq = &il->txq[txq_id]; in il3945_tx_skb()
540 spin_lock_irqsave(&il->lock, flags); in il3945_tx_skb()
568 il3945_build_tx_cmd_hwcrypto(il, info, out_cmd, skb, sta_id); in il3945_tx_skb()
571 il3945_build_tx_cmd_basic(il, out_cmd, info, hdr, sta_id); in il3945_tx_skb()
573 il3945_hw_build_tx_cmd_rate(il, out_cmd, info, hdr, sta_id); in il3945_tx_skb()
598 pci_map_single(il->pci_dev, &out_cmd->hdr, firstlen, in il3945_tx_skb()
600 if (unlikely(pci_dma_mapping_error(il->pci_dev, txcmd_phys))) in il3945_tx_skb()
608 pci_map_single(il->pci_dev, skb->data + hdr_len, secondlen, in il3945_tx_skb()
610 if (unlikely(pci_dma_mapping_error(il->pci_dev, phys_addr))) in il3945_tx_skb()
616 il->ops->txq_attach_buf_to_tfd(il, txq, txcmd_phys, firstlen, 1, 0); in il3945_tx_skb()
620 il->ops->txq_attach_buf_to_tfd(il, txq, phys_addr, secondlen, 0, in il3945_tx_skb()
630 il_update_stats(il, true, fc, skb->len); in il3945_tx_skb()
634 il_print_hex_dump(il, IL_DL_TX, tx_cmd, sizeof(*tx_cmd)); in il3945_tx_skb()
635 il_print_hex_dump(il, IL_DL_TX, (u8 *) tx_cmd->hdr, in il3945_tx_skb()
640 il_txq_update_write_ptr(il, txq); in il3945_tx_skb()
641 spin_unlock_irqrestore(&il->lock, flags); in il3945_tx_skb()
643 if (il_queue_space(q) < q->high_mark && il->mac80211_registered) { in il3945_tx_skb()
645 spin_lock_irqsave(&il->lock, flags); in il3945_tx_skb()
647 il_txq_update_write_ptr(il, txq); in il3945_tx_skb()
648 spin_unlock_irqrestore(&il->lock, flags); in il3945_tx_skb()
651 il_stop_queue(il, txq); in il3945_tx_skb()
657 spin_unlock_irqrestore(&il->lock, flags); in il3945_tx_skb()
663 il3945_get_measurement(struct il_priv *il, in il3945_get_measurement() argument
678 if (il_is_associated(il)) in il3945_get_measurement()
680 il_usecs_to_beacons(il, in il3945_get_measurement()
682 il->_3945.last_tsf, in il3945_get_measurement()
683 le16_to_cpu(il->timing.beacon_interval)); in il3945_get_measurement()
694 if (il_is_associated(il)) in il3945_get_measurement()
696 il_add_beacon_time(il, il->_3945.last_beacon_time, add_time, in il3945_get_measurement()
697 le16_to_cpu(il->timing.beacon_interval)); in il3945_get_measurement()
704 if (il->active.flags & RXON_FLG_BAND_24G_MSK) in il3945_get_measurement()
709 rc = il_send_cmd_sync(il, &cmd); in il3945_get_measurement()
725 il->measurement_status &= ~MEASUREMENT_READY; in il3945_get_measurement()
727 il->measurement_status |= MEASUREMENT_ACTIVE; in il3945_get_measurement()
736 il_free_pages(il, cmd.reply_page); in il3945_get_measurement()
742 il3945_hdl_alive(struct il_priv *il, struct il_rx_buf *rxb) in il3945_hdl_alive() argument
755 memcpy(&il->card_alive_init, &pkt->u.alive_frame, in il3945_hdl_alive()
757 pwork = &il->init_alive_start; in il3945_hdl_alive()
760 memcpy(&il->card_alive, &pkt->u.alive_frame, in il3945_hdl_alive()
762 pwork = &il->alive_start; in il3945_hdl_alive()
763 il3945_disable_events(il); in il3945_hdl_alive()
769 queue_delayed_work(il->workqueue, pwork, msecs_to_jiffies(5)); in il3945_hdl_alive()
775 il3945_hdl_add_sta(struct il_priv *il, struct il_rx_buf *rxb) in il3945_hdl_add_sta() argument
785 il3945_hdl_beacon(struct il_priv *il, struct il_rx_buf *rxb) in il3945_hdl_beacon() argument
799 il->ibss_manager = le32_to_cpu(beacon->ibss_mgr_status); in il3945_hdl_beacon()
806 il3945_hdl_card_state(struct il_priv *il, struct il_rx_buf *rxb) in il3945_hdl_card_state() argument
810 unsigned long status = il->status; in il3945_hdl_card_state()
816 _il_wr(il, CSR_UCODE_DRV_GP1_SET, CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED); in il3945_hdl_card_state()
819 set_bit(S_RFKILL, &il->status); in il3945_hdl_card_state()
821 clear_bit(S_RFKILL, &il->status); in il3945_hdl_card_state()
823 il_scan_cancel(il); in il3945_hdl_card_state()
826 test_bit(S_RFKILL, &il->status))) in il3945_hdl_card_state()
827 wiphy_rfkill_set_hw_state(il->hw->wiphy, in il3945_hdl_card_state()
828 test_bit(S_RFKILL, &il->status)); in il3945_hdl_card_state()
830 wake_up(&il->wait_command_queue); in il3945_hdl_card_state()
843 il3945_setup_handlers(struct il_priv *il) in il3945_setup_handlers() argument
845 il->handlers[N_ALIVE] = il3945_hdl_alive; in il3945_setup_handlers()
846 il->handlers[C_ADD_STA] = il3945_hdl_add_sta; in il3945_setup_handlers()
847 il->handlers[N_ERROR] = il_hdl_error; in il3945_setup_handlers()
848 il->handlers[N_CHANNEL_SWITCH] = il_hdl_csa; in il3945_setup_handlers()
849 il->handlers[N_SPECTRUM_MEASUREMENT] = il_hdl_spectrum_measurement; in il3945_setup_handlers()
850 il->handlers[N_PM_SLEEP] = il_hdl_pm_sleep; in il3945_setup_handlers()
851 il->handlers[N_PM_DEBUG_STATS] = il_hdl_pm_debug_stats; in il3945_setup_handlers()
852 il->handlers[N_BEACON] = il3945_hdl_beacon; in il3945_setup_handlers()
859 il->handlers[C_STATS] = il3945_hdl_c_stats; in il3945_setup_handlers()
860 il->handlers[N_STATS] = il3945_hdl_stats; in il3945_setup_handlers()
862 il_setup_rx_scan_handlers(il); in il3945_setup_handlers()
863 il->handlers[N_CARD_STATE] = il3945_hdl_card_state; in il3945_setup_handlers()
866 il3945_hw_handler_setup(il); in il3945_setup_handlers()
937 il3945_dma_addr2rbd_ptr(struct il_priv *il, dma_addr_t dma_addr) in il3945_dma_addr2rbd_ptr() argument
954 il3945_rx_queue_restock(struct il_priv *il) in il3945_rx_queue_restock() argument
956 struct il_rx_queue *rxq = &il->rxq; in il3945_rx_queue_restock()
972 il3945_dma_addr2rbd_ptr(il, rxb->page_dma); in il3945_rx_queue_restock()
981 queue_work(il->workqueue, &il->rx_replenish); in il3945_rx_queue_restock()
990 il_rx_queue_update_write_ptr(il, rxq); in il3945_rx_queue_restock()
1003 il3945_rx_allocate(struct il_priv *il, gfp_t priority) in il3945_rx_allocate() argument
1005 struct il_rx_queue *rxq = &il->rxq; in il3945_rx_allocate()
1024 if (il->hw_params.rx_page_order > 0) in il3945_rx_allocate()
1028 page = alloc_pages(gfp_mask, il->hw_params.rx_page_order); in il3945_rx_allocate()
1045 pci_map_page(il->pci_dev, page, 0, in il3945_rx_allocate()
1046 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_allocate()
1049 if (unlikely(pci_dma_mapping_error(il->pci_dev, page_dma))) { in il3945_rx_allocate()
1050 __free_pages(page, il->hw_params.rx_page_order); in il3945_rx_allocate()
1058 pci_unmap_page(il->pci_dev, page_dma, in il3945_rx_allocate()
1059 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_allocate()
1061 __free_pages(page, il->hw_params.rx_page_order); in il3945_rx_allocate()
1073 il->alloc_rxb_page++; in il3945_rx_allocate()
1080 il3945_rx_queue_reset(struct il_priv *il, struct il_rx_queue *rxq) in il3945_rx_queue_reset() argument
1092 pci_unmap_page(il->pci_dev, rxq->pool[i].page_dma, in il3945_rx_queue_reset()
1093 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_queue_reset()
1095 __il_free_pages(il, rxq->pool[i].page); in il3945_rx_queue_reset()
1112 struct il_priv *il = data; in il3945_rx_replenish() local
1115 il3945_rx_allocate(il, GFP_KERNEL); in il3945_rx_replenish()
1117 spin_lock_irqsave(&il->lock, flags); in il3945_rx_replenish()
1118 il3945_rx_queue_restock(il); in il3945_rx_replenish()
1119 spin_unlock_irqrestore(&il->lock, flags); in il3945_rx_replenish()
1123 il3945_rx_replenish_now(struct il_priv *il) in il3945_rx_replenish_now() argument
1125 il3945_rx_allocate(il, GFP_ATOMIC); in il3945_rx_replenish_now()
1127 il3945_rx_queue_restock(il); in il3945_rx_replenish_now()
1136 il3945_rx_queue_free(struct il_priv *il, struct il_rx_queue *rxq) in il3945_rx_queue_free() argument
1141 pci_unmap_page(il->pci_dev, rxq->pool[i].page_dma, in il3945_rx_queue_free()
1142 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_queue_free()
1144 __il_free_pages(il, rxq->pool[i].page); in il3945_rx_queue_free()
1149 dma_free_coherent(&il->pci_dev->dev, 4 * RX_QUEUE_SIZE, rxq->bd, in il3945_rx_queue_free()
1151 dma_free_coherent(&il->pci_dev->dev, sizeof(struct il_rb_status), in il3945_rx_queue_free()
1203 il3945_rx_handle(struct il_priv *il) in il3945_rx_handle() argument
1207 struct il_rx_queue *rxq = &il->rxq; in il3945_rx_handle()
1243 pci_unmap_page(il->pci_dev, rxb->page_dma, in il3945_rx_handle()
1244 PAGE_SIZE << il->hw_params.rx_page_order, in il3945_rx_handle()
1251 reclaim = il_need_reclaim(il, pkt); in il3945_rx_handle()
1256 if (il->handlers[pkt->hdr.cmd]) { in il3945_rx_handle()
1259 il->isr_stats.handlers[pkt->hdr.cmd]++; in il3945_rx_handle()
1260 il->handlers[pkt->hdr.cmd] (il, rxb); in il3945_rx_handle()
1279 il_tx_cmd_complete(il, rxb); in il3945_rx_handle()
1290 pci_map_page(il->pci_dev, rxb->page, 0, in il3945_rx_handle()
1291 PAGE_SIZE << il->hw_params. in il3945_rx_handle()
1293 if (unlikely(pci_dma_mapping_error(il->pci_dev, in il3945_rx_handle()
1295 __il_free_pages(il, rxb->page); in il3945_rx_handle()
1314 il3945_rx_replenish_now(il); in il3945_rx_handle()
1323 il3945_rx_replenish_now(il); in il3945_rx_handle()
1325 il3945_rx_queue_restock(il); in il3945_rx_handle()
1330 il3945_synchronize_irq(struct il_priv *il) in il3945_synchronize_irq() argument
1333 synchronize_irq(il->pci_dev->irq); in il3945_synchronize_irq()
1334 tasklet_kill(&il->irq_tasklet); in il3945_synchronize_irq()
1362 il3945_dump_nic_error_log(struct il_priv *il) in il3945_dump_nic_error_log() argument
1368 base = le32_to_cpu(il->card_alive.error_event_table_ptr); in il3945_dump_nic_error_log()
1375 count = il_read_targ_mem(il, base); in il3945_dump_nic_error_log()
1379 IL_ERR("Status: 0x%08lX, count: %d\n", il->status, count); in il3945_dump_nic_error_log()
1387 desc = il_read_targ_mem(il, base + i); in il3945_dump_nic_error_log()
1388 time = il_read_targ_mem(il, base + i + 1 * sizeof(u32)); in il3945_dump_nic_error_log()
1389 blink1 = il_read_targ_mem(il, base + i + 2 * sizeof(u32)); in il3945_dump_nic_error_log()
1390 blink2 = il_read_targ_mem(il, base + i + 3 * sizeof(u32)); in il3945_dump_nic_error_log()
1391 ilink1 = il_read_targ_mem(il, base + i + 4 * sizeof(u32)); in il3945_dump_nic_error_log()
1392 ilink2 = il_read_targ_mem(il, base + i + 5 * sizeof(u32)); in il3945_dump_nic_error_log()
1393 data1 = il_read_targ_mem(il, base + i + 6 * sizeof(u32)); in il3945_dump_nic_error_log()
1402 il3945_irq_tasklet(struct il_priv *il) in il3945_irq_tasklet() argument
1411 spin_lock_irqsave(&il->lock, flags); in il3945_irq_tasklet()
1416 inta = _il_rd(il, CSR_INT); in il3945_irq_tasklet()
1417 _il_wr(il, CSR_INT, inta); in il3945_irq_tasklet()
1422 inta_fh = _il_rd(il, CSR_FH_INT_STATUS); in il3945_irq_tasklet()
1423 _il_wr(il, CSR_FH_INT_STATUS, inta_fh); in il3945_irq_tasklet()
1426 if (il_get_debug_level(il) & IL_DL_ISR) { in il3945_irq_tasklet()
1428 inta_mask = _il_rd(il, CSR_INT_MASK); in il3945_irq_tasklet()
1434 spin_unlock_irqrestore(&il->lock, flags); in il3945_irq_tasklet()
1450 il_disable_interrupts(il); in il3945_irq_tasklet()
1452 il->isr_stats.hw++; in il3945_irq_tasklet()
1453 il_irq_handle_error(il); in il3945_irq_tasklet()
1460 if (il_get_debug_level(il) & (IL_DL_ISR)) { in il3945_irq_tasklet()
1465 il->isr_stats.sch++; in il3945_irq_tasklet()
1471 il->isr_stats.alive++; in il3945_irq_tasklet()
1482 il->isr_stats.sw++; in il3945_irq_tasklet()
1483 il_irq_handle_error(il); in il3945_irq_tasklet()
1490 il_rx_queue_update_write_ptr(il, &il->rxq); in il3945_irq_tasklet()
1492 spin_lock_irqsave(&il->lock, flags); in il3945_irq_tasklet()
1493 il_txq_update_write_ptr(il, &il->txq[0]); in il3945_irq_tasklet()
1494 il_txq_update_write_ptr(il, &il->txq[1]); in il3945_irq_tasklet()
1495 il_txq_update_write_ptr(il, &il->txq[2]); in il3945_irq_tasklet()
1496 il_txq_update_write_ptr(il, &il->txq[3]); in il3945_irq_tasklet()
1497 il_txq_update_write_ptr(il, &il->txq[4]); in il3945_irq_tasklet()
1498 spin_unlock_irqrestore(&il->lock, flags); in il3945_irq_tasklet()
1500 il->isr_stats.wakeup++; in il3945_irq_tasklet()
1508 il3945_rx_handle(il); in il3945_irq_tasklet()
1509 il->isr_stats.rx++; in il3945_irq_tasklet()
1515 il->isr_stats.tx++; in il3945_irq_tasklet()
1517 _il_wr(il, CSR_FH_INT_STATUS, (1 << 6)); in il3945_irq_tasklet()
1518 il_wr(il, FH39_TCSR_CREDIT(FH39_SRVC_CHNL), 0x0); in il3945_irq_tasklet()
1524 il->isr_stats.unhandled++; in il3945_irq_tasklet()
1527 if (inta & ~il->inta_mask) { in il3945_irq_tasklet()
1529 inta & ~il->inta_mask); in il3945_irq_tasklet()
1535 if (test_bit(S_INT_ENABLED, &il->status)) in il3945_irq_tasklet()
1536 il_enable_interrupts(il); in il3945_irq_tasklet()
1539 if (il_get_debug_level(il) & (IL_DL_ISR)) { in il3945_irq_tasklet()
1540 inta = _il_rd(il, CSR_INT); in il3945_irq_tasklet()
1541 inta_mask = _il_rd(il, CSR_INT_MASK); in il3945_irq_tasklet()
1542 inta_fh = _il_rd(il, CSR_FH_INT_STATUS); in il3945_irq_tasklet()
1550 il3945_get_channels_for_scan(struct il_priv *il, enum ieee80211_band band, in il3945_get_channels_for_scan() argument
1562 sband = il_get_hw_mode(il, band); in il3945_get_channels_for_scan()
1566 active_dwell = il_get_active_dwell_time(il, band, n_probes); in il3945_get_channels_for_scan()
1567 passive_dwell = il_get_passive_dwell_time(il, band, vif); in il3945_get_channels_for_scan()
1572 for (i = 0, added = 0; i < il->scan_request->n_channels; i++) { in il3945_get_channels_for_scan()
1573 chan = il->scan_request->channels[i]; in il3945_get_channels_for_scan()
1580 ch_info = il_get_channel_info(il, band, scan_ch->channel); in il3945_get_channels_for_scan()
1595 if (IL_UCODE_API(il->ucode_ver) == 1) in il3945_get_channels_for_scan()
1606 if (IL_UCODE_API(il->ucode_ver) >= 2) { in il3945_get_channels_for_scan()
1644 il3945_init_hw_rates(struct il_priv *il, struct ieee80211_rate *rates) in il3945_init_hw_rates() argument
1671 il3945_dealloc_ucode_pci(struct il_priv *il) in il3945_dealloc_ucode_pci() argument
1673 il_free_fw_desc(il->pci_dev, &il->ucode_code); in il3945_dealloc_ucode_pci()
1674 il_free_fw_desc(il->pci_dev, &il->ucode_data); in il3945_dealloc_ucode_pci()
1675 il_free_fw_desc(il->pci_dev, &il->ucode_data_backup); in il3945_dealloc_ucode_pci()
1676 il_free_fw_desc(il->pci_dev, &il->ucode_init); in il3945_dealloc_ucode_pci()
1677 il_free_fw_desc(il->pci_dev, &il->ucode_init_data); in il3945_dealloc_ucode_pci()
1678 il_free_fw_desc(il->pci_dev, &il->ucode_boot); in il3945_dealloc_ucode_pci()
1686 il3945_verify_inst_full(struct il_priv *il, __le32 * image, u32 len) in il3945_verify_inst_full() argument
1695 il_wr(il, HBUS_TARG_MEM_RADDR, IL39_RTC_INST_LOWER_BOUND); in il3945_verify_inst_full()
1702 val = _il_rd(il, HBUS_TARG_MEM_RDAT); in il3945_verify_inst_full()
1726 il3945_verify_inst_sparse(struct il_priv *il, __le32 * image, u32 len) in il3945_verify_inst_sparse() argument
1739 il_wr(il, HBUS_TARG_MEM_RADDR, i + IL39_RTC_INST_LOWER_BOUND); in il3945_verify_inst_sparse()
1740 val = _il_rd(il, HBUS_TARG_MEM_RDAT); in il3945_verify_inst_sparse()
1762 il3945_verify_ucode(struct il_priv *il) in il3945_verify_ucode() argument
1769 image = (__le32 *) il->ucode_boot.v_addr; in il3945_verify_ucode()
1770 len = il->ucode_boot.len; in il3945_verify_ucode()
1771 rc = il3945_verify_inst_sparse(il, image, len); in il3945_verify_ucode()
1778 image = (__le32 *) il->ucode_init.v_addr; in il3945_verify_ucode()
1779 len = il->ucode_init.len; in il3945_verify_ucode()
1780 rc = il3945_verify_inst_sparse(il, image, len); in il3945_verify_ucode()
1787 image = (__le32 *) il->ucode_code.v_addr; in il3945_verify_ucode()
1788 len = il->ucode_code.len; in il3945_verify_ucode()
1789 rc = il3945_verify_inst_sparse(il, image, len); in il3945_verify_ucode()
1800 image = (__le32 *) il->ucode_boot.v_addr; in il3945_verify_ucode()
1801 len = il->ucode_boot.len; in il3945_verify_ucode()
1802 rc = il3945_verify_inst_full(il, image, len); in il3945_verify_ucode()
1808 il3945_nic_start(struct il_priv *il) in il3945_nic_start() argument
1811 _il_wr(il, CSR_RESET, 0); in il3945_nic_start()
1844 il3945_read_ucode(struct il_priv *il) in il3945_read_ucode() argument
1850 const char *name_pre = il->cfg->fw_name_pre; in il3945_read_ucode()
1851 const unsigned int api_max = il->cfg->ucode_api_max; in il3945_read_ucode()
1852 const unsigned int api_min = il->cfg->ucode_api_min; in il3945_read_ucode()
1862 ret = request_firmware(&ucode_raw, buf, &il->pci_dev->dev); in il3945_read_ucode()
1894 il->ucode_ver = le32_to_cpu(ucode->ver); in il3945_read_ucode()
1895 api_ver = IL_UCODE_API(il->ucode_ver); in il3945_read_ucode()
1911 il->ucode_ver = 0; in il3945_read_ucode()
1922 IL_UCODE_MAJOR(il->ucode_ver), IL_UCODE_MINOR(il->ucode_ver), in il3945_read_ucode()
1923 IL_UCODE_API(il->ucode_ver), IL_UCODE_SERIAL(il->ucode_ver)); in il3945_read_ucode()
1925 snprintf(il->hw->wiphy->fw_version, sizeof(il->hw->wiphy->fw_version), in il3945_read_ucode()
1926 "%u.%u.%u.%u", IL_UCODE_MAJOR(il->ucode_ver), in il3945_read_ucode()
1927 IL_UCODE_MINOR(il->ucode_ver), IL_UCODE_API(il->ucode_ver), in il3945_read_ucode()
1928 IL_UCODE_SERIAL(il->ucode_ver)); in il3945_read_ucode()
1930 D_INFO("f/w package hdr ucode version raw = 0x%x\n", il->ucode_ver); in il3945_read_ucode()
1984 il->ucode_code.len = inst_size; in il3945_read_ucode()
1985 il_alloc_fw_desc(il->pci_dev, &il->ucode_code); in il3945_read_ucode()
1987 il->ucode_data.len = data_size; in il3945_read_ucode()
1988 il_alloc_fw_desc(il->pci_dev, &il->ucode_data); in il3945_read_ucode()
1990 il->ucode_data_backup.len = data_size; in il3945_read_ucode()
1991 il_alloc_fw_desc(il->pci_dev, &il->ucode_data_backup); in il3945_read_ucode()
1993 if (!il->ucode_code.v_addr || !il->ucode_data.v_addr || in il3945_read_ucode()
1994 !il->ucode_data_backup.v_addr) in il3945_read_ucode()
1999 il->ucode_init.len = init_size; in il3945_read_ucode()
2000 il_alloc_fw_desc(il->pci_dev, &il->ucode_init); in il3945_read_ucode()
2002 il->ucode_init_data.len = init_data_size; in il3945_read_ucode()
2003 il_alloc_fw_desc(il->pci_dev, &il->ucode_init_data); in il3945_read_ucode()
2005 if (!il->ucode_init.v_addr || !il->ucode_init_data.v_addr) in il3945_read_ucode()
2011 il->ucode_boot.len = boot_size; in il3945_read_ucode()
2012 il_alloc_fw_desc(il->pci_dev, &il->ucode_boot); in il3945_read_ucode()
2014 if (!il->ucode_boot.v_addr) in il3945_read_ucode()
2023 memcpy(il->ucode_code.v_addr, src, len); in il3945_read_ucode()
2027 il->ucode_code.v_addr, (u32) il->ucode_code.p_addr); in il3945_read_ucode()
2033 memcpy(il->ucode_data.v_addr, src, len); in il3945_read_ucode()
2034 memcpy(il->ucode_data_backup.v_addr, src, len); in il3945_read_ucode()
2041 memcpy(il->ucode_init.v_addr, src, len); in il3945_read_ucode()
2049 memcpy(il->ucode_init_data.v_addr, src, len); in il3945_read_ucode()
2056 memcpy(il->ucode_boot.v_addr, src, len); in il3945_read_ucode()
2065 il3945_dealloc_ucode_pci(il); in il3945_read_ucode()
2084 il3945_set_ucode_ptrs(struct il_priv *il) in il3945_set_ucode_ptrs() argument
2090 pinst = il->ucode_code.p_addr; in il3945_set_ucode_ptrs()
2091 pdata = il->ucode_data_backup.p_addr; in il3945_set_ucode_ptrs()
2094 il_wr_prph(il, BSM_DRAM_INST_PTR_REG, pinst); in il3945_set_ucode_ptrs()
2095 il_wr_prph(il, BSM_DRAM_DATA_PTR_REG, pdata); in il3945_set_ucode_ptrs()
2096 il_wr_prph(il, BSM_DRAM_DATA_BYTECOUNT_REG, il->ucode_data.len); in il3945_set_ucode_ptrs()
2100 il_wr_prph(il, BSM_DRAM_INST_BYTECOUNT_REG, in il3945_set_ucode_ptrs()
2101 il->ucode_code.len | BSM_DRAM_INST_LOAD); in il3945_set_ucode_ptrs()
2116 il3945_init_alive_start(struct il_priv *il) in il3945_init_alive_start() argument
2119 if (il->card_alive_init.is_valid != UCODE_VALID_OK) { in il3945_init_alive_start()
2129 if (il3945_verify_ucode(il)) { in il3945_init_alive_start()
2140 if (il3945_set_ucode_ptrs(il)) { in il3945_init_alive_start()
2149 queue_work(il->workqueue, &il->restart); in il3945_init_alive_start()
2158 il3945_alive_start(struct il_priv *il) in il3945_alive_start() argument
2165 if (il->card_alive.is_valid != UCODE_VALID_OK) { in il3945_alive_start()
2175 if (il3945_verify_ucode(il)) { in il3945_alive_start()
2182 rfkill = il_rd_prph(il, APMG_RFKILL_REG); in il3945_alive_start()
2186 clear_bit(S_RFKILL, &il->status); in il3945_alive_start()
2189 while (il3945_hw_get_temperature(il) == 0) { in il3945_alive_start()
2198 set_bit(S_RFKILL, &il->status); in il3945_alive_start()
2201 set_bit(S_ALIVE, &il->status); in il3945_alive_start()
2204 il_setup_watchdog(il); in il3945_alive_start()
2206 if (il_is_rfkill(il)) in il3945_alive_start()
2209 ieee80211_wake_queues(il->hw); in il3945_alive_start()
2211 il->active_rate = RATES_MASK_3945; in il3945_alive_start()
2213 il_power_update_mode(il, true); in il3945_alive_start()
2215 if (il_is_associated(il)) { in il3945_alive_start()
2217 (struct il3945_rxon_cmd *)(&il->active); in il3945_alive_start()
2219 il->staging.filter_flags |= RXON_FILTER_ASSOC_MSK; in il3945_alive_start()
2223 il_connection_init_rx_config(il); in il3945_alive_start()
2227 il_send_bt_config(il); in il3945_alive_start()
2229 set_bit(S_READY, &il->status); in il3945_alive_start()
2232 il3945_commit_rxon(il); in il3945_alive_start()
2234 il3945_reg_txpower_periodic(il); in il3945_alive_start()
2237 wake_up(&il->wait_command_queue); in il3945_alive_start()
2242 queue_work(il->workqueue, &il->restart); in il3945_alive_start()
2245 static void il3945_cancel_deferred_work(struct il_priv *il);
2248 __il3945_down(struct il_priv *il) in __il3945_down() argument
2255 il_scan_cancel_timeout(il, 200); in __il3945_down()
2257 exit_pending = test_and_set_bit(S_EXIT_PENDING, &il->status); in __il3945_down()
2261 del_timer_sync(&il->watchdog); in __il3945_down()
2264 il_clear_ucode_stations(il); in __il3945_down()
2265 il_dealloc_bcast_stations(il); in __il3945_down()
2266 il_clear_driver_stations(il); in __il3945_down()
2269 wake_up_all(&il->wait_command_queue); in __il3945_down()
2274 clear_bit(S_EXIT_PENDING, &il->status); in __il3945_down()
2277 _il_wr(il, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET); in __il3945_down()
2280 spin_lock_irqsave(&il->lock, flags); in __il3945_down()
2281 il_disable_interrupts(il); in __il3945_down()
2282 spin_unlock_irqrestore(&il->lock, flags); in __il3945_down()
2283 il3945_synchronize_irq(il); in __il3945_down()
2285 if (il->mac80211_registered) in __il3945_down()
2286 ieee80211_stop_queues(il->hw); in __il3945_down()
2290 if (!il_is_init(il)) { in __il3945_down()
2291 il->status = in __il3945_down()
2292 test_bit(S_RFKILL, &il->status) << S_RFKILL | in __il3945_down()
2293 test_bit(S_GEO_CONFIGURED, &il->status) << S_GEO_CONFIGURED | in __il3945_down()
2294 test_bit(S_EXIT_PENDING, &il->status) << S_EXIT_PENDING; in __il3945_down()
2300 il->status &= in __il3945_down()
2301 test_bit(S_RFKILL, &il->status) << S_RFKILL | in __il3945_down()
2302 test_bit(S_GEO_CONFIGURED, &il->status) << S_GEO_CONFIGURED | in __il3945_down()
2303 test_bit(S_FW_ERROR, &il->status) << S_FW_ERROR | in __il3945_down()
2304 test_bit(S_EXIT_PENDING, &il->status) << S_EXIT_PENDING; in __il3945_down()
2311 spin_lock_irq(&il->reg_lock); in __il3945_down()
2314 il3945_hw_txq_ctx_stop(il); in __il3945_down()
2315 il3945_hw_rxq_stop(il); in __il3945_down()
2317 _il_wr_prph(il, APMG_CLK_DIS_REG, APMG_CLK_VAL_DMA_CLK_RQT); in __il3945_down()
2320 _il_apm_stop(il); in __il3945_down()
2322 spin_unlock_irq(&il->reg_lock); in __il3945_down()
2324 il3945_hw_txq_ctx_free(il); in __il3945_down()
2326 memset(&il->card_alive, 0, sizeof(struct il_alive_resp)); in __il3945_down()
2328 if (il->beacon_skb) in __il3945_down()
2329 dev_kfree_skb(il->beacon_skb); in __il3945_down()
2330 il->beacon_skb = NULL; in __il3945_down()
2333 il3945_clear_free_frames(il); in __il3945_down()
2337 il3945_down(struct il_priv *il) in il3945_down() argument
2339 mutex_lock(&il->mutex); in il3945_down()
2340 __il3945_down(il); in il3945_down()
2341 mutex_unlock(&il->mutex); in il3945_down()
2343 il3945_cancel_deferred_work(il); in il3945_down()
2349 il3945_alloc_bcast_station(struct il_priv *il) in il3945_alloc_bcast_station() argument
2354 spin_lock_irqsave(&il->sta_lock, flags); in il3945_alloc_bcast_station()
2355 sta_id = il_prep_station(il, il_bcast_addr, false, NULL); in il3945_alloc_bcast_station()
2358 spin_unlock_irqrestore(&il->sta_lock, flags); in il3945_alloc_bcast_station()
2363 il->stations[sta_id].used |= IL_STA_DRIVER_ACTIVE; in il3945_alloc_bcast_station()
2364 il->stations[sta_id].used |= IL_STA_BCAST; in il3945_alloc_bcast_station()
2365 spin_unlock_irqrestore(&il->sta_lock, flags); in il3945_alloc_bcast_station()
2371 __il3945_up(struct il_priv *il) in __il3945_up() argument
2375 rc = il3945_alloc_bcast_station(il); in __il3945_up()
2379 if (test_bit(S_EXIT_PENDING, &il->status)) { in __il3945_up()
2384 if (!il->ucode_data_backup.v_addr || !il->ucode_data.v_addr) { in __il3945_up()
2390 if (_il_rd(il, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW) in __il3945_up()
2391 clear_bit(S_RFKILL, &il->status); in __il3945_up()
2393 set_bit(S_RFKILL, &il->status); in __il3945_up()
2397 _il_wr(il, CSR_INT, 0xFFFFFFFF); in __il3945_up()
2399 rc = il3945_hw_nic_init(il); in __il3945_up()
2406 _il_wr(il, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL); in __il3945_up()
2407 _il_wr(il, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED); in __il3945_up()
2410 _il_wr(il, CSR_INT, 0xFFFFFFFF); in __il3945_up()
2411 il_enable_interrupts(il); in __il3945_up()
2414 _il_wr(il, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL); in __il3945_up()
2415 _il_wr(il, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL); in __il3945_up()
2420 memcpy(il->ucode_data_backup.v_addr, il->ucode_data.v_addr, in __il3945_up()
2421 il->ucode_data.len); in __il3945_up()
2424 if (test_bit(S_RFKILL, &il->status)) in __il3945_up()
2432 rc = il->ops->load_ucode(il); in __il3945_up()
2440 il3945_nic_start(il); in __il3945_up()
2447 set_bit(S_EXIT_PENDING, &il->status); in __il3945_up()
2448 __il3945_down(il); in __il3945_up()
2449 clear_bit(S_EXIT_PENDING, &il->status); in __il3945_up()
2466 struct il_priv *il = in il3945_bg_init_alive_start() local
2469 mutex_lock(&il->mutex); in il3945_bg_init_alive_start()
2470 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_bg_init_alive_start()
2473 il3945_init_alive_start(il); in il3945_bg_init_alive_start()
2475 mutex_unlock(&il->mutex); in il3945_bg_init_alive_start()
2481 struct il_priv *il = in il3945_bg_alive_start() local
2484 mutex_lock(&il->mutex); in il3945_bg_alive_start()
2485 if (test_bit(S_EXIT_PENDING, &il->status) || il->txq == NULL) in il3945_bg_alive_start()
2488 il3945_alive_start(il); in il3945_bg_alive_start()
2490 mutex_unlock(&il->mutex); in il3945_bg_alive_start()
2502 struct il_priv *il = in il3945_rfkill_poll() local
2504 bool old_rfkill = test_bit(S_RFKILL, &il->status); in il3945_rfkill_poll()
2506 !(_il_rd(il, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW); in il3945_rfkill_poll()
2510 set_bit(S_RFKILL, &il->status); in il3945_rfkill_poll()
2512 clear_bit(S_RFKILL, &il->status); in il3945_rfkill_poll()
2514 wiphy_rfkill_set_hw_state(il->hw->wiphy, new_rfkill); in il3945_rfkill_poll()
2522 queue_delayed_work(il->workqueue, &il->_3945.rfkill_poll, in il3945_rfkill_poll()
2528 il3945_request_scan(struct il_priv *il, struct ieee80211_vif *vif) in il3945_request_scan() argument
2542 lockdep_assert_held(&il->mutex); in il3945_request_scan()
2544 if (!il->scan_cmd) { in il3945_request_scan()
2545 il->scan_cmd = in il3945_request_scan()
2548 if (!il->scan_cmd) { in il3945_request_scan()
2553 scan = il->scan_cmd; in il3945_request_scan()
2559 if (il_is_associated(il)) { in il3945_request_scan()
2589 if (il->scan_request->n_ssids) { in il3945_request_scan()
2592 for (i = 0; i < il->scan_request->n_ssids; i++) { in il3945_request_scan()
2594 if (!il->scan_request->ssids[i].ssid_len) in il3945_request_scan()
2598 il->scan_request->ssids[i].ssid_len; in il3945_request_scan()
2600 il->scan_request->ssids[i].ssid, in il3945_request_scan()
2601 il->scan_request->ssids[i].ssid_len); in il3945_request_scan()
2612 scan->tx_cmd.sta_id = il->hw_params.bcast_id; in il3945_request_scan()
2617 switch (il->scan_band) { in il3945_request_scan()
2641 il_fill_probe_req(il, (struct ieee80211_mgmt *)scan->data, in il3945_request_scan()
2642 vif->addr, il->scan_request->ie, in il3945_request_scan()
2643 il->scan_request->ie_len, in il3945_request_scan()
2648 scan->flags |= il3945_get_antenna_flags(il); in il3945_request_scan()
2651 il3945_get_channels_for_scan(il, band, is_active, n_probes, in il3945_request_scan()
2664 set_bit(S_SCAN_HW, &il->status); in il3945_request_scan()
2665 ret = il_send_cmd_sync(il, &cmd); in il3945_request_scan()
2667 clear_bit(S_SCAN_HW, &il->status); in il3945_request_scan()
2672 il3945_post_scan(struct il_priv *il) in il3945_post_scan() argument
2678 if (memcmp(&il->staging, &il->active, sizeof(il->staging))) in il3945_post_scan()
2679 il3945_commit_rxon(il); in il3945_post_scan()
2685 struct il_priv *il = container_of(data, struct il_priv, restart); in il3945_bg_restart() local
2687 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_bg_restart()
2690 if (test_and_clear_bit(S_FW_ERROR, &il->status)) { in il3945_bg_restart()
2691 mutex_lock(&il->mutex); in il3945_bg_restart()
2692 il->is_open = 0; in il3945_bg_restart()
2693 mutex_unlock(&il->mutex); in il3945_bg_restart()
2694 il3945_down(il); in il3945_bg_restart()
2695 ieee80211_restart_hw(il->hw); in il3945_bg_restart()
2697 il3945_down(il); in il3945_bg_restart()
2699 mutex_lock(&il->mutex); in il3945_bg_restart()
2700 if (test_bit(S_EXIT_PENDING, &il->status)) { in il3945_bg_restart()
2701 mutex_unlock(&il->mutex); in il3945_bg_restart()
2705 __il3945_up(il); in il3945_bg_restart()
2706 mutex_unlock(&il->mutex); in il3945_bg_restart()
2713 struct il_priv *il = container_of(data, struct il_priv, rx_replenish); in il3945_bg_rx_replenish() local
2715 mutex_lock(&il->mutex); in il3945_bg_rx_replenish()
2716 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_bg_rx_replenish()
2719 il3945_rx_replenish(il); in il3945_bg_rx_replenish()
2721 mutex_unlock(&il->mutex); in il3945_bg_rx_replenish()
2725 il3945_post_associate(struct il_priv *il) in il3945_post_associate() argument
2730 if (!il->vif || !il->is_open) in il3945_post_associate()
2733 D_ASSOC("Associated as %d to: %pM\n", il->vif->bss_conf.aid, in il3945_post_associate()
2734 il->active.bssid_addr); in il3945_post_associate()
2736 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_post_associate()
2739 il_scan_cancel_timeout(il, 200); in il3945_post_associate()
2741 conf = &il->hw->conf; in il3945_post_associate()
2743 il->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK; in il3945_post_associate()
2744 il3945_commit_rxon(il); in il3945_post_associate()
2746 rc = il_send_rxon_timing(il); in il3945_post_associate()
2750 il->staging.filter_flags |= RXON_FILTER_ASSOC_MSK; in il3945_post_associate()
2752 il->staging.assoc_id = cpu_to_le16(il->vif->bss_conf.aid); in il3945_post_associate()
2754 D_ASSOC("assoc id %d beacon interval %d\n", il->vif->bss_conf.aid, in il3945_post_associate()
2755 il->vif->bss_conf.beacon_int); in il3945_post_associate()
2757 if (il->vif->bss_conf.use_short_preamble) in il3945_post_associate()
2758 il->staging.flags |= RXON_FLG_SHORT_PREAMBLE_MSK; in il3945_post_associate()
2760 il->staging.flags &= ~RXON_FLG_SHORT_PREAMBLE_MSK; in il3945_post_associate()
2762 if (il->staging.flags & RXON_FLG_BAND_24G_MSK) { in il3945_post_associate()
2763 if (il->vif->bss_conf.use_short_slot) in il3945_post_associate()
2764 il->staging.flags |= RXON_FLG_SHORT_SLOT_MSK; in il3945_post_associate()
2766 il->staging.flags &= ~RXON_FLG_SHORT_SLOT_MSK; in il3945_post_associate()
2769 il3945_commit_rxon(il); in il3945_post_associate()
2771 switch (il->vif->type) { in il3945_post_associate()
2773 il3945_rate_scale_init(il->hw, IL_AP_ID); in il3945_post_associate()
2776 il3945_send_beacon_cmd(il); in il3945_post_associate()
2780 il->vif->type); in il3945_post_associate()
2796 struct il_priv *il = hw->priv; in il3945_mac_start() local
2800 mutex_lock(&il->mutex); in il3945_mac_start()
2806 if (!il->ucode_code.len) { in il3945_mac_start()
2807 ret = il3945_read_ucode(il); in il3945_mac_start()
2810 mutex_unlock(&il->mutex); in il3945_mac_start()
2815 ret = __il3945_up(il); in il3945_mac_start()
2817 mutex_unlock(&il->mutex); in il3945_mac_start()
2826 ret = wait_event_timeout(il->wait_command_queue, in il3945_mac_start()
2827 test_bit(S_READY, &il->status), in il3945_mac_start()
2830 if (!test_bit(S_READY, &il->status)) { in il3945_mac_start()
2840 cancel_delayed_work(&il->_3945.rfkill_poll); in il3945_mac_start()
2842 il->is_open = 1; in il3945_mac_start()
2847 il->is_open = 0; in il3945_mac_start()
2855 struct il_priv *il = hw->priv; in il3945_mac_stop() local
2859 if (!il->is_open) { in il3945_mac_stop()
2864 il->is_open = 0; in il3945_mac_stop()
2866 il3945_down(il); in il3945_mac_stop()
2868 flush_workqueue(il->workqueue); in il3945_mac_stop()
2871 queue_delayed_work(il->workqueue, &il->_3945.rfkill_poll, in il3945_mac_stop()
2882 struct il_priv *il = hw->priv; in il3945_mac_tx() local
2889 if (il3945_tx_skb(il, control->sta, skb)) in il3945_mac_tx()
2896 il3945_config_ap(struct il_priv *il) in il3945_config_ap() argument
2898 struct ieee80211_vif *vif = il->vif; in il3945_config_ap()
2901 if (test_bit(S_EXIT_PENDING, &il->status)) in il3945_config_ap()
2905 if (!(il_is_associated(il))) { in il3945_config_ap()
2908 il->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK; in il3945_config_ap()
2909 il3945_commit_rxon(il); in il3945_config_ap()
2912 rc = il_send_rxon_timing(il); in il3945_config_ap()
2917 il->staging.assoc_id = 0; in il3945_config_ap()
2920 il->staging.flags |= RXON_FLG_SHORT_PREAMBLE_MSK; in il3945_config_ap()
2922 il->staging.flags &= ~RXON_FLG_SHORT_PREAMBLE_MSK; in il3945_config_ap()
2924 if (il->staging.flags & RXON_FLG_BAND_24G_MSK) { in il3945_config_ap()
2926 il->staging.flags |= RXON_FLG_SHORT_SLOT_MSK; in il3945_config_ap()
2928 il->staging.flags &= ~RXON_FLG_SHORT_SLOT_MSK; in il3945_config_ap()
2931 il->staging.filter_flags |= RXON_FILTER_ASSOC_MSK; in il3945_config_ap()
2932 il3945_commit_rxon(il); in il3945_config_ap()
2934 il3945_send_beacon_cmd(il); in il3945_config_ap()
2942 struct il_priv *il = hw->priv; in il3945_mac_set_key() local
2964 static_key = !il_is_associated(il); in il3945_mac_set_key()
2967 sta_id = il_sta_id_or_broadcast(il, sta); in il3945_mac_set_key()
2974 mutex_lock(&il->mutex); in il3945_mac_set_key()
2975 il_scan_cancel_timeout(il, 100); in il3945_mac_set_key()
2980 ret = il3945_set_static_key(il, key); in il3945_mac_set_key()
2982 ret = il3945_set_dynamic_key(il, key, sta_id); in il3945_mac_set_key()
2987 ret = il3945_remove_static_key(il); in il3945_mac_set_key()
2989 ret = il3945_clear_sta_key_info(il, sta_id); in il3945_mac_set_key()
2997 mutex_unlock(&il->mutex); in il3945_mac_set_key()
3006 struct il_priv *il = hw->priv; in il3945_mac_sta_add() local
3012 mutex_lock(&il->mutex); in il3945_mac_sta_add()
3016 ret = il_add_station_common(il, sta->addr, is_ap, sta, &sta_id); in il3945_mac_sta_add()
3020 mutex_unlock(&il->mutex); in il3945_mac_sta_add()
3028 il3945_rs_rate_init(il, sta, sta_id); in il3945_mac_sta_add()
3029 mutex_unlock(&il->mutex); in il3945_mac_sta_add()
3038 struct il_priv *il = hw->priv; in il3945_configure_filter() local
3057 mutex_lock(&il->mutex); in il3945_configure_filter()
3059 il->staging.filter_flags &= ~filter_nand; in il3945_configure_filter()
3060 il->staging.filter_flags |= filter_or; in il3945_configure_filter()
3068 mutex_unlock(&il->mutex); in il3945_configure_filter()
3104 struct il_priv *il = dev_get_drvdata(d); in il3945_show_debug_level() local
3105 return sprintf(buf, "0x%08X\n", il_get_debug_level(il)); in il3945_show_debug_level()
3112 struct il_priv *il = dev_get_drvdata(d); in il3945_store_debug_level() local
3120 il->debug_level = val; in il3945_store_debug_level()
3134 struct il_priv *il = dev_get_drvdata(d); in il3945_show_temperature() local
3136 if (!il_is_alive(il)) in il3945_show_temperature()
3139 return sprintf(buf, "%d\n", il3945_hw_get_temperature(il)); in il3945_show_temperature()
3147 struct il_priv *il = dev_get_drvdata(d); in il3945_show_tx_power() local
3148 return sprintf(buf, "%d\n", il->tx_power_user_lmt); in il3945_show_tx_power()
3155 struct il_priv *il = dev_get_drvdata(d); in il3945_store_tx_power() local
3163 il3945_hw_reg_set_txpower(il, val); in il3945_store_tx_power()
3174 struct il_priv *il = dev_get_drvdata(d); in il3945_show_flags() local
3176 return sprintf(buf, "0x%04X\n", il->active.flags); in il3945_show_flags()
3183 struct il_priv *il = dev_get_drvdata(d); in il3945_store_flags() local
3186 mutex_lock(&il->mutex); in il3945_store_flags()
3187 if (le32_to_cpu(il->staging.flags) != flags) { in il3945_store_flags()
3189 if (il_scan_cancel_timeout(il, 100)) in il3945_store_flags()
3193 il->staging.flags = cpu_to_le32(flags); in il3945_store_flags()
3194 il3945_commit_rxon(il); in il3945_store_flags()
3197 mutex_unlock(&il->mutex); in il3945_store_flags()
3209 struct il_priv *il = dev_get_drvdata(d); in il3945_show_filter_flags() local
3211 return sprintf(buf, "0x%04X\n", le32_to_cpu(il->active.filter_flags)); in il3945_show_filter_flags()
3218 struct il_priv *il = dev_get_drvdata(d); in il3945_store_filter_flags() local
3221 mutex_lock(&il->mutex); in il3945_store_filter_flags()
3222 if (le32_to_cpu(il->staging.filter_flags) != filter_flags) { in il3945_store_filter_flags()
3224 if (il_scan_cancel_timeout(il, 100)) in il3945_store_filter_flags()
3229 il->staging.filter_flags = cpu_to_le32(filter_flags); in il3945_store_filter_flags()
3230 il3945_commit_rxon(il); in il3945_store_filter_flags()
3233 mutex_unlock(&il->mutex); in il3945_store_filter_flags()
3245 struct il_priv *il = dev_get_drvdata(d); in il3945_show_measurement() local
3251 spin_lock_irqsave(&il->lock, flags); in il3945_show_measurement()
3252 if (!(il->measurement_status & MEASUREMENT_READY)) { in il3945_show_measurement()
3253 spin_unlock_irqrestore(&il->lock, flags); in il3945_show_measurement()
3256 memcpy(&measure_report, &il->measure_report, size); in il3945_show_measurement()
3257 il->measurement_status = 0; in il3945_show_measurement()
3258 spin_unlock_irqrestore(&il->lock, flags); in il3945_show_measurement()
3278 struct il_priv *il = dev_get_drvdata(d); in il3945_store_measurement() local
3280 .channel = le16_to_cpu(il->active.channel), in il3945_store_measurement()
3281 .start_time = cpu_to_le64(il->_3945.last_tsf), in il3945_store_measurement()
3304 il3945_get_measurement(il, ¶ms, type); in il3945_store_measurement()
3316 struct il_priv *il = dev_get_drvdata(d); in il3945_store_retry_rate() local
3318 il->retry_rate = simple_strtoul(buf, NULL, 0); in il3945_store_retry_rate()
3319 if (il->retry_rate <= 0) in il3945_store_retry_rate()
3320 il->retry_rate = 1; in il3945_store_retry_rate()
3329 struct il_priv *il = dev_get_drvdata(d); in il3945_show_retry_rate() local
3330 return sprintf(buf, "%d", il->retry_rate); in il3945_show_retry_rate()
3348 struct il_priv *il = dev_get_drvdata(d); in il3945_show_antenna() local
3350 if (!il_is_alive(il)) in il3945_show_antenna()
3360 struct il_priv *il __maybe_unused = dev_get_drvdata(d); in il3945_store_antenna()
3386 struct il_priv *il = dev_get_drvdata(d); in il3945_show_status() local
3387 if (!il_is_alive(il)) in il3945_show_status()
3389 return sprintf(buf, "0x%08x\n", (int)il->status); in il3945_show_status()
3398 struct il_priv *il = dev_get_drvdata(d); in il3945_dump_error_log() local
3402 il3945_dump_nic_error_log(il); in il3945_dump_error_log()
3416 il3945_setup_deferred_work(struct il_priv *il) in il3945_setup_deferred_work() argument
3418 il->workqueue = create_singlethread_workqueue(DRV_NAME); in il3945_setup_deferred_work()
3420 init_waitqueue_head(&il->wait_command_queue); in il3945_setup_deferred_work()
3422 INIT_WORK(&il->restart, il3945_bg_restart); in il3945_setup_deferred_work()
3423 INIT_WORK(&il->rx_replenish, il3945_bg_rx_replenish); in il3945_setup_deferred_work()
3424 INIT_DELAYED_WORK(&il->init_alive_start, il3945_bg_init_alive_start); in il3945_setup_deferred_work()
3425 INIT_DELAYED_WORK(&il->alive_start, il3945_bg_alive_start); in il3945_setup_deferred_work()
3426 INIT_DELAYED_WORK(&il->_3945.rfkill_poll, il3945_rfkill_poll); in il3945_setup_deferred_work()
3428 il_setup_scan_deferred_work(il); in il3945_setup_deferred_work()
3430 il3945_hw_setup_deferred_work(il); in il3945_setup_deferred_work()
3432 setup_timer(&il->watchdog, il_bg_watchdog, (unsigned long)il); in il3945_setup_deferred_work()
3434 tasklet_init(&il->irq_tasklet, in il3945_setup_deferred_work()
3436 (unsigned long)il); in il3945_setup_deferred_work()
3440 il3945_cancel_deferred_work(struct il_priv *il) in il3945_cancel_deferred_work() argument
3442 il3945_hw_cancel_deferred_work(il); in il3945_cancel_deferred_work()
3444 cancel_delayed_work_sync(&il->init_alive_start); in il3945_cancel_deferred_work()
3445 cancel_delayed_work(&il->alive_start); in il3945_cancel_deferred_work()
3447 il_cancel_scan_deferred_work(il); in il3945_cancel_deferred_work()
3493 il3945_init_drv(struct il_priv *il) in il3945_init_drv() argument
3496 struct il3945_eeprom *eeprom = (struct il3945_eeprom *)il->eeprom; in il3945_init_drv()
3498 il->retry_rate = 1; in il3945_init_drv()
3499 il->beacon_skb = NULL; in il3945_init_drv()
3501 spin_lock_init(&il->sta_lock); in il3945_init_drv()
3502 spin_lock_init(&il->hcmd_lock); in il3945_init_drv()
3504 INIT_LIST_HEAD(&il->free_frames); in il3945_init_drv()
3506 mutex_init(&il->mutex); in il3945_init_drv()
3508 il->ieee_channels = NULL; in il3945_init_drv()
3509 il->ieee_rates = NULL; in il3945_init_drv()
3510 il->band = IEEE80211_BAND_2GHZ; in il3945_init_drv()
3512 il->iw_mode = NL80211_IFTYPE_STATION; in il3945_init_drv()
3513 il->missed_beacon_threshold = IL_MISSED_BEACON_THRESHOLD_DEF; in il3945_init_drv()
3516 il->force_reset.reset_duration = IL_DELAY_NEXT_FORCE_FW_RELOAD; in il3945_init_drv()
3524 ret = il_init_channel_map(il); in il3945_init_drv()
3531 if (il3945_txpower_set_from_eeprom(il)) { in il3945_init_drv()
3536 ret = il_init_geos(il); in il3945_init_drv()
3541 il3945_init_hw_rates(il, il->ieee_rates); in il3945_init_drv()
3546 il_free_channel_map(il); in il3945_init_drv()
3554 il3945_setup_mac(struct il_priv *il) in il3945_setup_mac() argument
3557 struct ieee80211_hw *hw = il->hw; in il3945_setup_mac()
3585 if (il->bands[IEEE80211_BAND_2GHZ].n_channels) in il3945_setup_mac()
3586 il->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = in il3945_setup_mac()
3587 &il->bands[IEEE80211_BAND_2GHZ]; in il3945_setup_mac()
3589 if (il->bands[IEEE80211_BAND_5GHZ].n_channels) in il3945_setup_mac()
3590 il->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = in il3945_setup_mac()
3591 &il->bands[IEEE80211_BAND_5GHZ]; in il3945_setup_mac()
3593 il_leds_init(il); in il3945_setup_mac()
3595 ret = ieee80211_register_hw(il->hw); in il3945_setup_mac()
3600 il->mac80211_registered = 1; in il3945_setup_mac()
3609 struct il_priv *il; in il3945_pci_probe() local
3624 il = hw->priv; in il3945_pci_probe()
3625 il->hw = hw; in il3945_pci_probe()
3628 il->cmd_queue = IL39_CMD_QUEUE_NUM; in il3945_pci_probe()
3640 il->cfg = cfg; in il3945_pci_probe()
3641 il->ops = &il3945_ops; in il3945_pci_probe()
3643 il->debugfs_ops = &il3945_debugfs_ops; in il3945_pci_probe()
3645 il->pci_dev = pdev; in il3945_pci_probe()
3646 il->inta_mask = CSR_INI_SET_MASK; in il3945_pci_probe()
3670 pci_set_drvdata(pdev, il); in il3945_pci_probe()
3678 il->hw_base = pci_ioremap_bar(pdev, 0); in il3945_pci_probe()
3679 if (!il->hw_base) { in il3945_pci_probe()
3686 D_INFO("pci_resource_base = %p\n", il->hw_base); in il3945_pci_probe()
3695 spin_lock_init(&il->reg_lock); in il3945_pci_probe()
3696 spin_lock_init(&il->lock); in il3945_pci_probe()
3703 _il_wr(il, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET); in il3945_pci_probe()
3710 err = il_eeprom_init(il); in il3945_pci_probe()
3716 eeprom = (struct il3945_eeprom *)il->eeprom; in il3945_pci_probe()
3718 SET_IEEE80211_PERM_ADDR(il->hw, eeprom->mac_address); in il3945_pci_probe()
3724 err = il3945_hw_set_hw_params(il); in il3945_pci_probe()
3734 err = il3945_init_drv(il); in il3945_pci_probe()
3740 IL_INFO("Detected Intel Wireless WiFi Link %s\n", il->cfg->name); in il3945_pci_probe()
3746 spin_lock_irqsave(&il->lock, flags); in il3945_pci_probe()
3747 il_disable_interrupts(il); in il3945_pci_probe()
3748 spin_unlock_irqrestore(&il->lock, flags); in il3945_pci_probe()
3750 pci_enable_msi(il->pci_dev); in il3945_pci_probe()
3752 err = request_irq(il->pci_dev->irq, il_isr, IRQF_SHARED, DRV_NAME, il); in il3945_pci_probe()
3754 IL_ERR("Error allocating IRQ %d\n", il->pci_dev->irq); in il3945_pci_probe()
3764 il_set_rxon_channel(il, &il->bands[IEEE80211_BAND_2GHZ].channels[5]); in il3945_pci_probe()
3765 il3945_setup_deferred_work(il); in il3945_pci_probe()
3766 il3945_setup_handlers(il); in il3945_pci_probe()
3767 il_power_initialize(il); in il3945_pci_probe()
3773 il_enable_interrupts(il); in il3945_pci_probe()
3775 err = il3945_setup_mac(il); in il3945_pci_probe()
3779 err = il_dbgfs_register(il, DRV_NAME); in il3945_pci_probe()
3785 queue_delayed_work(il->workqueue, &il->_3945.rfkill_poll, 2 * HZ); in il3945_pci_probe()
3790 destroy_workqueue(il->workqueue); in il3945_pci_probe()
3791 il->workqueue = NULL; in il3945_pci_probe()
3794 free_irq(il->pci_dev->irq, il); in il3945_pci_probe()
3796 pci_disable_msi(il->pci_dev); in il3945_pci_probe()
3797 il_free_geos(il); in il3945_pci_probe()
3798 il_free_channel_map(il); in il3945_pci_probe()
3800 il3945_unset_hw_params(il); in il3945_pci_probe()
3802 il_eeprom_free(il); in il3945_pci_probe()
3804 iounmap(il->hw_base); in il3945_pci_probe()
3810 ieee80211_free_hw(il->hw); in il3945_pci_probe()
3818 struct il_priv *il = pci_get_drvdata(pdev); in il3945_pci_remove() local
3821 if (!il) in il3945_pci_remove()
3826 il_dbgfs_unregister(il); in il3945_pci_remove()
3828 set_bit(S_EXIT_PENDING, &il->status); in il3945_pci_remove()
3830 il_leds_exit(il); in il3945_pci_remove()
3832 if (il->mac80211_registered) { in il3945_pci_remove()
3833 ieee80211_unregister_hw(il->hw); in il3945_pci_remove()
3834 il->mac80211_registered = 0; in il3945_pci_remove()
3836 il3945_down(il); in il3945_pci_remove()
3846 il_apm_stop(il); in il3945_pci_remove()
3851 spin_lock_irqsave(&il->lock, flags); in il3945_pci_remove()
3852 il_disable_interrupts(il); in il3945_pci_remove()
3853 spin_unlock_irqrestore(&il->lock, flags); in il3945_pci_remove()
3855 il3945_synchronize_irq(il); in il3945_pci_remove()
3859 cancel_delayed_work_sync(&il->_3945.rfkill_poll); in il3945_pci_remove()
3861 il3945_dealloc_ucode_pci(il); in il3945_pci_remove()
3863 if (il->rxq.bd) in il3945_pci_remove()
3864 il3945_rx_queue_free(il, &il->rxq); in il3945_pci_remove()
3865 il3945_hw_txq_ctx_free(il); in il3945_pci_remove()
3867 il3945_unset_hw_params(il); in il3945_pci_remove()
3870 flush_workqueue(il->workqueue); in il3945_pci_remove()
3875 destroy_workqueue(il->workqueue); in il3945_pci_remove()
3876 il->workqueue = NULL; in il3945_pci_remove()
3878 free_irq(pdev->irq, il); in il3945_pci_remove()
3881 iounmap(il->hw_base); in il3945_pci_remove()
3885 il_free_channel_map(il); in il3945_pci_remove()
3886 il_free_geos(il); in il3945_pci_remove()
3887 kfree(il->scan_cmd); in il3945_pci_remove()
3888 if (il->beacon_skb) in il3945_pci_remove()
3889 dev_kfree_skb(il->beacon_skb); in il3945_pci_remove()
3891 ieee80211_free_hw(il->hw); in il3945_pci_remove()