diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 308 |
1 files changed, 102 insertions, 206 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 7db39866bdc4..b53852dcdbfd 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -46,13 +46,13 @@ | |||
46 | 46 | ||
47 | #include "iwl-eeprom.h" | 47 | #include "iwl-eeprom.h" |
48 | #include "iwl-dev.h" | 48 | #include "iwl-dev.h" |
49 | #include "iwl-core.h" | ||
50 | #include "iwl-io.h" | 49 | #include "iwl-io.h" |
51 | #include "iwl-agn-calib.h" | 50 | #include "iwl-agn-calib.h" |
52 | #include "iwl-agn.h" | 51 | #include "iwl-agn.h" |
53 | #include "iwl-shared.h" | ||
54 | #include "iwl-trans.h" | 52 | #include "iwl-trans.h" |
55 | #include "iwl-op-mode.h" | 53 | #include "iwl-op-mode.h" |
54 | #include "iwl-drv.h" | ||
55 | #include "iwl-modparams.h" | ||
56 | 56 | ||
57 | /****************************************************************************** | 57 | /****************************************************************************** |
58 | * | 58 | * |
@@ -348,14 +348,14 @@ static void iwl_print_cont_event_trace(struct iwl_priv *priv, u32 base, | |||
348 | ptr = base + (4 * sizeof(u32)) + (start_idx * 3 * sizeof(u32)); | 348 | ptr = base + (4 * sizeof(u32)) + (start_idx * 3 * sizeof(u32)); |
349 | 349 | ||
350 | /* Make sure device is powered up for SRAM reads */ | 350 | /* Make sure device is powered up for SRAM reads */ |
351 | spin_lock_irqsave(&trans(priv)->reg_lock, reg_flags); | 351 | spin_lock_irqsave(&priv->trans->reg_lock, reg_flags); |
352 | if (unlikely(!iwl_grab_nic_access(trans(priv)))) { | 352 | if (unlikely(!iwl_grab_nic_access(priv->trans))) { |
353 | spin_unlock_irqrestore(&trans(priv)->reg_lock, reg_flags); | 353 | spin_unlock_irqrestore(&priv->trans->reg_lock, reg_flags); |
354 | return; | 354 | return; |
355 | } | 355 | } |
356 | 356 | ||
357 | /* Set starting address; reads will auto-increment */ | 357 | /* Set starting address; reads will auto-increment */ |
358 | iwl_write32(trans(priv), HBUS_TARG_MEM_RADDR, ptr); | 358 | iwl_write32(priv->trans, HBUS_TARG_MEM_RADDR, ptr); |
359 | 359 | ||
360 | /* | 360 | /* |
361 | * Refuse to read more than would have fit into the log from | 361 | * Refuse to read more than would have fit into the log from |
@@ -371,20 +371,20 @@ static void iwl_print_cont_event_trace(struct iwl_priv *priv, u32 base, | |||
371 | * place event id # at far right for easier visual parsing. | 371 | * place event id # at far right for easier visual parsing. |
372 | */ | 372 | */ |
373 | for (i = 0; i < num_events; i++) { | 373 | for (i = 0; i < num_events; i++) { |
374 | ev = iwl_read32(trans(priv), HBUS_TARG_MEM_RDAT); | 374 | ev = iwl_read32(priv->trans, HBUS_TARG_MEM_RDAT); |
375 | time = iwl_read32(trans(priv), HBUS_TARG_MEM_RDAT); | 375 | time = iwl_read32(priv->trans, HBUS_TARG_MEM_RDAT); |
376 | if (mode == 0) { | 376 | if (mode == 0) { |
377 | trace_iwlwifi_dev_ucode_cont_event( | 377 | trace_iwlwifi_dev_ucode_cont_event( |
378 | trans(priv)->dev, 0, time, ev); | 378 | priv->trans->dev, 0, time, ev); |
379 | } else { | 379 | } else { |
380 | data = iwl_read32(trans(priv), HBUS_TARG_MEM_RDAT); | 380 | data = iwl_read32(priv->trans, HBUS_TARG_MEM_RDAT); |
381 | trace_iwlwifi_dev_ucode_cont_event( | 381 | trace_iwlwifi_dev_ucode_cont_event( |
382 | trans(priv)->dev, time, data, ev); | 382 | priv->trans->dev, time, data, ev); |
383 | } | 383 | } |
384 | } | 384 | } |
385 | /* Allow device to power down */ | 385 | /* Allow device to power down */ |
386 | iwl_release_nic_access(trans(priv)); | 386 | iwl_release_nic_access(priv->trans); |
387 | spin_unlock_irqrestore(&trans(priv)->reg_lock, reg_flags); | 387 | spin_unlock_irqrestore(&priv->trans->reg_lock, reg_flags); |
388 | } | 388 | } |
389 | 389 | ||
390 | static void iwl_continuous_event_trace(struct iwl_priv *priv) | 390 | static void iwl_continuous_event_trace(struct iwl_priv *priv) |
@@ -403,8 +403,7 @@ static void iwl_continuous_event_trace(struct iwl_priv *priv) | |||
403 | 403 | ||
404 | base = priv->device_pointers.log_event_table; | 404 | base = priv->device_pointers.log_event_table; |
405 | if (iwlagn_hw_valid_rtc_data_addr(base)) { | 405 | if (iwlagn_hw_valid_rtc_data_addr(base)) { |
406 | iwl_read_targ_mem_words(trans(priv), base, &read, sizeof(read)); | 406 | iwl_read_targ_mem_words(priv->trans, base, &read, sizeof(read)); |
407 | |||
408 | capacity = read.capacity; | 407 | capacity = read.capacity; |
409 | mode = read.mode; | 408 | mode = read.mode; |
410 | num_wraps = read.wrap_counter; | 409 | num_wraps = read.wrap_counter; |
@@ -444,7 +443,7 @@ static void iwl_continuous_event_trace(struct iwl_priv *priv) | |||
444 | else | 443 | else |
445 | priv->event_log.wraps_once_count++; | 444 | priv->event_log.wraps_once_count++; |
446 | 445 | ||
447 | trace_iwlwifi_dev_ucode_wrap_event(trans(priv)->dev, | 446 | trace_iwlwifi_dev_ucode_wrap_event(priv->trans->dev, |
448 | num_wraps - priv->event_log.num_wraps, | 447 | num_wraps - priv->event_log.num_wraps, |
449 | next_entry, priv->event_log.next_entry); | 448 | next_entry, priv->event_log.next_entry); |
450 | 449 | ||
@@ -579,24 +578,6 @@ static const u8 iwlagn_pan_ac_to_queue[] = { | |||
579 | 7, 6, 5, 4, | 578 | 7, 6, 5, 4, |
580 | }; | 579 | }; |
581 | 580 | ||
582 | static const u8 iwlagn_bss_queue_to_ac[] = { | ||
583 | IEEE80211_AC_VO, | ||
584 | IEEE80211_AC_VI, | ||
585 | IEEE80211_AC_BE, | ||
586 | IEEE80211_AC_BK, | ||
587 | }; | ||
588 | |||
589 | static const u8 iwlagn_pan_queue_to_ac[] = { | ||
590 | IEEE80211_AC_VO, | ||
591 | IEEE80211_AC_VI, | ||
592 | IEEE80211_AC_BE, | ||
593 | IEEE80211_AC_BK, | ||
594 | IEEE80211_AC_BK, | ||
595 | IEEE80211_AC_BE, | ||
596 | IEEE80211_AC_VI, | ||
597 | IEEE80211_AC_VO, | ||
598 | }; | ||
599 | |||
600 | void iwl_init_context(struct iwl_priv *priv, u32 ucode_flags) | 581 | void iwl_init_context(struct iwl_priv *priv, u32 ucode_flags) |
601 | { | 582 | { |
602 | int i; | 583 | int i; |
@@ -670,12 +651,12 @@ void iwl_rf_kill_ct_config(struct iwl_priv *priv) | |||
670 | struct iwl_ct_kill_throttling_config adv_cmd; | 651 | struct iwl_ct_kill_throttling_config adv_cmd; |
671 | int ret = 0; | 652 | int ret = 0; |
672 | 653 | ||
673 | iwl_write32(trans(priv), CSR_UCODE_DRV_GP1_CLR, | 654 | iwl_write32(priv->trans, CSR_UCODE_DRV_GP1_CLR, |
674 | CSR_UCODE_DRV_GP1_REG_BIT_CT_KILL_EXIT); | 655 | CSR_UCODE_DRV_GP1_REG_BIT_CT_KILL_EXIT); |
675 | 656 | ||
676 | priv->thermal_throttle.ct_kill_toggle = false; | 657 | priv->thermal_throttle.ct_kill_toggle = false; |
677 | 658 | ||
678 | if (cfg(priv)->base_params->support_ct_kill_exit) { | 659 | if (priv->cfg->base_params->support_ct_kill_exit) { |
679 | adv_cmd.critical_temperature_enter = | 660 | adv_cmd.critical_temperature_enter = |
680 | cpu_to_le32(priv->hw_params.ct_kill_threshold); | 661 | cpu_to_le32(priv->hw_params.ct_kill_threshold); |
681 | adv_cmd.critical_temperature_exit = | 662 | adv_cmd.critical_temperature_exit = |
@@ -754,7 +735,7 @@ void iwl_send_bt_config(struct iwl_priv *priv) | |||
754 | .kill_cts_mask = 0, | 735 | .kill_cts_mask = 0, |
755 | }; | 736 | }; |
756 | 737 | ||
757 | if (!iwlagn_mod_params.bt_coex_active) | 738 | if (!iwlwifi_mod_params.bt_coex_active) |
758 | bt_cmd.flags = BT_COEX_DISABLE; | 739 | bt_cmd.flags = BT_COEX_DISABLE; |
759 | else | 740 | else |
760 | bt_cmd.flags = BT_COEX_ENABLE; | 741 | bt_cmd.flags = BT_COEX_ENABLE; |
@@ -792,10 +773,10 @@ int iwl_alive_start(struct iwl_priv *priv) | |||
792 | } | 773 | } |
793 | 774 | ||
794 | /* download priority table before any calibration request */ | 775 | /* download priority table before any calibration request */ |
795 | if (cfg(priv)->bt_params && | 776 | if (priv->cfg->bt_params && |
796 | cfg(priv)->bt_params->advanced_bt_coexist) { | 777 | priv->cfg->bt_params->advanced_bt_coexist) { |
797 | /* Configure Bluetooth device coexistence support */ | 778 | /* Configure Bluetooth device coexistence support */ |
798 | if (cfg(priv)->bt_params->bt_sco_disable) | 779 | if (priv->cfg->bt_params->bt_sco_disable) |
799 | priv->bt_enable_pspoll = false; | 780 | priv->bt_enable_pspoll = false; |
800 | else | 781 | else |
801 | priv->bt_enable_pspoll = true; | 782 | priv->bt_enable_pspoll = true; |
@@ -932,9 +913,9 @@ void iwl_down(struct iwl_priv *priv) | |||
932 | priv->bt_status = 0; | 913 | priv->bt_status = 0; |
933 | priv->cur_rssi_ctx = NULL; | 914 | priv->cur_rssi_ctx = NULL; |
934 | priv->bt_is_sco = 0; | 915 | priv->bt_is_sco = 0; |
935 | if (cfg(priv)->bt_params) | 916 | if (priv->cfg->bt_params) |
936 | priv->bt_traffic_load = | 917 | priv->bt_traffic_load = |
937 | cfg(priv)->bt_params->bt_init_traffic_load; | 918 | priv->cfg->bt_params->bt_init_traffic_load; |
938 | else | 919 | else |
939 | priv->bt_traffic_load = 0; | 920 | priv->bt_traffic_load = 0; |
940 | priv->bt_full_concurrent = false; | 921 | priv->bt_full_concurrent = false; |
@@ -949,7 +930,7 @@ void iwl_down(struct iwl_priv *priv) | |||
949 | ieee80211_stop_queues(priv->hw); | 930 | ieee80211_stop_queues(priv->hw); |
950 | 931 | ||
951 | priv->ucode_loaded = false; | 932 | priv->ucode_loaded = false; |
952 | iwl_trans_stop_device(trans(priv)); | 933 | iwl_trans_stop_device(priv->trans); |
953 | 934 | ||
954 | /* Clear out all status bits but a few that are stable across reset */ | 935 | /* Clear out all status bits but a few that are stable across reset */ |
955 | priv->status &= test_bit(STATUS_RF_KILL_HW, &priv->status) << | 936 | priv->status &= test_bit(STATUS_RF_KILL_HW, &priv->status) << |
@@ -1031,12 +1012,12 @@ void iwlagn_prepare_restart(struct iwl_priv *priv) | |||
1031 | priv->bt_status = bt_status; | 1012 | priv->bt_status = bt_status; |
1032 | priv->bt_is_sco = bt_is_sco; | 1013 | priv->bt_is_sco = bt_is_sco; |
1033 | 1014 | ||
1034 | /* reset all queues */ | 1015 | /* reset aggregation queues */ |
1035 | for (i = 0; i < IEEE80211_NUM_ACS; i++) | ||
1036 | atomic_set(&priv->ac_stop_count[i], 0); | ||
1037 | |||
1038 | for (i = IWLAGN_FIRST_AMPDU_QUEUE; i < IWL_MAX_HW_QUEUES; i++) | 1016 | for (i = IWLAGN_FIRST_AMPDU_QUEUE; i < IWL_MAX_HW_QUEUES; i++) |
1039 | priv->queue_to_ac[i] = IWL_INVALID_AC; | 1017 | priv->queue_to_mac80211[i] = IWL_INVALID_MAC80211_QUEUE; |
1018 | /* and stop counts */ | ||
1019 | for (i = 0; i < IWL_MAX_HW_QUEUES; i++) | ||
1020 | atomic_set(&priv->queue_stop_count[i], 0); | ||
1040 | 1021 | ||
1041 | memset(priv->agg_q_alloc, 0, sizeof(priv->agg_q_alloc)); | 1022 | memset(priv->agg_q_alloc, 0, sizeof(priv->agg_q_alloc)); |
1042 | } | 1023 | } |
@@ -1115,7 +1096,7 @@ void iwl_setup_deferred_work(struct iwl_priv *priv) | |||
1115 | 1096 | ||
1116 | iwl_setup_scan_deferred_work(priv); | 1097 | iwl_setup_scan_deferred_work(priv); |
1117 | 1098 | ||
1118 | if (cfg(priv)->bt_params) | 1099 | if (priv->cfg->bt_params) |
1119 | iwlagn_bt_setup_deferred_work(priv); | 1100 | iwlagn_bt_setup_deferred_work(priv); |
1120 | 1101 | ||
1121 | init_timer(&priv->statistics_periodic); | 1102 | init_timer(&priv->statistics_periodic); |
@@ -1129,7 +1110,7 @@ void iwl_setup_deferred_work(struct iwl_priv *priv) | |||
1129 | 1110 | ||
1130 | void iwl_cancel_deferred_work(struct iwl_priv *priv) | 1111 | void iwl_cancel_deferred_work(struct iwl_priv *priv) |
1131 | { | 1112 | { |
1132 | if (cfg(priv)->bt_params) | 1113 | if (priv->cfg->bt_params) |
1133 | iwlagn_bt_cancel_deferred_work(priv); | 1114 | iwlagn_bt_cancel_deferred_work(priv); |
1134 | 1115 | ||
1135 | cancel_work_sync(&priv->run_time_calib_work); | 1116 | cancel_work_sync(&priv->run_time_calib_work); |
@@ -1180,8 +1161,8 @@ static void iwl_init_ht_hw_capab(const struct iwl_priv *priv, | |||
1180 | 1161 | ||
1181 | ht_info->ht_supported = true; | 1162 | ht_info->ht_supported = true; |
1182 | 1163 | ||
1183 | if (cfg(priv)->ht_params && | 1164 | if (priv->cfg->ht_params && |
1184 | cfg(priv)->ht_params->ht_greenfield_support) | 1165 | priv->cfg->ht_params->ht_greenfield_support) |
1185 | ht_info->cap |= IEEE80211_HT_CAP_GRN_FLD; | 1166 | ht_info->cap |= IEEE80211_HT_CAP_GRN_FLD; |
1186 | ht_info->cap |= IEEE80211_HT_CAP_SGI_20; | 1167 | ht_info->cap |= IEEE80211_HT_CAP_SGI_20; |
1187 | max_bit_rate = MAX_BIT_RATE_20_MHZ; | 1168 | max_bit_rate = MAX_BIT_RATE_20_MHZ; |
@@ -1192,7 +1173,7 @@ static void iwl_init_ht_hw_capab(const struct iwl_priv *priv, | |||
1192 | max_bit_rate = MAX_BIT_RATE_40_MHZ; | 1173 | max_bit_rate = MAX_BIT_RATE_40_MHZ; |
1193 | } | 1174 | } |
1194 | 1175 | ||
1195 | if (iwlagn_mod_params.amsdu_size_8K) | 1176 | if (iwlwifi_mod_params.amsdu_size_8K) |
1196 | ht_info->cap |= IEEE80211_HT_CAP_MAX_AMSDU; | 1177 | ht_info->cap |= IEEE80211_HT_CAP_MAX_AMSDU; |
1197 | 1178 | ||
1198 | ht_info->ampdu_factor = CFG_HT_RX_AMPDU_FACTOR_DEF; | 1179 | ht_info->ampdu_factor = CFG_HT_RX_AMPDU_FACTOR_DEF; |
@@ -1325,7 +1306,7 @@ static int iwl_init_geos(struct iwl_priv *priv) | |||
1325 | priv->hw_params.sku & EEPROM_SKU_CAP_BAND_52GHZ) { | 1306 | priv->hw_params.sku & EEPROM_SKU_CAP_BAND_52GHZ) { |
1326 | IWL_INFO(priv, "Incorrectly detected BG card as ABG. " | 1307 | IWL_INFO(priv, "Incorrectly detected BG card as ABG. " |
1327 | "Please send your %s to maintainer.\n", | 1308 | "Please send your %s to maintainer.\n", |
1328 | trans(priv)->hw_id_str); | 1309 | priv->trans->hw_id_str); |
1329 | priv->hw_params.sku &= ~EEPROM_SKU_CAP_BAND_52GHZ; | 1310 | priv->hw_params.sku &= ~EEPROM_SKU_CAP_BAND_52GHZ; |
1330 | } | 1311 | } |
1331 | 1312 | ||
@@ -1363,7 +1344,7 @@ int iwl_init_drv(struct iwl_priv *priv) | |||
1363 | priv->band = IEEE80211_BAND_2GHZ; | 1344 | priv->band = IEEE80211_BAND_2GHZ; |
1364 | 1345 | ||
1365 | priv->plcp_delta_threshold = | 1346 | priv->plcp_delta_threshold = |
1366 | cfg(priv)->base_params->plcp_delta_threshold; | 1347 | priv->cfg->base_params->plcp_delta_threshold; |
1367 | 1348 | ||
1368 | priv->iw_mode = NL80211_IFTYPE_STATION; | 1349 | priv->iw_mode = NL80211_IFTYPE_STATION; |
1369 | priv->current_ht_config.smps = IEEE80211_SMPS_STATIC; | 1350 | priv->current_ht_config.smps = IEEE80211_SMPS_STATIC; |
@@ -1380,8 +1361,8 @@ int iwl_init_drv(struct iwl_priv *priv) | |||
1380 | iwl_init_scan_params(priv); | 1361 | iwl_init_scan_params(priv); |
1381 | 1362 | ||
1382 | /* init bt coex */ | 1363 | /* init bt coex */ |
1383 | if (cfg(priv)->bt_params && | 1364 | if (priv->cfg->bt_params && |
1384 | cfg(priv)->bt_params->advanced_bt_coexist) { | 1365 | priv->cfg->bt_params->advanced_bt_coexist) { |
1385 | priv->kill_ack_mask = IWLAGN_BT_KILL_ACK_MASK_DEFAULT; | 1366 | priv->kill_ack_mask = IWLAGN_BT_KILL_ACK_MASK_DEFAULT; |
1386 | priv->kill_cts_mask = IWLAGN_BT_KILL_CTS_MASK_DEFAULT; | 1367 | priv->kill_cts_mask = IWLAGN_BT_KILL_CTS_MASK_DEFAULT; |
1387 | priv->bt_valid = IWLAGN_BT_ALL_VALID_MSK; | 1368 | priv->bt_valid = IWLAGN_BT_ALL_VALID_MSK; |
@@ -1426,11 +1407,11 @@ void iwl_uninit_drv(struct iwl_priv *priv) | |||
1426 | 1407 | ||
1427 | void iwl_set_hw_params(struct iwl_priv *priv) | 1408 | void iwl_set_hw_params(struct iwl_priv *priv) |
1428 | { | 1409 | { |
1429 | if (cfg(priv)->ht_params) | 1410 | if (priv->cfg->ht_params) |
1430 | priv->hw_params.use_rts_for_aggregation = | 1411 | priv->hw_params.use_rts_for_aggregation = |
1431 | cfg(priv)->ht_params->use_rts_for_aggregation; | 1412 | priv->cfg->ht_params->use_rts_for_aggregation; |
1432 | 1413 | ||
1433 | if (iwlagn_mod_params.disable_11n & IWL_DISABLE_HT_ALL) | 1414 | if (iwlwifi_mod_params.disable_11n & IWL_DISABLE_HT_ALL) |
1434 | priv->hw_params.sku &= ~EEPROM_SKU_CAP_11N_ENABLE; | 1415 | priv->hw_params.sku &= ~EEPROM_SKU_CAP_11N_ENABLE; |
1435 | 1416 | ||
1436 | /* Device-specific setup */ | 1417 | /* Device-specific setup */ |
@@ -1441,32 +1422,32 @@ void iwl_set_hw_params(struct iwl_priv *priv) | |||
1441 | 1422 | ||
1442 | void iwl_debug_config(struct iwl_priv *priv) | 1423 | void iwl_debug_config(struct iwl_priv *priv) |
1443 | { | 1424 | { |
1444 | dev_printk(KERN_INFO, trans(priv)->dev, "CONFIG_IWLWIFI_DEBUG " | 1425 | dev_printk(KERN_INFO, priv->trans->dev, "CONFIG_IWLWIFI_DEBUG " |
1445 | #ifdef CONFIG_IWLWIFI_DEBUG | 1426 | #ifdef CONFIG_IWLWIFI_DEBUG |
1446 | "enabled\n"); | 1427 | "enabled\n"); |
1447 | #else | 1428 | #else |
1448 | "disabled\n"); | 1429 | "disabled\n"); |
1449 | #endif | 1430 | #endif |
1450 | dev_printk(KERN_INFO, trans(priv)->dev, "CONFIG_IWLWIFI_DEBUGFS " | 1431 | dev_printk(KERN_INFO, priv->trans->dev, "CONFIG_IWLWIFI_DEBUGFS " |
1451 | #ifdef CONFIG_IWLWIFI_DEBUGFS | 1432 | #ifdef CONFIG_IWLWIFI_DEBUGFS |
1452 | "enabled\n"); | 1433 | "enabled\n"); |
1453 | #else | 1434 | #else |
1454 | "disabled\n"); | 1435 | "disabled\n"); |
1455 | #endif | 1436 | #endif |
1456 | dev_printk(KERN_INFO, trans(priv)->dev, "CONFIG_IWLWIFI_DEVICE_TRACING " | 1437 | dev_printk(KERN_INFO, priv->trans->dev, "CONFIG_IWLWIFI_DEVICE_TRACING " |
1457 | #ifdef CONFIG_IWLWIFI_DEVICE_TRACING | 1438 | #ifdef CONFIG_IWLWIFI_DEVICE_TRACING |
1458 | "enabled\n"); | 1439 | "enabled\n"); |
1459 | #else | 1440 | #else |
1460 | "disabled\n"); | 1441 | "disabled\n"); |
1461 | #endif | 1442 | #endif |
1462 | 1443 | ||
1463 | dev_printk(KERN_INFO, trans(priv)->dev, "CONFIG_IWLWIFI_DEVICE_TESTMODE " | 1444 | dev_printk(KERN_INFO, priv->trans->dev, "CONFIG_IWLWIFI_DEVICE_TESTMODE " |
1464 | #ifdef CONFIG_IWLWIFI_DEVICE_TESTMODE | 1445 | #ifdef CONFIG_IWLWIFI_DEVICE_TESTMODE |
1465 | "enabled\n"); | 1446 | "enabled\n"); |
1466 | #else | 1447 | #else |
1467 | "disabled\n"); | 1448 | "disabled\n"); |
1468 | #endif | 1449 | #endif |
1469 | dev_printk(KERN_INFO, trans(priv)->dev, "CONFIG_IWLWIFI_P2P " | 1450 | dev_printk(KERN_INFO, priv->trans->dev, "CONFIG_IWLWIFI_P2P " |
1470 | #ifdef CONFIG_IWLWIFI_P2P | 1451 | #ifdef CONFIG_IWLWIFI_P2P |
1471 | "enabled\n"); | 1452 | "enabled\n"); |
1472 | #else | 1453 | #else |
@@ -1475,6 +1456,7 @@ void iwl_debug_config(struct iwl_priv *priv) | |||
1475 | } | 1456 | } |
1476 | 1457 | ||
1477 | static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, | 1458 | static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, |
1459 | const struct iwl_cfg *cfg, | ||
1478 | const struct iwl_fw *fw) | 1460 | const struct iwl_fw *fw) |
1479 | { | 1461 | { |
1480 | struct iwl_priv *priv; | 1462 | struct iwl_priv *priv; |
@@ -1491,8 +1473,6 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, | |||
1491 | STATISTICS_NOTIFICATION, | 1473 | STATISTICS_NOTIFICATION, |
1492 | REPLY_TX, | 1474 | REPLY_TX, |
1493 | }; | 1475 | }; |
1494 | const u8 *q_to_ac; | ||
1495 | int n_q_to_ac; | ||
1496 | int i; | 1476 | int i; |
1497 | 1477 | ||
1498 | /************************ | 1478 | /************************ |
@@ -1500,18 +1480,19 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, | |||
1500 | ************************/ | 1480 | ************************/ |
1501 | hw = iwl_alloc_all(); | 1481 | hw = iwl_alloc_all(); |
1502 | if (!hw) { | 1482 | if (!hw) { |
1503 | pr_err("%s: Cannot allocate network device\n", | 1483 | pr_err("%s: Cannot allocate network device\n", cfg->name); |
1504 | cfg(trans)->name); | ||
1505 | goto out; | 1484 | goto out; |
1506 | } | 1485 | } |
1507 | 1486 | ||
1508 | op_mode = hw->priv; | 1487 | op_mode = hw->priv; |
1509 | op_mode->ops = &iwl_dvm_ops; | 1488 | op_mode->ops = &iwl_dvm_ops; |
1510 | priv = IWL_OP_MODE_GET_DVM(op_mode); | 1489 | priv = IWL_OP_MODE_GET_DVM(op_mode); |
1511 | priv->shrd = trans->shrd; | 1490 | priv->trans = trans; |
1491 | priv->dev = trans->dev; | ||
1492 | priv->cfg = cfg; | ||
1512 | priv->fw = fw; | 1493 | priv->fw = fw; |
1513 | 1494 | ||
1514 | switch (cfg(priv)->device_family) { | 1495 | switch (priv->cfg->device_family) { |
1515 | case IWL_DEVICE_FAMILY_1000: | 1496 | case IWL_DEVICE_FAMILY_1000: |
1516 | case IWL_DEVICE_FAMILY_100: | 1497 | case IWL_DEVICE_FAMILY_100: |
1517 | priv->lib = &iwl1000_lib; | 1498 | priv->lib = &iwl1000_lib; |
@@ -1545,7 +1526,7 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, | |||
1545 | } | 1526 | } |
1546 | 1527 | ||
1547 | if (WARN_ON(!priv->lib)) | 1528 | if (WARN_ON(!priv->lib)) |
1548 | goto out_free_traffic_mem; | 1529 | goto out_free_hw; |
1549 | 1530 | ||
1550 | /* | 1531 | /* |
1551 | * Populate the state variables that the transport layer needs | 1532 | * Populate the state variables that the transport layer needs |
@@ -1554,10 +1535,10 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, | |||
1554 | trans_cfg.op_mode = op_mode; | 1535 | trans_cfg.op_mode = op_mode; |
1555 | trans_cfg.no_reclaim_cmds = no_reclaim_cmds; | 1536 | trans_cfg.no_reclaim_cmds = no_reclaim_cmds; |
1556 | trans_cfg.n_no_reclaim_cmds = ARRAY_SIZE(no_reclaim_cmds); | 1537 | trans_cfg.n_no_reclaim_cmds = ARRAY_SIZE(no_reclaim_cmds); |
1557 | trans_cfg.rx_buf_size_8k = iwlagn_mod_params.amsdu_size_8K; | 1538 | trans_cfg.rx_buf_size_8k = iwlwifi_mod_params.amsdu_size_8K; |
1558 | if (!iwlagn_mod_params.wd_disable) | 1539 | if (!iwlwifi_mod_params.wd_disable) |
1559 | trans_cfg.queue_watchdog_timeout = | 1540 | trans_cfg.queue_watchdog_timeout = |
1560 | cfg(priv)->base_params->wd_timeout; | 1541 | priv->cfg->base_params->wd_timeout; |
1561 | else | 1542 | else |
1562 | trans_cfg.queue_watchdog_timeout = IWL_WATCHHDOG_DISABLED; | 1543 | trans_cfg.queue_watchdog_timeout = IWL_WATCHHDOG_DISABLED; |
1563 | trans_cfg.command_names = iwl_dvm_cmd_strings; | 1544 | trans_cfg.command_names = iwl_dvm_cmd_strings; |
@@ -1574,24 +1555,20 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, | |||
1574 | trans_cfg.queue_to_fifo = iwlagn_ipan_queue_to_tx_fifo; | 1555 | trans_cfg.queue_to_fifo = iwlagn_ipan_queue_to_tx_fifo; |
1575 | trans_cfg.n_queue_to_fifo = | 1556 | trans_cfg.n_queue_to_fifo = |
1576 | ARRAY_SIZE(iwlagn_ipan_queue_to_tx_fifo); | 1557 | ARRAY_SIZE(iwlagn_ipan_queue_to_tx_fifo); |
1577 | q_to_ac = iwlagn_pan_queue_to_ac; | ||
1578 | n_q_to_ac = ARRAY_SIZE(iwlagn_pan_queue_to_ac); | ||
1579 | } else { | 1558 | } else { |
1580 | priv->sta_key_max_num = STA_KEY_MAX_NUM; | 1559 | priv->sta_key_max_num = STA_KEY_MAX_NUM; |
1581 | trans_cfg.cmd_queue = IWL_DEFAULT_CMD_QUEUE_NUM; | 1560 | trans_cfg.cmd_queue = IWL_DEFAULT_CMD_QUEUE_NUM; |
1582 | trans_cfg.queue_to_fifo = iwlagn_default_queue_to_tx_fifo; | 1561 | trans_cfg.queue_to_fifo = iwlagn_default_queue_to_tx_fifo; |
1583 | trans_cfg.n_queue_to_fifo = | 1562 | trans_cfg.n_queue_to_fifo = |
1584 | ARRAY_SIZE(iwlagn_default_queue_to_tx_fifo); | 1563 | ARRAY_SIZE(iwlagn_default_queue_to_tx_fifo); |
1585 | q_to_ac = iwlagn_bss_queue_to_ac; | ||
1586 | n_q_to_ac = ARRAY_SIZE(iwlagn_bss_queue_to_ac); | ||
1587 | } | 1564 | } |
1588 | 1565 | ||
1589 | /* Configure transport layer */ | 1566 | /* Configure transport layer */ |
1590 | iwl_trans_configure(trans(priv), &trans_cfg); | 1567 | iwl_trans_configure(priv->trans, &trans_cfg); |
1591 | 1568 | ||
1592 | /* At this point both hw and priv are allocated. */ | 1569 | /* At this point both hw and priv are allocated. */ |
1593 | 1570 | ||
1594 | SET_IEEE80211_DEV(priv->hw, trans(priv)->dev); | 1571 | SET_IEEE80211_DEV(priv->hw, priv->trans->dev); |
1595 | 1572 | ||
1596 | /* show what debugging capabilities we have */ | 1573 | /* show what debugging capabilities we have */ |
1597 | iwl_debug_config(priv); | 1574 | iwl_debug_config(priv); |
@@ -1600,40 +1577,37 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, | |||
1600 | 1577 | ||
1601 | /* is antenna coupling more than 35dB ? */ | 1578 | /* is antenna coupling more than 35dB ? */ |
1602 | priv->bt_ant_couple_ok = | 1579 | priv->bt_ant_couple_ok = |
1603 | (iwlagn_mod_params.ant_coupling > | 1580 | (iwlwifi_mod_params.ant_coupling > |
1604 | IWL_BT_ANTENNA_COUPLING_THRESHOLD) ? | 1581 | IWL_BT_ANTENNA_COUPLING_THRESHOLD) ? |
1605 | true : false; | 1582 | true : false; |
1606 | 1583 | ||
1607 | /* enable/disable bt channel inhibition */ | 1584 | /* enable/disable bt channel inhibition */ |
1608 | priv->bt_ch_announce = iwlagn_mod_params.bt_ch_announce; | 1585 | priv->bt_ch_announce = iwlwifi_mod_params.bt_ch_announce; |
1609 | IWL_DEBUG_INFO(priv, "BT channel inhibition is %s\n", | 1586 | IWL_DEBUG_INFO(priv, "BT channel inhibition is %s\n", |
1610 | (priv->bt_ch_announce) ? "On" : "Off"); | 1587 | (priv->bt_ch_announce) ? "On" : "Off"); |
1611 | 1588 | ||
1612 | if (iwl_alloc_traffic_mem(priv)) | ||
1613 | IWL_ERR(priv, "Not enough memory to generate traffic log\n"); | ||
1614 | |||
1615 | /* these spin locks will be used in apm_ops.init and EEPROM access | 1589 | /* these spin locks will be used in apm_ops.init and EEPROM access |
1616 | * we should init now | 1590 | * we should init now |
1617 | */ | 1591 | */ |
1618 | spin_lock_init(&trans(priv)->reg_lock); | 1592 | spin_lock_init(&priv->trans->reg_lock); |
1619 | spin_lock_init(&priv->statistics.lock); | 1593 | spin_lock_init(&priv->statistics.lock); |
1620 | 1594 | ||
1621 | /*********************** | 1595 | /*********************** |
1622 | * 2. Read REV register | 1596 | * 2. Read REV register |
1623 | ***********************/ | 1597 | ***********************/ |
1624 | IWL_INFO(priv, "Detected %s, REV=0x%X\n", | 1598 | IWL_INFO(priv, "Detected %s, REV=0x%X\n", |
1625 | cfg(priv)->name, trans(priv)->hw_rev); | 1599 | priv->cfg->name, priv->trans->hw_rev); |
1626 | 1600 | ||
1627 | if (iwl_trans_start_hw(trans(priv))) | 1601 | if (iwl_trans_start_hw(priv->trans)) |
1628 | goto out_free_traffic_mem; | 1602 | goto out_free_hw; |
1629 | 1603 | ||
1630 | /* Read the EEPROM */ | 1604 | /* Read the EEPROM */ |
1631 | if (iwl_eeprom_init(priv, trans(priv)->hw_rev)) { | 1605 | if (iwl_eeprom_init(priv, priv->trans->hw_rev)) { |
1632 | IWL_ERR(priv, "Unable to init EEPROM\n"); | 1606 | IWL_ERR(priv, "Unable to init EEPROM\n"); |
1633 | goto out_free_traffic_mem; | 1607 | goto out_free_hw; |
1634 | } | 1608 | } |
1635 | /* Reset chip to save power until we load uCode during "up". */ | 1609 | /* Reset chip to save power until we load uCode during "up". */ |
1636 | iwl_trans_stop_hw(trans(priv)); | 1610 | iwl_trans_stop_hw(priv->trans, false); |
1637 | 1611 | ||
1638 | if (iwl_eeprom_check_version(priv)) | 1612 | if (iwl_eeprom_check_version(priv)) |
1639 | goto out_free_eeprom; | 1613 | goto out_free_eeprom; |
@@ -1672,24 +1646,21 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, | |||
1672 | trans_cfg.queue_to_fifo = iwlagn_default_queue_to_tx_fifo; | 1646 | trans_cfg.queue_to_fifo = iwlagn_default_queue_to_tx_fifo; |
1673 | trans_cfg.n_queue_to_fifo = | 1647 | trans_cfg.n_queue_to_fifo = |
1674 | ARRAY_SIZE(iwlagn_default_queue_to_tx_fifo); | 1648 | ARRAY_SIZE(iwlagn_default_queue_to_tx_fifo); |
1675 | q_to_ac = iwlagn_bss_queue_to_ac; | ||
1676 | n_q_to_ac = ARRAY_SIZE(iwlagn_bss_queue_to_ac); | ||
1677 | 1649 | ||
1678 | /* Configure transport layer again*/ | 1650 | /* Configure transport layer again*/ |
1679 | iwl_trans_configure(trans(priv), &trans_cfg); | 1651 | iwl_trans_configure(priv->trans, &trans_cfg); |
1680 | } | 1652 | } |
1681 | 1653 | ||
1682 | /******************* | 1654 | /******************* |
1683 | * 5. Setup priv | 1655 | * 5. Setup priv |
1684 | *******************/ | 1656 | *******************/ |
1685 | for (i = 0; i < IEEE80211_NUM_ACS; i++) | ||
1686 | atomic_set(&priv->ac_stop_count[i], 0); | ||
1687 | |||
1688 | for (i = 0; i < IWL_MAX_HW_QUEUES; i++) { | 1657 | for (i = 0; i < IWL_MAX_HW_QUEUES; i++) { |
1689 | if (i < n_q_to_ac) | 1658 | priv->queue_to_mac80211[i] = IWL_INVALID_MAC80211_QUEUE; |
1690 | priv->queue_to_ac[i] = q_to_ac[i]; | 1659 | if (i < IWLAGN_FIRST_AMPDU_QUEUE && |
1691 | else | 1660 | i != IWL_DEFAULT_CMD_QUEUE_NUM && |
1692 | priv->queue_to_ac[i] = IWL_INVALID_AC; | 1661 | i != IWL_IPAN_CMD_QUEUE_NUM) |
1662 | priv->queue_to_mac80211[i] = i; | ||
1663 | atomic_set(&priv->queue_stop_count[i], 0); | ||
1693 | } | 1664 | } |
1694 | 1665 | ||
1695 | WARN_ON(trans_cfg.queue_to_fifo[trans_cfg.cmd_queue] != | 1666 | WARN_ON(trans_cfg.queue_to_fifo[trans_cfg.cmd_queue] != |
@@ -1745,8 +1716,7 @@ out_destroy_workqueue: | |||
1745 | iwl_uninit_drv(priv); | 1716 | iwl_uninit_drv(priv); |
1746 | out_free_eeprom: | 1717 | out_free_eeprom: |
1747 | iwl_eeprom_free(priv); | 1718 | iwl_eeprom_free(priv); |
1748 | out_free_traffic_mem: | 1719 | out_free_hw: |
1749 | iwl_free_traffic_mem(priv); | ||
1750 | ieee80211_free_hw(priv->hw); | 1720 | ieee80211_free_hw(priv->hw); |
1751 | out: | 1721 | out: |
1752 | op_mode = NULL; | 1722 | op_mode = NULL; |
@@ -1768,7 +1738,7 @@ void iwl_op_mode_dvm_stop(struct iwl_op_mode *op_mode) | |||
1768 | 1738 | ||
1769 | /*This will stop the queues, move the device to low power state */ | 1739 | /*This will stop the queues, move the device to low power state */ |
1770 | priv->ucode_loaded = false; | 1740 | priv->ucode_loaded = false; |
1771 | iwl_trans_stop_device(trans(priv)); | 1741 | iwl_trans_stop_device(priv->trans); |
1772 | 1742 | ||
1773 | iwl_eeprom_free(priv); | 1743 | iwl_eeprom_free(priv); |
1774 | 1744 | ||
@@ -1780,12 +1750,12 @@ void iwl_op_mode_dvm_stop(struct iwl_op_mode *op_mode) | |||
1780 | * until now... */ | 1750 | * until now... */ |
1781 | destroy_workqueue(priv->workqueue); | 1751 | destroy_workqueue(priv->workqueue); |
1782 | priv->workqueue = NULL; | 1752 | priv->workqueue = NULL; |
1783 | iwl_free_traffic_mem(priv); | ||
1784 | 1753 | ||
1785 | iwl_uninit_drv(priv); | 1754 | iwl_uninit_drv(priv); |
1786 | 1755 | ||
1787 | dev_kfree_skb(priv->beacon_skb); | 1756 | dev_kfree_skb(priv->beacon_skb); |
1788 | 1757 | ||
1758 | iwl_trans_stop_hw(priv->trans, true); | ||
1789 | ieee80211_free_hw(priv->hw); | 1759 | ieee80211_free_hw(priv->hw); |
1790 | } | 1760 | } |
1791 | 1761 | ||
@@ -1860,7 +1830,7 @@ static const char *desc_lookup(u32 num) | |||
1860 | 1830 | ||
1861 | static void iwl_dump_nic_error_log(struct iwl_priv *priv) | 1831 | static void iwl_dump_nic_error_log(struct iwl_priv *priv) |
1862 | { | 1832 | { |
1863 | struct iwl_trans *trans = trans(priv); | 1833 | struct iwl_trans *trans = priv->trans; |
1864 | u32 base; | 1834 | u32 base; |
1865 | struct iwl_error_event_table table; | 1835 | struct iwl_error_event_table table; |
1866 | 1836 | ||
@@ -1950,7 +1920,7 @@ static int iwl_print_event_log(struct iwl_priv *priv, u32 start_idx, | |||
1950 | u32 ev, time, data; /* event log data */ | 1920 | u32 ev, time, data; /* event log data */ |
1951 | unsigned long reg_flags; | 1921 | unsigned long reg_flags; |
1952 | 1922 | ||
1953 | struct iwl_trans *trans = trans(priv); | 1923 | struct iwl_trans *trans = priv->trans; |
1954 | 1924 | ||
1955 | if (num_events == 0) | 1925 | if (num_events == 0) |
1956 | return pos; | 1926 | return pos; |
@@ -2068,7 +2038,7 @@ int iwl_dump_nic_event_log(struct iwl_priv *priv, bool full_log, | |||
2068 | u32 logsize; | 2038 | u32 logsize; |
2069 | int pos = 0; | 2039 | int pos = 0; |
2070 | size_t bufsz = 0; | 2040 | size_t bufsz = 0; |
2071 | struct iwl_trans *trans = trans(priv); | 2041 | struct iwl_trans *trans = priv->trans; |
2072 | 2042 | ||
2073 | base = priv->device_pointers.log_event_table; | 2043 | base = priv->device_pointers.log_event_table; |
2074 | if (priv->cur_ucode == IWL_UCODE_INIT) { | 2044 | if (priv->cur_ucode == IWL_UCODE_INIT) { |
@@ -2184,7 +2154,7 @@ static void iwlagn_fw_error(struct iwl_priv *priv, bool ondemand) | |||
2184 | * commands by clearing the ready bit */ | 2154 | * commands by clearing the ready bit */ |
2185 | clear_bit(STATUS_READY, &priv->status); | 2155 | clear_bit(STATUS_READY, &priv->status); |
2186 | 2156 | ||
2187 | wake_up(&trans(priv)->wait_command_queue); | 2157 | wake_up(&priv->trans->wait_command_queue); |
2188 | 2158 | ||
2189 | if (!ondemand) { | 2159 | if (!ondemand) { |
2190 | /* | 2160 | /* |
@@ -2208,7 +2178,7 @@ static void iwlagn_fw_error(struct iwl_priv *priv, bool ondemand) | |||
2208 | } | 2178 | } |
2209 | 2179 | ||
2210 | if (!test_bit(STATUS_EXIT_PENDING, &priv->status)) { | 2180 | if (!test_bit(STATUS_EXIT_PENDING, &priv->status)) { |
2211 | if (iwlagn_mod_params.restart_fw) { | 2181 | if (iwlwifi_mod_params.restart_fw) { |
2212 | IWL_DEBUG_FW_ERRORS(priv, | 2182 | IWL_DEBUG_FW_ERRORS(priv, |
2213 | "Restarting adapter due to uCode error.\n"); | 2183 | "Restarting adapter due to uCode error.\n"); |
2214 | queue_work(priv->workqueue, &priv->restart); | 2184 | queue_work(priv->workqueue, &priv->restart); |
@@ -2259,56 +2229,56 @@ static void iwl_wimax_active(struct iwl_op_mode *op_mode) | |||
2259 | void iwl_stop_sw_queue(struct iwl_op_mode *op_mode, int queue) | 2229 | void iwl_stop_sw_queue(struct iwl_op_mode *op_mode, int queue) |
2260 | { | 2230 | { |
2261 | struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode); | 2231 | struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode); |
2262 | int ac = priv->queue_to_ac[queue]; | 2232 | int mq = priv->queue_to_mac80211[queue]; |
2263 | 2233 | ||
2264 | if (WARN_ON_ONCE(ac == IWL_INVALID_AC)) | 2234 | if (WARN_ON_ONCE(mq == IWL_INVALID_MAC80211_QUEUE)) |
2265 | return; | 2235 | return; |
2266 | 2236 | ||
2267 | if (atomic_inc_return(&priv->ac_stop_count[ac]) > 1) { | 2237 | if (atomic_inc_return(&priv->queue_stop_count[mq]) > 1) { |
2268 | IWL_DEBUG_TX_QUEUES(priv, | 2238 | IWL_DEBUG_TX_QUEUES(priv, |
2269 | "queue %d (AC %d) already stopped\n", | 2239 | "queue %d (mac80211 %d) already stopped\n", |
2270 | queue, ac); | 2240 | queue, mq); |
2271 | return; | 2241 | return; |
2272 | } | 2242 | } |
2273 | 2243 | ||
2274 | set_bit(ac, &priv->transport_queue_stop); | 2244 | set_bit(mq, &priv->transport_queue_stop); |
2275 | ieee80211_stop_queue(priv->hw, ac); | 2245 | ieee80211_stop_queue(priv->hw, mq); |
2276 | } | 2246 | } |
2277 | 2247 | ||
2278 | void iwl_wake_sw_queue(struct iwl_op_mode *op_mode, int queue) | 2248 | void iwl_wake_sw_queue(struct iwl_op_mode *op_mode, int queue) |
2279 | { | 2249 | { |
2280 | struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode); | 2250 | struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode); |
2281 | int ac = priv->queue_to_ac[queue]; | 2251 | int mq = priv->queue_to_mac80211[queue]; |
2282 | 2252 | ||
2283 | if (WARN_ON_ONCE(ac == IWL_INVALID_AC)) | 2253 | if (WARN_ON_ONCE(mq == IWL_INVALID_MAC80211_QUEUE)) |
2284 | return; | 2254 | return; |
2285 | 2255 | ||
2286 | if (atomic_dec_return(&priv->ac_stop_count[ac]) > 0) { | 2256 | if (atomic_dec_return(&priv->queue_stop_count[mq]) > 0) { |
2287 | IWL_DEBUG_TX_QUEUES(priv, | 2257 | IWL_DEBUG_TX_QUEUES(priv, |
2288 | "queue %d (AC %d) already awake\n", | 2258 | "queue %d (mac80211 %d) already awake\n", |
2289 | queue, ac); | 2259 | queue, mq); |
2290 | return; | 2260 | return; |
2291 | } | 2261 | } |
2292 | 2262 | ||
2293 | clear_bit(ac, &priv->transport_queue_stop); | 2263 | clear_bit(mq, &priv->transport_queue_stop); |
2294 | 2264 | ||
2295 | if (!priv->passive_no_rx) | 2265 | if (!priv->passive_no_rx) |
2296 | ieee80211_wake_queue(priv->hw, ac); | 2266 | ieee80211_wake_queue(priv->hw, mq); |
2297 | } | 2267 | } |
2298 | 2268 | ||
2299 | void iwlagn_lift_passive_no_rx(struct iwl_priv *priv) | 2269 | void iwlagn_lift_passive_no_rx(struct iwl_priv *priv) |
2300 | { | 2270 | { |
2301 | int ac; | 2271 | int mq; |
2302 | 2272 | ||
2303 | if (!priv->passive_no_rx) | 2273 | if (!priv->passive_no_rx) |
2304 | return; | 2274 | return; |
2305 | 2275 | ||
2306 | for (ac = IEEE80211_AC_VO; ac < IEEE80211_NUM_ACS; ac++) { | 2276 | for (mq = 0; mq < IWLAGN_FIRST_AMPDU_QUEUE; mq++) { |
2307 | if (!test_bit(ac, &priv->transport_queue_stop)) { | 2277 | if (!test_bit(mq, &priv->transport_queue_stop)) { |
2308 | IWL_DEBUG_TX_QUEUES(priv, "Wake queue %d"); | 2278 | IWL_DEBUG_TX_QUEUES(priv, "Wake queue %d", mq); |
2309 | ieee80211_wake_queue(priv->hw, ac); | 2279 | ieee80211_wake_queue(priv->hw, mq); |
2310 | } else { | 2280 | } else { |
2311 | IWL_DEBUG_TX_QUEUES(priv, "Don't wake queue %d"); | 2281 | IWL_DEBUG_TX_QUEUES(priv, "Don't wake queue %d", mq); |
2312 | } | 2282 | } |
2313 | } | 2283 | } |
2314 | 2284 | ||
@@ -2398,77 +2368,3 @@ static void __exit iwl_exit(void) | |||
2398 | 2368 | ||
2399 | module_exit(iwl_exit); | 2369 | module_exit(iwl_exit); |
2400 | module_init(iwl_init); | 2370 | module_init(iwl_init); |
2401 | |||
2402 | #ifdef CONFIG_IWLWIFI_DEBUG | ||
2403 | module_param_named(debug, iwlagn_mod_params.debug_level, uint, | ||
2404 | S_IRUGO | S_IWUSR); | ||
2405 | MODULE_PARM_DESC(debug, "debug output mask"); | ||
2406 | #endif | ||
2407 | |||
2408 | module_param_named(swcrypto, iwlagn_mod_params.sw_crypto, int, S_IRUGO); | ||
2409 | MODULE_PARM_DESC(swcrypto, "using crypto in software (default 0 [hardware])"); | ||
2410 | module_param_named(11n_disable, iwlagn_mod_params.disable_11n, uint, S_IRUGO); | ||
2411 | MODULE_PARM_DESC(11n_disable, | ||
2412 | "disable 11n functionality, bitmap: 1: full, 2: agg TX, 4: agg RX"); | ||
2413 | module_param_named(amsdu_size_8K, iwlagn_mod_params.amsdu_size_8K, | ||
2414 | int, S_IRUGO); | ||
2415 | MODULE_PARM_DESC(amsdu_size_8K, "enable 8K amsdu size"); | ||
2416 | module_param_named(fw_restart, iwlagn_mod_params.restart_fw, int, S_IRUGO); | ||
2417 | MODULE_PARM_DESC(fw_restart, "restart firmware in case of error"); | ||
2418 | |||
2419 | module_param_named(antenna_coupling, iwlagn_mod_params.ant_coupling, | ||
2420 | int, S_IRUGO); | ||
2421 | MODULE_PARM_DESC(antenna_coupling, | ||
2422 | "specify antenna coupling in dB (defualt: 0 dB)"); | ||
2423 | |||
2424 | module_param_named(bt_ch_inhibition, iwlagn_mod_params.bt_ch_announce, | ||
2425 | bool, S_IRUGO); | ||
2426 | MODULE_PARM_DESC(bt_ch_inhibition, | ||
2427 | "Enable BT channel inhibition (default: enable)"); | ||
2428 | |||
2429 | module_param_named(plcp_check, iwlagn_mod_params.plcp_check, bool, S_IRUGO); | ||
2430 | MODULE_PARM_DESC(plcp_check, "Check plcp health (default: 1 [enabled])"); | ||
2431 | |||
2432 | module_param_named(wd_disable, iwlagn_mod_params.wd_disable, int, S_IRUGO); | ||
2433 | MODULE_PARM_DESC(wd_disable, | ||
2434 | "Disable stuck queue watchdog timer 0=system default, " | ||
2435 | "1=disable, 2=enable (default: 0)"); | ||
2436 | |||
2437 | /* | ||
2438 | * set bt_coex_active to true, uCode will do kill/defer | ||
2439 | * every time the priority line is asserted (BT is sending signals on the | ||
2440 | * priority line in the PCIx). | ||
2441 | * set bt_coex_active to false, uCode will ignore the BT activity and | ||
2442 | * perform the normal operation | ||
2443 | * | ||
2444 | * User might experience transmit issue on some platform due to WiFi/BT | ||
2445 | * co-exist problem. The possible behaviors are: | ||
2446 | * Able to scan and finding all the available AP | ||
2447 | * Not able to associate with any AP | ||
2448 | * On those platforms, WiFi communication can be restored by set | ||
2449 | * "bt_coex_active" module parameter to "false" | ||
2450 | * | ||
2451 | * default: bt_coex_active = true (BT_COEX_ENABLE) | ||
2452 | */ | ||
2453 | module_param_named(bt_coex_active, iwlagn_mod_params.bt_coex_active, | ||
2454 | bool, S_IRUGO); | ||
2455 | MODULE_PARM_DESC(bt_coex_active, "enable wifi/bt co-exist (default: enable)"); | ||
2456 | |||
2457 | module_param_named(led_mode, iwlagn_mod_params.led_mode, int, S_IRUGO); | ||
2458 | MODULE_PARM_DESC(led_mode, "0=system default, " | ||
2459 | "1=On(RF On)/Off(RF Off), 2=blinking, 3=Off (default: 0)"); | ||
2460 | |||
2461 | module_param_named(power_save, iwlagn_mod_params.power_save, | ||
2462 | bool, S_IRUGO); | ||
2463 | MODULE_PARM_DESC(power_save, | ||
2464 | "enable WiFi power management (default: disable)"); | ||
2465 | |||
2466 | module_param_named(power_level, iwlagn_mod_params.power_level, | ||
2467 | int, S_IRUGO); | ||
2468 | MODULE_PARM_DESC(power_level, | ||
2469 | "default power save level (range from 1 - 5, default: 1)"); | ||
2470 | |||
2471 | module_param_named(auto_agg, iwlagn_mod_params.auto_agg, | ||
2472 | bool, S_IRUGO); | ||
2473 | MODULE_PARM_DESC(auto_agg, | ||
2474 | "enable agg w/o check traffic load (default: enable)"); | ||