diff options
Diffstat (limited to 'sys/contrib/dev/iwlwifi/fw/regulatory.h')
| -rw-r--r-- | sys/contrib/dev/iwlwifi/fw/regulatory.h | 90 | 
1 files changed, 69 insertions, 21 deletions
| diff --git a/sys/contrib/dev/iwlwifi/fw/regulatory.h b/sys/contrib/dev/iwlwifi/fw/regulatory.h index e2c056f483c1..a07c512b6ed4 100644 --- a/sys/contrib/dev/iwlwifi/fw/regulatory.h +++ b/sys/contrib/dev/iwlwifi/fw/regulatory.h @@ -1,6 +1,6 @@  /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */  /* - * Copyright (C) 2023-2024 Intel Corporation + * Copyright (C) 2023-2025 Intel Corporation   */  #ifndef __fw_regulatory_h__ @@ -40,11 +40,21 @@  #define IWL_PPAG_ETSI_CHINA_MASK	3  #define IWL_PPAG_REV3_MASK		0x7FF -#define IWL_WTAS_ENABLED_MSK		0x1 -#define IWL_WTAS_OVERRIDE_IEC_MSK	0x2 -#define IWL_WTAS_ENABLE_IEC_MSK	0x4 +#define IWL_WTAS_ENABLED_MSK		BIT(0) +#define IWL_WTAS_OVERRIDE_IEC_MSK	BIT(1) +#define IWL_WTAS_ENABLE_IEC_MSK		BIT(2) +#define IWL_WTAS_CANADA_UHB_MSK		BIT(15)  #define IWL_WTAS_USA_UHB_MSK		BIT(16) +struct iwl_tas_selection_data { +	u8 override_tas_iec:1, +	   enable_tas_iec:1, +	   usa_tas_uhb_allowed:1, +	   canada_tas_uhb_allowed:1; +}; + +#define BIOS_MCC_CHINA 0x434e +  /*   * The profile for revision 2 is a superset of revision 1, which is in   * turn a superset of revision 0.  So we can store all revisions @@ -95,11 +105,11 @@ struct iwl_ppag_chain {  };  struct iwl_tas_data { -	__le32 block_list_size; -	__le32 block_list_array[IWL_WTAS_BLACK_LIST_MAX]; -	u8 override_tas_iec; -	u8 enable_tas_iec; -	u8 usa_tas_uhb_allowed; +	u8 block_list_size; +	u16 block_list_array[IWL_WTAS_BLACK_LIST_MAX]; +	u8 table_source; +	u8 table_revision; +	u32 tas_selection;  };  /* For DSM revision 0 and 4 */ @@ -142,14 +152,17 @@ enum iwl_dsm_unii4_bitmap {  	DSM_VALUE_UNII4_CANADA_EN_MSK		= BIT(5),  }; -#define DSM_UNII4_ALLOW_BITMAP_CMD_V8 (DSM_VALUE_UNII4_US_OVERRIDE_MSK | \ -				       DSM_VALUE_UNII4_US_EN_MSK | \ -				       DSM_VALUE_UNII4_ETSI_OVERRIDE_MSK | \ -				       DSM_VALUE_UNII4_ETSI_EN_MSK) -#define DSM_UNII4_ALLOW_BITMAP (DSM_UNII4_ALLOW_BITMAP_CMD_V8 | \ -				DSM_VALUE_UNII4_CANADA_OVERRIDE_MSK | \ +#define DSM_UNII4_ALLOW_BITMAP (DSM_VALUE_UNII4_US_OVERRIDE_MSK		|\ +				DSM_VALUE_UNII4_US_EN_MSK		|\ +				DSM_VALUE_UNII4_ETSI_OVERRIDE_MSK	|\ +				DSM_VALUE_UNII4_ETSI_EN_MSK		|\ +				DSM_VALUE_UNII4_CANADA_OVERRIDE_MSK	|\  				DSM_VALUE_UNII4_CANADA_EN_MSK) +#define DSM_11AX_ALLOW_BITMAP				0xF +#define DSM_EDT_ALLOWED_BITMAP				0x7ffff0 +#define DSM_FORCE_DISABLE_CHANNELS_ALLOWED_BITMAP	0x7FF +  enum iwl_dsm_values_rfi {  	DSM_VALUE_RFI_DLVR_DISABLE	= BIT(0),  	DSM_VALUE_RFI_DDR_DISABLE	= BIT(1), @@ -158,6 +171,8 @@ enum iwl_dsm_values_rfi {  #define DSM_VALUE_RFI_DISABLE	(DSM_VALUE_RFI_DLVR_DISABLE |\  				 DSM_VALUE_RFI_DDR_DISABLE) +bool iwl_rfi_is_enabled_in_bios(struct iwl_fw_runtime *fwrt); +  enum iwl_dsm_masks_reg {  	DSM_MASK_CHINA_22_REG = BIT(2)  }; @@ -181,10 +196,10 @@ int iwl_fill_ppag_table(struct iwl_fw_runtime *fwrt,  bool iwl_is_ppag_approved(struct iwl_fw_runtime *fwrt);  bool iwl_is_tas_approved(void); +bool iwl_add_mcc_to_tas_block_list(u16 *list, u8 *size, u16 mcc); -int iwl_parse_tas_selection(struct iwl_fw_runtime *fwrt, -			    struct iwl_tas_data *tas_data, -			    const u32 tas_selection); +struct iwl_tas_selection_data +iwl_parse_tas_selection(const u32 tas_selection, const u8 tbl_rev);  int iwl_bios_get_wrds_table(struct iwl_fw_runtime *fwrt); @@ -204,6 +219,7 @@ int iwl_bios_get_mcc(struct iwl_fw_runtime *fwrt, char *mcc);  int iwl_bios_get_eckv(struct iwl_fw_runtime *fwrt, u32 *ext_clk);  int iwl_bios_get_wbem(struct iwl_fw_runtime *fwrt, u32 *value); +__le32 iwl_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt);  int iwl_fill_lari_config(struct iwl_fw_runtime *fwrt,  			 struct iwl_lari_config_change_cmd *cmd,  			 size_t *cmd_size); @@ -212,9 +228,41 @@ int iwl_bios_get_dsm(struct iwl_fw_runtime *fwrt, enum iwl_dsm_funcs func,  		     u32 *value);  static inline u32 iwl_bios_get_ppag_flags(const u32 ppag_modes, -					  const u8 ppag_ver) +					  const u8 ppag_bios_rev) +{ +	/* For revision 4 and above driver is pipe */ +	if (ppag_bios_rev >= 4) +		return ppag_modes; + +	return ppag_modes & (ppag_bios_rev < 3 ? IWL_PPAG_ETSI_CHINA_MASK : +						 IWL_PPAG_REV3_MASK); +} + +bool iwl_puncturing_is_allowed_in_bios(u32 puncturing, u16 mcc); + +#define IWL_DSBR_FW_MODIFIED_URM_MASK	BIT(8) +#define IWL_DSBR_PERMANENT_URM_MASK	BIT(9) + +int iwl_bios_get_dsbr(struct iwl_fw_runtime *fwrt, u32 *value); +int iwl_bios_get_phy_filters(struct iwl_fw_runtime *fwrt); + +static inline void iwl_bios_setup_step(struct iwl_trans *trans, +				       struct iwl_fw_runtime *fwrt)  { -	return ppag_modes & (ppag_ver < 3 ? IWL_PPAG_ETSI_CHINA_MASK : -					    IWL_PPAG_REV3_MASK); +	u32 dsbr; + +	if (!trans->mac_cfg->integrated) +		return; + +	if (trans->mac_cfg->device_family < IWL_DEVICE_FAMILY_BZ) +		return; + +	if (iwl_bios_get_dsbr(fwrt, &dsbr)) +		dsbr = 0; + +	trans->conf.dsbr_urm_fw_dependent = +		!!(dsbr & IWL_DSBR_FW_MODIFIED_URM_MASK); +	trans->conf.dsbr_urm_permanent = +		!!(dsbr & IWL_DSBR_PERMANENT_URM_MASK);  }  #endif /* __fw_regulatory_h__ */ | 
