diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-6000.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-6000.c | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c index 9fbf54cd3e1..73713f6a8df 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 | { |
@@ -335,6 +339,25 @@ static const struct iwl_ops iwl6000_ops = { | |||
335 | .led = &iwlagn_led_ops, | 339 | .led = &iwlagn_led_ops, |
336 | }; | 340 | }; |
337 | 341 | ||
342 | static void do_not_send_bt_config(struct iwl_priv *priv) | ||
343 | { | ||
344 | } | ||
345 | |||
346 | static struct iwl_hcmd_ops iwl6000g2b_hcmd = { | ||
347 | .rxon_assoc = iwlagn_send_rxon_assoc, | ||
348 | .commit_rxon = iwl_commit_rxon, | ||
349 | .set_rxon_chain = iwl_set_rxon_chain, | ||
350 | .set_tx_ant = iwlagn_send_tx_ant_config, | ||
351 | .send_bt_config = do_not_send_bt_config, | ||
352 | }; | ||
353 | |||
354 | static const struct iwl_ops iwl6000g2b_ops = { | ||
355 | .lib = &iwl6000_lib, | ||
356 | .hcmd = &iwl6000g2b_hcmd, | ||
357 | .utils = &iwlagn_hcmd_utils, | ||
358 | .led = &iwlagn_led_ops, | ||
359 | }; | ||
360 | |||
338 | static struct iwl_lib_ops iwl6050_lib = { | 361 | static struct iwl_lib_ops iwl6050_lib = { |
339 | .set_hw_params = iwl6050_hw_set_hw_params, | 362 | .set_hw_params = iwl6050_hw_set_hw_params, |
340 | .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, | 363 | .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, |
@@ -445,6 +468,268 @@ struct iwl_cfg iwl6000g2a_2agn_cfg = { | |||
445 | .chain_noise_calib_by_driver = true, | 468 | .chain_noise_calib_by_driver = true, |
446 | }; | 469 | }; |
447 | 470 | ||
471 | struct iwl_cfg iwl6000g2a_2abg_cfg = { | ||
472 | .name = "6000 Series 2x2 ABG Gen2a", | ||
473 | .fw_name_pre = IWL6000G2A_FW_PRE, | ||
474 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
475 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
476 | .sku = IWL_SKU_A|IWL_SKU_G, | ||
477 | .ops = &iwl6000_ops, | ||
478 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
479 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
480 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
481 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
482 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
483 | .mod_params = &iwlagn_mod_params, | ||
484 | .valid_tx_ant = ANT_AB, | ||
485 | .valid_rx_ant = ANT_AB, | ||
486 | .pll_cfg_val = 0, | ||
487 | .set_l0s = true, | ||
488 | .use_bsm = false, | ||
489 | .pa_type = IWL_PA_SYSTEM, | ||
490 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
491 | .shadow_ram_support = true, | ||
492 | .led_compensation = 51, | ||
493 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
494 | .supports_idle = true, | ||
495 | .adv_thermal_throttle = true, | ||
496 | .support_ct_kill_exit = true, | ||
497 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
498 | .chain_noise_scale = 1000, | ||
499 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
500 | .max_event_log_size = 512, | ||
501 | }; | ||
502 | |||
503 | struct iwl_cfg iwl6000g2a_2bg_cfg = { | ||
504 | .name = "6000 Series 2x2 BG Gen2a", | ||
505 | .fw_name_pre = IWL6000G2A_FW_PRE, | ||
506 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
507 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
508 | .sku = IWL_SKU_G, | ||
509 | .ops = &iwl6000_ops, | ||
510 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
511 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
512 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
513 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
514 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
515 | .mod_params = &iwlagn_mod_params, | ||
516 | .valid_tx_ant = ANT_AB, | ||
517 | .valid_rx_ant = ANT_AB, | ||
518 | .pll_cfg_val = 0, | ||
519 | .set_l0s = true, | ||
520 | .use_bsm = false, | ||
521 | .pa_type = IWL_PA_SYSTEM, | ||
522 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
523 | .shadow_ram_support = true, | ||
524 | .led_compensation = 51, | ||
525 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
526 | .supports_idle = true, | ||
527 | .adv_thermal_throttle = true, | ||
528 | .support_ct_kill_exit = true, | ||
529 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
530 | .chain_noise_scale = 1000, | ||
531 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
532 | .max_event_log_size = 512, | ||
533 | }; | ||
534 | |||
535 | struct iwl_cfg iwl6000g2b_2agn_cfg = { | ||
536 | .name = "6000 Series 2x2 AGN Gen2b", | ||
537 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
538 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
539 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
540 | .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N, | ||
541 | .ops = &iwl6000g2b_ops, | ||
542 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
543 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
544 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
545 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
546 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
547 | .mod_params = &iwlagn_mod_params, | ||
548 | .valid_tx_ant = ANT_AB, | ||
549 | .valid_rx_ant = ANT_AB, | ||
550 | .pll_cfg_val = 0, | ||
551 | .set_l0s = true, | ||
552 | .use_bsm = false, | ||
553 | .pa_type = IWL_PA_SYSTEM, | ||
554 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
555 | .shadow_ram_support = true, | ||
556 | .ht_greenfield_support = true, | ||
557 | .led_compensation = 51, | ||
558 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
559 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
560 | .supports_idle = true, | ||
561 | .adv_thermal_throttle = true, | ||
562 | .support_ct_kill_exit = true, | ||
563 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
564 | .chain_noise_scale = 1000, | ||
565 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
566 | .max_event_log_size = 512, | ||
567 | }; | ||
568 | |||
569 | struct iwl_cfg iwl6000g2b_2abg_cfg = { | ||
570 | .name = "6000 Series 2x2 ABG Gen2b", | ||
571 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
572 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
573 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
574 | .sku = IWL_SKU_A|IWL_SKU_G, | ||
575 | .ops = &iwl6000g2b_ops, | ||
576 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
577 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
578 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
579 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
580 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
581 | .mod_params = &iwlagn_mod_params, | ||
582 | .valid_tx_ant = ANT_AB, | ||
583 | .valid_rx_ant = ANT_AB, | ||
584 | .pll_cfg_val = 0, | ||
585 | .set_l0s = true, | ||
586 | .use_bsm = false, | ||
587 | .pa_type = IWL_PA_SYSTEM, | ||
588 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
589 | .shadow_ram_support = true, | ||
590 | .led_compensation = 51, | ||
591 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
592 | .supports_idle = true, | ||
593 | .adv_thermal_throttle = true, | ||
594 | .support_ct_kill_exit = true, | ||
595 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
596 | .chain_noise_scale = 1000, | ||
597 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
598 | .max_event_log_size = 512, | ||
599 | }; | ||
600 | |||
601 | struct iwl_cfg iwl6000g2b_2bgn_cfg = { | ||
602 | .name = "6000 Series 2x2 BGN Gen2b", | ||
603 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
604 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
605 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
606 | .sku = IWL_SKU_G|IWL_SKU_N, | ||
607 | .ops = &iwl6000g2b_ops, | ||
608 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
609 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
610 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
611 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
612 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
613 | .mod_params = &iwlagn_mod_params, | ||
614 | .valid_tx_ant = ANT_AB, | ||
615 | .valid_rx_ant = ANT_AB, | ||
616 | .pll_cfg_val = 0, | ||
617 | .set_l0s = true, | ||
618 | .use_bsm = false, | ||
619 | .pa_type = IWL_PA_SYSTEM, | ||
620 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
621 | .shadow_ram_support = true, | ||
622 | .ht_greenfield_support = true, | ||
623 | .led_compensation = 51, | ||
624 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
625 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
626 | .supports_idle = true, | ||
627 | .adv_thermal_throttle = true, | ||
628 | .support_ct_kill_exit = true, | ||
629 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
630 | .chain_noise_scale = 1000, | ||
631 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
632 | .max_event_log_size = 512, | ||
633 | }; | ||
634 | |||
635 | struct iwl_cfg iwl6000g2b_2bg_cfg = { | ||
636 | .name = "6000 Series 2x2 BG Gen2b", | ||
637 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
638 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
639 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
640 | .sku = IWL_SKU_G, | ||
641 | .ops = &iwl6000g2b_ops, | ||
642 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
643 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
644 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
645 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
646 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
647 | .mod_params = &iwlagn_mod_params, | ||
648 | .valid_tx_ant = ANT_AB, | ||
649 | .valid_rx_ant = ANT_AB, | ||
650 | .pll_cfg_val = 0, | ||
651 | .set_l0s = true, | ||
652 | .use_bsm = false, | ||
653 | .pa_type = IWL_PA_SYSTEM, | ||
654 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
655 | .shadow_ram_support = true, | ||
656 | .led_compensation = 51, | ||
657 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
658 | .supports_idle = true, | ||
659 | .adv_thermal_throttle = true, | ||
660 | .support_ct_kill_exit = true, | ||
661 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
662 | .chain_noise_scale = 1000, | ||
663 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
664 | .max_event_log_size = 512, | ||
665 | }; | ||
666 | |||
667 | struct iwl_cfg iwl6000g2b_bgn_cfg = { | ||
668 | .name = "6000 Series 1x2 BGN Gen2b", | ||
669 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
670 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
671 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
672 | .sku = IWL_SKU_G|IWL_SKU_N, | ||
673 | .ops = &iwl6000g2b_ops, | ||
674 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
675 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
676 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
677 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
678 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
679 | .mod_params = &iwlagn_mod_params, | ||
680 | .valid_tx_ant = ANT_A, | ||
681 | .valid_rx_ant = ANT_AB, | ||
682 | .pll_cfg_val = 0, | ||
683 | .set_l0s = true, | ||
684 | .use_bsm = false, | ||
685 | .pa_type = IWL_PA_SYSTEM, | ||
686 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
687 | .shadow_ram_support = true, | ||
688 | .ht_greenfield_support = true, | ||
689 | .led_compensation = 51, | ||
690 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
691 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
692 | .supports_idle = true, | ||
693 | .adv_thermal_throttle = true, | ||
694 | .support_ct_kill_exit = true, | ||
695 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
696 | .chain_noise_scale = 1000, | ||
697 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
698 | .max_event_log_size = 512, | ||
699 | }; | ||
700 | |||
701 | struct iwl_cfg iwl6000g2b_bg_cfg = { | ||
702 | .name = "6000 Series 1x2 BG Gen2b", | ||
703 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
704 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
705 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
706 | .sku = IWL_SKU_G, | ||
707 | .ops = &iwl6000g2b_ops, | ||
708 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
709 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
710 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
711 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
712 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
713 | .mod_params = &iwlagn_mod_params, | ||
714 | .valid_tx_ant = ANT_A, | ||
715 | .valid_rx_ant = ANT_AB, | ||
716 | .pll_cfg_val = 0, | ||
717 | .set_l0s = true, | ||
718 | .use_bsm = false, | ||
719 | .pa_type = IWL_PA_SYSTEM, | ||
720 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
721 | .shadow_ram_support = true, | ||
722 | .led_compensation = 51, | ||
723 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
724 | .supports_idle = true, | ||
725 | .adv_thermal_throttle = true, | ||
726 | .support_ct_kill_exit = true, | ||
727 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
728 | .chain_noise_scale = 1000, | ||
729 | .monitor_recover_period = IWL_MONITORING_PERIOD, | ||
730 | .max_event_log_size = 512, | ||
731 | }; | ||
732 | |||
448 | /* | 733 | /* |
449 | * "i": Internal configuration, use internal Power Amplifier | 734 | * "i": Internal configuration, use internal Power Amplifier |
450 | */ | 735 | */ |
@@ -667,3 +952,4 @@ struct iwl_cfg iwl6000_3agn_cfg = { | |||
667 | MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); | 952 | MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); |
668 | MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX)); | 953 | MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX)); |
669 | MODULE_FIRMWARE(IWL6000G2A_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); | 954 | MODULE_FIRMWARE(IWL6000G2A_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); |
955 | MODULE_FIRMWARE(IWL6000G2B_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); | ||