diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-6000.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-6000.c | 345 |
1 files changed, 335 insertions, 10 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c index 9fbf54cd3e1a..afdeec56b13f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c | |||
@@ -71,6 +71,10 @@ | |||
71 | #define _IWL6000G2A_MODULE_FIRMWARE(api) IWL6000G2A_FW_PRE #api ".ucode" | 71 | #define _IWL6000G2A_MODULE_FIRMWARE(api) IWL6000G2A_FW_PRE #api ".ucode" |
72 | #define IWL6000G2A_MODULE_FIRMWARE(api) _IWL6000G2A_MODULE_FIRMWARE(api) | 72 | #define IWL6000G2A_MODULE_FIRMWARE(api) _IWL6000G2A_MODULE_FIRMWARE(api) |
73 | 73 | ||
74 | #define IWL6000G2B_FW_PRE "iwlwifi-6000g2b-" | ||
75 | #define _IWL6000G2B_MODULE_FIRMWARE(api) IWL6000G2B_FW_PRE #api ".ucode" | ||
76 | #define IWL6000G2B_MODULE_FIRMWARE(api) _IWL6000G2B_MODULE_FIRMWARE(api) | ||
77 | |||
74 | 78 | ||
75 | static void iwl6000_set_ct_threshold(struct iwl_priv *priv) | 79 | static void iwl6000_set_ct_threshold(struct iwl_priv *priv) |
76 | { | 80 | { |
@@ -183,6 +187,8 @@ static int iwl6000_hw_set_hw_params(struct iwl_priv *priv) | |||
183 | BIT(IWL_CALIB_TX_IQ) | | 187 | BIT(IWL_CALIB_TX_IQ) | |
184 | BIT(IWL_CALIB_BASE_BAND); | 188 | BIT(IWL_CALIB_BASE_BAND); |
185 | 189 | ||
190 | priv->hw_params.beacon_time_tsf_bits = IWLAGN_EXT_BEACON_TIME_POS; | ||
191 | |||
186 | return 0; | 192 | return 0; |
187 | } | 193 | } |
188 | 194 | ||
@@ -228,37 +234,74 @@ static int iwl6050_hw_set_hw_params(struct iwl_priv *priv) | |||
228 | BIT(IWL_CALIB_TX_IQ) | | 234 | BIT(IWL_CALIB_TX_IQ) | |
229 | BIT(IWL_CALIB_BASE_BAND); | 235 | BIT(IWL_CALIB_BASE_BAND); |
230 | 236 | ||
237 | priv->hw_params.beacon_time_tsf_bits = IWLAGN_EXT_BEACON_TIME_POS; | ||
238 | |||
231 | return 0; | 239 | return 0; |
232 | } | 240 | } |
233 | 241 | ||
234 | static int iwl6000_hw_channel_switch(struct iwl_priv *priv, u16 channel) | 242 | static int iwl6000_hw_channel_switch(struct iwl_priv *priv, |
243 | struct ieee80211_channel_switch *ch_switch) | ||
235 | { | 244 | { |
236 | struct iwl6000_channel_switch_cmd cmd; | 245 | struct iwl6000_channel_switch_cmd cmd; |
237 | const struct iwl_channel_info *ch_info; | 246 | const struct iwl_channel_info *ch_info; |
247 | u32 switch_time_in_usec, ucode_switch_time; | ||
248 | u16 ch; | ||
249 | u32 tsf_low; | ||
250 | u8 switch_count; | ||
251 | u16 beacon_interval = le16_to_cpu(priv->rxon_timing.beacon_interval); | ||
252 | struct ieee80211_vif *vif = priv->vif; | ||
238 | struct iwl_host_cmd hcmd = { | 253 | struct iwl_host_cmd hcmd = { |
239 | .id = REPLY_CHANNEL_SWITCH, | 254 | .id = REPLY_CHANNEL_SWITCH, |
240 | .len = sizeof(cmd), | 255 | .len = sizeof(cmd), |
241 | .flags = CMD_SIZE_HUGE, | 256 | .flags = CMD_SYNC, |
242 | .data = &cmd, | 257 | .data = &cmd, |
243 | }; | 258 | }; |
244 | 259 | ||
245 | IWL_DEBUG_11H(priv, "channel switch from %d to %d\n", | ||
246 | priv->active_rxon.channel, channel); | ||
247 | |||
248 | cmd.band = priv->band == IEEE80211_BAND_2GHZ; | 260 | cmd.band = priv->band == IEEE80211_BAND_2GHZ; |
249 | cmd.channel = cpu_to_le16(channel); | 261 | ch = ieee80211_frequency_to_channel(ch_switch->channel->center_freq); |
262 | IWL_DEBUG_11H(priv, "channel switch from %u to %u\n", | ||
263 | priv->active_rxon.channel, ch); | ||
264 | cmd.channel = cpu_to_le16(ch); | ||
250 | cmd.rxon_flags = priv->staging_rxon.flags; | 265 | cmd.rxon_flags = priv->staging_rxon.flags; |
251 | cmd.rxon_filter_flags = priv->staging_rxon.filter_flags; | 266 | cmd.rxon_filter_flags = priv->staging_rxon.filter_flags; |
252 | cmd.switch_time = cpu_to_le32(priv->ucode_beacon_time); | 267 | switch_count = ch_switch->count; |
253 | ch_info = iwl_get_channel_info(priv, priv->band, channel); | 268 | tsf_low = ch_switch->timestamp & 0x0ffffffff; |
269 | /* | ||
270 | * calculate the ucode channel switch time | ||
271 | * adding TSF as one of the factor for when to switch | ||
272 | */ | ||
273 | if ((priv->ucode_beacon_time > tsf_low) && beacon_interval) { | ||
274 | if (switch_count > ((priv->ucode_beacon_time - tsf_low) / | ||
275 | beacon_interval)) { | ||
276 | switch_count -= (priv->ucode_beacon_time - | ||
277 | tsf_low) / beacon_interval; | ||
278 | } else | ||
279 | switch_count = 0; | ||
280 | } | ||
281 | if (switch_count <= 1) | ||
282 | cmd.switch_time = cpu_to_le32(priv->ucode_beacon_time); | ||
283 | else { | ||
284 | switch_time_in_usec = | ||
285 | vif->bss_conf.beacon_int * switch_count * TIME_UNIT; | ||
286 | ucode_switch_time = iwl_usecs_to_beacons(priv, | ||
287 | switch_time_in_usec, | ||
288 | beacon_interval); | ||
289 | cmd.switch_time = iwl_add_beacon_time(priv, | ||
290 | priv->ucode_beacon_time, | ||
291 | ucode_switch_time, | ||
292 | beacon_interval); | ||
293 | } | ||
294 | IWL_DEBUG_11H(priv, "uCode time for the switch is 0x%x\n", | ||
295 | cmd.switch_time); | ||
296 | ch_info = iwl_get_channel_info(priv, priv->band, ch); | ||
254 | if (ch_info) | 297 | if (ch_info) |
255 | cmd.expect_beacon = is_channel_radar(ch_info); | 298 | cmd.expect_beacon = is_channel_radar(ch_info); |
256 | else { | 299 | else { |
257 | IWL_ERR(priv, "invalid channel switch from %u to %u\n", | 300 | IWL_ERR(priv, "invalid channel switch from %u to %u\n", |
258 | priv->active_rxon.channel, channel); | 301 | priv->active_rxon.channel, ch); |
259 | return -EFAULT; | 302 | return -EFAULT; |
260 | } | 303 | } |
261 | priv->switch_rxon.channel = cpu_to_le16(channel); | 304 | priv->switch_rxon.channel = cmd.channel; |
262 | priv->switch_rxon.switch_in_progress = true; | 305 | priv->switch_rxon.switch_in_progress = true; |
263 | 306 | ||
264 | return iwl_send_cmd_sync(priv, &hcmd); | 307 | return iwl_send_cmd_sync(priv, &hcmd); |
@@ -335,6 +378,25 @@ static const struct iwl_ops iwl6000_ops = { | |||
335 | .led = &iwlagn_led_ops, | 378 | .led = &iwlagn_led_ops, |
336 | }; | 379 | }; |
337 | 380 | ||
381 | static void do_not_send_bt_config(struct iwl_priv *priv) | ||
382 | { | ||
383 | } | ||
384 | |||
385 | static struct iwl_hcmd_ops iwl6000g2b_hcmd = { | ||
386 | .rxon_assoc = iwlagn_send_rxon_assoc, | ||
387 | .commit_rxon = iwl_commit_rxon, | ||
388 | .set_rxon_chain = iwl_set_rxon_chain, | ||
389 | .set_tx_ant = iwlagn_send_tx_ant_config, | ||
390 | .send_bt_config = do_not_send_bt_config, | ||
391 | }; | ||
392 | |||
393 | static const struct iwl_ops iwl6000g2b_ops = { | ||
394 | .lib = &iwl6000_lib, | ||
395 | .hcmd = &iwl6000g2b_hcmd, | ||
396 | .utils = &iwlagn_hcmd_utils, | ||
397 | .led = &iwlagn_led_ops, | ||
398 | }; | ||
399 | |||
338 | static struct iwl_lib_ops iwl6050_lib = { | 400 | static struct iwl_lib_ops iwl6050_lib = { |
339 | .set_hw_params = iwl6050_hw_set_hw_params, | 401 | .set_hw_params = iwl6050_hw_set_hw_params, |
340 | .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, | 402 | .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, |
@@ -445,6 +507,268 @@ struct iwl_cfg iwl6000g2a_2agn_cfg = { | |||
445 | .chain_noise_calib_by_driver = true, | 507 | .chain_noise_calib_by_driver = true, |
446 | }; | 508 | }; |
447 | 509 | ||
510 | struct iwl_cfg iwl6000g2a_2abg_cfg = { | ||
511 | .name = "6000 Series 2x2 ABG Gen2a", | ||
512 | .fw_name_pre = IWL6000G2A_FW_PRE, | ||
513 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
514 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
515 | .sku = IWL_SKU_A|IWL_SKU_G, | ||
516 | .ops = &iwl6000_ops, | ||
517 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
518 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
519 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
520 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
521 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
522 | .mod_params = &iwlagn_mod_params, | ||
523 | .valid_tx_ant = ANT_AB, | ||
524 | .valid_rx_ant = ANT_AB, | ||
525 | .pll_cfg_val = 0, | ||
526 | .set_l0s = true, | ||
527 | .use_bsm = false, | ||
528 | .pa_type = IWL_PA_SYSTEM, | ||
529 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
530 | .shadow_ram_support = true, | ||
531 | .led_compensation = 51, | ||
532 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
533 | .supports_idle = true, | ||
534 | .adv_thermal_throttle = true, | ||
535 | .support_ct_kill_exit = true, | ||
536 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
537 | .chain_noise_scale = 1000, | ||
538 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
539 | .max_event_log_size = 512, | ||
540 | }; | ||
541 | |||
542 | struct iwl_cfg iwl6000g2a_2bg_cfg = { | ||
543 | .name = "6000 Series 2x2 BG Gen2a", | ||
544 | .fw_name_pre = IWL6000G2A_FW_PRE, | ||
545 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
546 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
547 | .sku = IWL_SKU_G, | ||
548 | .ops = &iwl6000_ops, | ||
549 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
550 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
551 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
552 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
553 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
554 | .mod_params = &iwlagn_mod_params, | ||
555 | .valid_tx_ant = ANT_AB, | ||
556 | .valid_rx_ant = ANT_AB, | ||
557 | .pll_cfg_val = 0, | ||
558 | .set_l0s = true, | ||
559 | .use_bsm = false, | ||
560 | .pa_type = IWL_PA_SYSTEM, | ||
561 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
562 | .shadow_ram_support = true, | ||
563 | .led_compensation = 51, | ||
564 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
565 | .supports_idle = true, | ||
566 | .adv_thermal_throttle = true, | ||
567 | .support_ct_kill_exit = true, | ||
568 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
569 | .chain_noise_scale = 1000, | ||
570 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
571 | .max_event_log_size = 512, | ||
572 | }; | ||
573 | |||
574 | struct iwl_cfg iwl6000g2b_2agn_cfg = { | ||
575 | .name = "6000 Series 2x2 AGN Gen2b", | ||
576 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
577 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
578 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
579 | .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N, | ||
580 | .ops = &iwl6000g2b_ops, | ||
581 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
582 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
583 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
584 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
585 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
586 | .mod_params = &iwlagn_mod_params, | ||
587 | .valid_tx_ant = ANT_AB, | ||
588 | .valid_rx_ant = ANT_AB, | ||
589 | .pll_cfg_val = 0, | ||
590 | .set_l0s = true, | ||
591 | .use_bsm = false, | ||
592 | .pa_type = IWL_PA_SYSTEM, | ||
593 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
594 | .shadow_ram_support = true, | ||
595 | .ht_greenfield_support = true, | ||
596 | .led_compensation = 51, | ||
597 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
598 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
599 | .supports_idle = true, | ||
600 | .adv_thermal_throttle = true, | ||
601 | .support_ct_kill_exit = true, | ||
602 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
603 | .chain_noise_scale = 1000, | ||
604 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
605 | .max_event_log_size = 512, | ||
606 | }; | ||
607 | |||
608 | struct iwl_cfg iwl6000g2b_2abg_cfg = { | ||
609 | .name = "6000 Series 2x2 ABG Gen2b", | ||
610 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
611 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
612 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
613 | .sku = IWL_SKU_A|IWL_SKU_G, | ||
614 | .ops = &iwl6000g2b_ops, | ||
615 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
616 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
617 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
618 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
619 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
620 | .mod_params = &iwlagn_mod_params, | ||
621 | .valid_tx_ant = ANT_AB, | ||
622 | .valid_rx_ant = ANT_AB, | ||
623 | .pll_cfg_val = 0, | ||
624 | .set_l0s = true, | ||
625 | .use_bsm = false, | ||
626 | .pa_type = IWL_PA_SYSTEM, | ||
627 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
628 | .shadow_ram_support = true, | ||
629 | .led_compensation = 51, | ||
630 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
631 | .supports_idle = true, | ||
632 | .adv_thermal_throttle = true, | ||
633 | .support_ct_kill_exit = true, | ||
634 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
635 | .chain_noise_scale = 1000, | ||
636 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
637 | .max_event_log_size = 512, | ||
638 | }; | ||
639 | |||
640 | struct iwl_cfg iwl6000g2b_2bgn_cfg = { | ||
641 | .name = "6000 Series 2x2 BGN Gen2b", | ||
642 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
643 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
644 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
645 | .sku = IWL_SKU_G|IWL_SKU_N, | ||
646 | .ops = &iwl6000g2b_ops, | ||
647 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
648 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
649 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
650 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
651 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
652 | .mod_params = &iwlagn_mod_params, | ||
653 | .valid_tx_ant = ANT_AB, | ||
654 | .valid_rx_ant = ANT_AB, | ||
655 | .pll_cfg_val = 0, | ||
656 | .set_l0s = true, | ||
657 | .use_bsm = false, | ||
658 | .pa_type = IWL_PA_SYSTEM, | ||
659 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
660 | .shadow_ram_support = true, | ||
661 | .ht_greenfield_support = true, | ||
662 | .led_compensation = 51, | ||
663 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
664 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
665 | .supports_idle = true, | ||
666 | .adv_thermal_throttle = true, | ||
667 | .support_ct_kill_exit = true, | ||
668 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
669 | .chain_noise_scale = 1000, | ||
670 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
671 | .max_event_log_size = 512, | ||
672 | }; | ||
673 | |||
674 | struct iwl_cfg iwl6000g2b_2bg_cfg = { | ||
675 | .name = "6000 Series 2x2 BG Gen2b", | ||
676 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
677 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
678 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
679 | .sku = IWL_SKU_G, | ||
680 | .ops = &iwl6000g2b_ops, | ||
681 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
682 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
683 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
684 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
685 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
686 | .mod_params = &iwlagn_mod_params, | ||
687 | .valid_tx_ant = ANT_AB, | ||
688 | .valid_rx_ant = ANT_AB, | ||
689 | .pll_cfg_val = 0, | ||
690 | .set_l0s = true, | ||
691 | .use_bsm = false, | ||
692 | .pa_type = IWL_PA_SYSTEM, | ||
693 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
694 | .shadow_ram_support = true, | ||
695 | .led_compensation = 51, | ||
696 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
697 | .supports_idle = true, | ||
698 | .adv_thermal_throttle = true, | ||
699 | .support_ct_kill_exit = true, | ||
700 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
701 | .chain_noise_scale = 1000, | ||
702 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
703 | .max_event_log_size = 512, | ||
704 | }; | ||
705 | |||
706 | struct iwl_cfg iwl6000g2b_bgn_cfg = { | ||
707 | .name = "6000 Series 1x2 BGN Gen2b", | ||
708 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
709 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
710 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
711 | .sku = IWL_SKU_G|IWL_SKU_N, | ||
712 | .ops = &iwl6000g2b_ops, | ||
713 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
714 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
715 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
716 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
717 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
718 | .mod_params = &iwlagn_mod_params, | ||
719 | .valid_tx_ant = ANT_A, | ||
720 | .valid_rx_ant = ANT_AB, | ||
721 | .pll_cfg_val = 0, | ||
722 | .set_l0s = true, | ||
723 | .use_bsm = false, | ||
724 | .pa_type = IWL_PA_SYSTEM, | ||
725 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
726 | .shadow_ram_support = true, | ||
727 | .ht_greenfield_support = true, | ||
728 | .led_compensation = 51, | ||
729 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
730 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
731 | .supports_idle = true, | ||
732 | .adv_thermal_throttle = true, | ||
733 | .support_ct_kill_exit = true, | ||
734 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
735 | .chain_noise_scale = 1000, | ||
736 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
737 | .max_event_log_size = 512, | ||
738 | }; | ||
739 | |||
740 | struct iwl_cfg iwl6000g2b_bg_cfg = { | ||
741 | .name = "6000 Series 1x2 BG Gen2b", | ||
742 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
743 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
744 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
745 | .sku = IWL_SKU_G, | ||
746 | .ops = &iwl6000g2b_ops, | ||
747 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
748 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
749 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
750 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
751 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
752 | .mod_params = &iwlagn_mod_params, | ||
753 | .valid_tx_ant = ANT_A, | ||
754 | .valid_rx_ant = ANT_AB, | ||
755 | .pll_cfg_val = 0, | ||
756 | .set_l0s = true, | ||
757 | .use_bsm = false, | ||
758 | .pa_type = IWL_PA_SYSTEM, | ||
759 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
760 | .shadow_ram_support = true, | ||
761 | .led_compensation = 51, | ||
762 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
763 | .supports_idle = true, | ||
764 | .adv_thermal_throttle = true, | ||
765 | .support_ct_kill_exit = true, | ||
766 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
767 | .chain_noise_scale = 1000, | ||
768 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
769 | .max_event_log_size = 512, | ||
770 | }; | ||
771 | |||
448 | /* | 772 | /* |
449 | * "i": Internal configuration, use internal Power Amplifier | 773 | * "i": Internal configuration, use internal Power Amplifier |
450 | */ | 774 | */ |
@@ -667,3 +991,4 @@ struct iwl_cfg iwl6000_3agn_cfg = { | |||
667 | MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); | 991 | MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); |
668 | MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX)); | 992 | MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX)); |
669 | MODULE_FIRMWARE(IWL6000G2A_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); | 993 | MODULE_FIRMWARE(IWL6000G2A_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); |
994 | MODULE_FIRMWARE(IWL6000G2B_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); | ||