]> Git Repo - linux.git/blob - drivers/net/wireless/intel/iwlwifi/cfg/8000.c
Linux 6.14-rc3
[linux.git] / drivers / net / wireless / intel / iwlwifi / cfg / 8000.c
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /*
3  * Copyright (C) 2014, 2018-2020, 2023 Intel Corporation
4  * Copyright (C) 2014-2015 Intel Mobile Communications GmbH
5  * Copyright (C) 2016 Intel Deutschland GmbH
6  */
7 #include <linux/module.h>
8 #include <linux/stringify.h>
9 #include "iwl-config.h"
10
11 /* Highest firmware API version supported */
12 #define IWL8000_UCODE_API_MAX   36
13 #define IWL8265_UCODE_API_MAX   36
14
15 /* Lowest firmware API version supported */
16 #define IWL8000_UCODE_API_MIN   22
17 #define IWL8265_UCODE_API_MIN   22
18
19 /* NVM versions */
20 #define IWL8000_NVM_VERSION             0x0a1d
21
22 /* Memory offsets and lengths */
23 #define IWL8260_DCCM_OFFSET             0x800000
24 #define IWL8260_DCCM_LEN                0x18000
25 #define IWL8260_DCCM2_OFFSET            0x880000
26 #define IWL8260_DCCM2_LEN               0x8000
27 #define IWL8260_SMEM_OFFSET             0x400000
28 #define IWL8260_SMEM_LEN                0x68000
29
30 #define IWL8000_FW_PRE "iwlwifi-8000C"
31 #define IWL8000_MODULE_FIRMWARE(api) \
32         IWL8000_FW_PRE "-" __stringify(api) ".ucode"
33
34 #define IWL8265_FW_PRE "iwlwifi-8265"
35 #define IWL8265_MODULE_FIRMWARE(api) \
36         IWL8265_FW_PRE "-" __stringify(api) ".ucode"
37
38 #define DEFAULT_NVM_FILE_FAMILY_8000C           "nvmData-8000C"
39
40 static const struct iwl_base_params iwl8000_base_params = {
41         .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
42         .num_of_queues = 31,
43         .max_tfd_queue_size = 256,
44         .shadow_ram_support = true,
45         .led_compensation = 57,
46         .wd_timeout = IWL_LONG_WD_TIMEOUT,
47         .max_event_log_size = 512,
48         .shadow_reg_enable = true,
49         .pcie_l1_allowed = true,
50 };
51
52 static const struct iwl_ht_params iwl8000_ht_params = {
53         .stbc = true,
54         .ldpc = true,
55         .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
56 };
57
58 static const struct iwl_tt_params iwl8000_tt_params = {
59         .ct_kill_entry = 115,
60         .ct_kill_exit = 93,
61         .ct_kill_duration = 5,
62         .dynamic_smps_entry = 111,
63         .dynamic_smps_exit = 107,
64         .tx_protection_entry = 112,
65         .tx_protection_exit = 105,
66         .tx_backoff = {
67                 {.temperature = 110, .backoff = 200},
68                 {.temperature = 111, .backoff = 600},
69                 {.temperature = 112, .backoff = 1200},
70                 {.temperature = 113, .backoff = 2000},
71                 {.temperature = 114, .backoff = 4000},
72         },
73         .support_ct_kill = true,
74         .support_dynamic_smps = true,
75         .support_tx_protection = true,
76         .support_tx_backoff = true,
77 };
78
79 #define IWL_DEVICE_8000_COMMON                                          \
80         .trans.device_family = IWL_DEVICE_FAMILY_8000,                  \
81         .trans.base_params = &iwl8000_base_params,                      \
82         .led_mode = IWL_LED_RF_STATE,                                   \
83         .nvm_hw_section_num = 10,                                       \
84         .features = NETIF_F_RXCSUM,                                     \
85         .non_shared_ant = ANT_A,                                        \
86         .dccm_offset = IWL8260_DCCM_OFFSET,                             \
87         .dccm_len = IWL8260_DCCM_LEN,                                   \
88         .dccm2_offset = IWL8260_DCCM2_OFFSET,                           \
89         .dccm2_len = IWL8260_DCCM2_LEN,                                 \
90         .smem_offset = IWL8260_SMEM_OFFSET,                             \
91         .smem_len = IWL8260_SMEM_LEN,                                   \
92         .default_nvm_file_C_step = DEFAULT_NVM_FILE_FAMILY_8000C,       \
93         .thermal_params = &iwl8000_tt_params,                           \
94         .apmg_not_supported = true,                                     \
95         .nvm_type = IWL_NVM_EXT,                                        \
96         .dbgc_supported = true,                                         \
97         .min_umac_error_event_table = 0x800000
98
99 #define IWL_DEVICE_8000                                                 \
100         IWL_DEVICE_8000_COMMON,                                         \
101         .ucode_api_max = IWL8000_UCODE_API_MAX,                         \
102         .ucode_api_min = IWL8000_UCODE_API_MIN                          \
103
104 #define IWL_DEVICE_8260                                                 \
105         IWL_DEVICE_8000_COMMON,                                         \
106         .ucode_api_max = IWL8000_UCODE_API_MAX,                         \
107         .ucode_api_min = IWL8000_UCODE_API_MIN                          \
108
109 #define IWL_DEVICE_8265                                                 \
110         IWL_DEVICE_8000_COMMON,                                         \
111         .ucode_api_max = IWL8265_UCODE_API_MAX,                         \
112         .ucode_api_min = IWL8265_UCODE_API_MIN                          \
113
114 const struct iwl_cfg iwl8260_2n_cfg = {
115         .name = "Intel(R) Dual Band Wireless N 8260",
116         .fw_name_pre = IWL8000_FW_PRE,
117         IWL_DEVICE_8260,
118         .ht_params = &iwl8000_ht_params,
119         .nvm_ver = IWL8000_NVM_VERSION,
120 };
121
122 const struct iwl_cfg iwl8260_2ac_cfg = {
123         .name = "Intel(R) Dual Band Wireless AC 8260",
124         .fw_name_pre = IWL8000_FW_PRE,
125         IWL_DEVICE_8260,
126         .ht_params = &iwl8000_ht_params,
127         .nvm_ver = IWL8000_NVM_VERSION,
128 };
129
130 const struct iwl_cfg iwl8265_2ac_cfg = {
131         .name = "Intel(R) Dual Band Wireless AC 8265",
132         .fw_name_pre = IWL8265_FW_PRE,
133         IWL_DEVICE_8265,
134         .ht_params = &iwl8000_ht_params,
135         .nvm_ver = IWL8000_NVM_VERSION,
136         .vht_mu_mimo_supported = true,
137 };
138
139 const struct iwl_cfg iwl8275_2ac_cfg = {
140         .name = "Intel(R) Dual Band Wireless AC 8275",
141         .fw_name_pre = IWL8265_FW_PRE,
142         IWL_DEVICE_8265,
143         .ht_params = &iwl8000_ht_params,
144         .nvm_ver = IWL8000_NVM_VERSION,
145         .vht_mu_mimo_supported = true,
146 };
147
148 const struct iwl_cfg iwl4165_2ac_cfg = {
149         .name = "Intel(R) Dual Band Wireless AC 4165",
150         .fw_name_pre = IWL8000_FW_PRE,
151         IWL_DEVICE_8000,
152         .ht_params = &iwl8000_ht_params,
153         .nvm_ver = IWL8000_NVM_VERSION,
154 };
155
156 MODULE_FIRMWARE(IWL8000_MODULE_FIRMWARE(IWL8000_UCODE_API_MAX));
157 MODULE_FIRMWARE(IWL8265_MODULE_FIRMWARE(IWL8265_UCODE_API_MAX));
This page took 0.037611 seconds and 4 git commands to generate.