brintos

brintos / linux-shallow public Read only

0
0
Text · 8.7 KiB · 4e2afde Raw
299 lines · c
1// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause2/*3 * Copyright (C) 2012-2014, 2018-2020, 2023 Intel Corporation4 * Copyright (C) 2013-2014 Intel Mobile Communications GmbH5 * Copyright (C) 2015 Intel Deutschland GmbH6 */7#include <linux/module.h>8#include <linux/stringify.h>9#include "iwl-config.h"10 11/* Highest firmware API version supported */12#define IWL7260_UCODE_API_MAX	1713#define IWL7265_UCODE_API_MAX	1714#define IWL7265D_UCODE_API_MAX	2915#define IWL3168_UCODE_API_MAX	2916 17/* Lowest firmware API version supported */18#define IWL7260_UCODE_API_MIN	1719#define IWL7265_UCODE_API_MIN	1720#define IWL7265D_UCODE_API_MIN	2221#define IWL3168_UCODE_API_MIN	2222 23/* NVM versions */24#define IWL7260_NVM_VERSION		0x0a1d25#define IWL3160_NVM_VERSION		0x70926#define IWL3165_NVM_VERSION		0x70927#define IWL3168_NVM_VERSION		0xd0128#define IWL7265_NVM_VERSION		0x0a1d29#define IWL7265D_NVM_VERSION		0x0c1130 31/* DCCM offsets and lengths */32#define IWL7000_DCCM_OFFSET		0x80000033#define IWL7260_DCCM_LEN		0x1400034#define IWL3160_DCCM_LEN		0x1000035#define IWL7265_DCCM_LEN		0x17A0036 37#define IWL7260_FW_PRE "iwlwifi-7260"38#define IWL7260_MODULE_FIRMWARE(api) IWL7260_FW_PRE "-" __stringify(api) ".ucode"39 40#define IWL3160_FW_PRE "iwlwifi-3160"41#define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE "-" __stringify(api) ".ucode"42 43#define IWL3168_FW_PRE "iwlwifi-3168"44#define IWL3168_MODULE_FIRMWARE(api) IWL3168_FW_PRE "-" __stringify(api) ".ucode"45 46#define IWL7265_FW_PRE "iwlwifi-7265"47#define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE "-" __stringify(api) ".ucode"48 49#define IWL7265D_FW_PRE "iwlwifi-7265D"50#define IWL7265D_MODULE_FIRMWARE(api) IWL7265D_FW_PRE "-" __stringify(api) ".ucode"51 52static const struct iwl_base_params iwl7000_base_params = {53	.eeprom_size = OTP_LOW_IMAGE_SIZE_16K,54	.num_of_queues = 31,55	.max_tfd_queue_size = 256,56	.shadow_ram_support = true,57	.led_compensation = 57,58	.wd_timeout = IWL_LONG_WD_TIMEOUT,59	.max_event_log_size = 512,60	.shadow_reg_enable = true,61	.pcie_l1_allowed = true,62	.apmg_wake_up_wa = true,63};64 65static const struct iwl_tt_params iwl7000_high_temp_tt_params = {66	.ct_kill_entry = 118,67	.ct_kill_exit = 96,68	.ct_kill_duration = 5,69	.dynamic_smps_entry = 114,70	.dynamic_smps_exit = 110,71	.tx_protection_entry = 114,72	.tx_protection_exit = 108,73	.tx_backoff = {74		{.temperature = 112, .backoff = 300},75		{.temperature = 113, .backoff = 800},76		{.temperature = 114, .backoff = 1500},77		{.temperature = 115, .backoff = 3000},78		{.temperature = 116, .backoff = 5000},79		{.temperature = 117, .backoff = 10000},80	},81	.support_ct_kill = true,82	.support_dynamic_smps = true,83	.support_tx_protection = true,84	.support_tx_backoff = true,85};86 87static const struct iwl_ht_params iwl7000_ht_params = {88	.stbc = true,89	.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),90};91 92#define IWL_DEVICE_7000_COMMON					\93	.trans.device_family = IWL_DEVICE_FAMILY_7000,		\94	.trans.base_params = &iwl7000_base_params,		\95	.led_mode = IWL_LED_RF_STATE,				\96	.nvm_hw_section_num = 0,				\97	.non_shared_ant = ANT_A,				\98	.dccm_offset = IWL7000_DCCM_OFFSET99 100#define IWL_DEVICE_7000						\101	IWL_DEVICE_7000_COMMON,					\102	.ucode_api_max = IWL7260_UCODE_API_MAX,			\103	.ucode_api_min = IWL7260_UCODE_API_MIN104 105#define IWL_DEVICE_7005						\106	IWL_DEVICE_7000_COMMON,					\107	.ucode_api_max = IWL7265_UCODE_API_MAX,			\108	.ucode_api_min = IWL7265_UCODE_API_MIN109 110#define IWL_DEVICE_3008						\111	IWL_DEVICE_7000_COMMON,					\112	.ucode_api_max = IWL3168_UCODE_API_MAX,			\113	.ucode_api_min = IWL3168_UCODE_API_MIN114 115#define IWL_DEVICE_7005D					\116	IWL_DEVICE_7000_COMMON,					\117	.ucode_api_max = IWL7265D_UCODE_API_MAX,		\118	.ucode_api_min = IWL7265D_UCODE_API_MIN119 120const struct iwl_cfg iwl7260_2ac_cfg = {121	.name = "Intel(R) Dual Band Wireless AC 7260",122	.fw_name_pre = IWL7260_FW_PRE,123	IWL_DEVICE_7000,124	.ht_params = &iwl7000_ht_params,125	.nvm_ver = IWL7260_NVM_VERSION,126	.host_interrupt_operation_mode = true,127	.lp_xtal_workaround = true,128	.dccm_len = IWL7260_DCCM_LEN,129};130 131const struct iwl_cfg iwl7260_2ac_cfg_high_temp = {132	.name = "Intel(R) Dual Band Wireless AC 7260",133	.fw_name_pre = IWL7260_FW_PRE,134	IWL_DEVICE_7000,135	.ht_params = &iwl7000_ht_params,136	.nvm_ver = IWL7260_NVM_VERSION,137	.high_temp = true,138	.host_interrupt_operation_mode = true,139	.lp_xtal_workaround = true,140	.dccm_len = IWL7260_DCCM_LEN,141	.thermal_params = &iwl7000_high_temp_tt_params,142};143 144const struct iwl_cfg iwl7260_2n_cfg = {145	.name = "Intel(R) Dual Band Wireless N 7260",146	.fw_name_pre = IWL7260_FW_PRE,147	IWL_DEVICE_7000,148	.ht_params = &iwl7000_ht_params,149	.nvm_ver = IWL7260_NVM_VERSION,150	.host_interrupt_operation_mode = true,151	.lp_xtal_workaround = true,152	.dccm_len = IWL7260_DCCM_LEN,153};154 155const struct iwl_cfg iwl7260_n_cfg = {156	.name = "Intel(R) Wireless N 7260",157	.fw_name_pre = IWL7260_FW_PRE,158	IWL_DEVICE_7000,159	.ht_params = &iwl7000_ht_params,160	.nvm_ver = IWL7260_NVM_VERSION,161	.host_interrupt_operation_mode = true,162	.lp_xtal_workaround = true,163	.dccm_len = IWL7260_DCCM_LEN,164};165 166const struct iwl_cfg iwl3160_2ac_cfg = {167	.name = "Intel(R) Dual Band Wireless AC 3160",168	.fw_name_pre = IWL3160_FW_PRE,169	IWL_DEVICE_7000,170	.ht_params = &iwl7000_ht_params,171	.nvm_ver = IWL3160_NVM_VERSION,172	.host_interrupt_operation_mode = true,173	.dccm_len = IWL3160_DCCM_LEN,174};175 176const struct iwl_cfg iwl3160_2n_cfg = {177	.name = "Intel(R) Dual Band Wireless N 3160",178	.fw_name_pre = IWL3160_FW_PRE,179	IWL_DEVICE_7000,180	.ht_params = &iwl7000_ht_params,181	.nvm_ver = IWL3160_NVM_VERSION,182	.host_interrupt_operation_mode = true,183	.dccm_len = IWL3160_DCCM_LEN,184};185 186const struct iwl_cfg iwl3160_n_cfg = {187	.name = "Intel(R) Wireless N 3160",188	.fw_name_pre = IWL3160_FW_PRE,189	IWL_DEVICE_7000,190	.ht_params = &iwl7000_ht_params,191	.nvm_ver = IWL3160_NVM_VERSION,192	.host_interrupt_operation_mode = true,193	.dccm_len = IWL3160_DCCM_LEN,194};195 196static const struct iwl_pwr_tx_backoff iwl7265_pwr_tx_backoffs[] = {197	{.pwr = 1600, .backoff = 0},198	{.pwr = 1300, .backoff = 467},199	{.pwr = 900,  .backoff = 1900},200	{.pwr = 800, .backoff = 2630},201	{.pwr = 700, .backoff = 3720},202	{.pwr = 600, .backoff = 5550},203	{.pwr = 500, .backoff = 9350},204	{0},205};206 207static const struct iwl_ht_params iwl7265_ht_params = {208	.stbc = true,209	.ldpc = true,210	.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),211};212 213const struct iwl_cfg iwl3165_2ac_cfg = {214	.name = "Intel(R) Dual Band Wireless AC 3165",215	.fw_name_pre = IWL7265D_FW_PRE,216	IWL_DEVICE_7005D,217	.ht_params = &iwl7000_ht_params,218	.nvm_ver = IWL3165_NVM_VERSION,219	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,220	.dccm_len = IWL7265_DCCM_LEN,221};222 223const struct iwl_cfg iwl3168_2ac_cfg = {224	.name = "Intel(R) Dual Band Wireless AC 3168",225	.fw_name_pre = IWL3168_FW_PRE,226	IWL_DEVICE_3008,227	.ht_params = &iwl7000_ht_params,228	.nvm_ver = IWL3168_NVM_VERSION,229	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,230	.dccm_len = IWL7265_DCCM_LEN,231	.nvm_type = IWL_NVM_SDP,232};233 234const struct iwl_cfg iwl7265_2ac_cfg = {235	.name = "Intel(R) Dual Band Wireless AC 7265",236	.fw_name_pre = IWL7265_FW_PRE,237	IWL_DEVICE_7005,238	.ht_params = &iwl7265_ht_params,239	.nvm_ver = IWL7265_NVM_VERSION,240	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,241	.dccm_len = IWL7265_DCCM_LEN,242};243 244const struct iwl_cfg iwl7265_2n_cfg = {245	.name = "Intel(R) Dual Band Wireless N 7265",246	.fw_name_pre = IWL7265_FW_PRE,247	IWL_DEVICE_7005,248	.ht_params = &iwl7265_ht_params,249	.nvm_ver = IWL7265_NVM_VERSION,250	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,251	.dccm_len = IWL7265_DCCM_LEN,252};253 254const struct iwl_cfg iwl7265_n_cfg = {255	.name = "Intel(R) Wireless N 7265",256	.fw_name_pre = IWL7265_FW_PRE,257	IWL_DEVICE_7005,258	.ht_params = &iwl7265_ht_params,259	.nvm_ver = IWL7265_NVM_VERSION,260	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,261	.dccm_len = IWL7265_DCCM_LEN,262};263 264const struct iwl_cfg iwl7265d_2ac_cfg = {265	.name = "Intel(R) Dual Band Wireless AC 7265",266	.fw_name_pre = IWL7265D_FW_PRE,267	IWL_DEVICE_7005D,268	.ht_params = &iwl7265_ht_params,269	.nvm_ver = IWL7265D_NVM_VERSION,270	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,271	.dccm_len = IWL7265_DCCM_LEN,272};273 274const struct iwl_cfg iwl7265d_2n_cfg = {275	.name = "Intel(R) Dual Band Wireless N 7265",276	.fw_name_pre = IWL7265D_FW_PRE,277	IWL_DEVICE_7005D,278	.ht_params = &iwl7265_ht_params,279	.nvm_ver = IWL7265D_NVM_VERSION,280	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,281	.dccm_len = IWL7265_DCCM_LEN,282};283 284const struct iwl_cfg iwl7265d_n_cfg = {285	.name = "Intel(R) Wireless N 7265",286	.fw_name_pre = IWL7265D_FW_PRE,287	IWL_DEVICE_7005D,288	.ht_params = &iwl7265_ht_params,289	.nvm_ver = IWL7265D_NVM_VERSION,290	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,291	.dccm_len = IWL7265_DCCM_LEN,292};293 294MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_MAX));295MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL7260_UCODE_API_MAX));296MODULE_FIRMWARE(IWL3168_MODULE_FIRMWARE(IWL3168_UCODE_API_MAX));297MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7265_UCODE_API_MAX));298MODULE_FIRMWARE(IWL7265D_MODULE_FIRMWARE(IWL7265D_UCODE_API_MAX));299