Commit dd2a1256 authored by Luca Coelho's avatar Luca Coelho

iwlwifi: acpi: rename geo structs to contain versioning

Add the version number to the iwl_geo_tx_power_profile_cmd structs and
move the union into a common place.  Additionally, reuse the code that
sets elements that are at the same place in the struct across
different versions.

While at it remove an unused variable, add a comment and move the v2
specific element setting to inside the if statement.  Additionally,
invert the if for slightly more readability.
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20200928121852.23ec241f16cd.I8cd21fc5a2498e820b50e1f49a4cbfe545afe30e@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent fbb7957d
...@@ -645,7 +645,7 @@ bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt) ...@@ -645,7 +645,7 @@ bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt)
IWL_EXPORT_SYMBOL(iwl_sar_geo_support); IWL_EXPORT_SYMBOL(iwl_sar_geo_support);
int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
struct iwl_per_chain_offset_group *table) struct iwl_per_chain_offset_group_v1 *table)
{ {
int ret, i, j; int ret, i, j;
......
...@@ -196,7 +196,7 @@ int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt); ...@@ -196,7 +196,7 @@ int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt);
bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt); bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt);
int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
struct iwl_per_chain_offset_group *table); struct iwl_per_chain_offset_group_v1 *table);
int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, __le32 *black_list_array, int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, __le32 *black_list_array,
int *black_list_size); int *black_list_size);
......
...@@ -460,7 +460,7 @@ struct iwl_per_chain_offset { ...@@ -460,7 +460,7 @@ struct iwl_per_chain_offset {
u8 chain_b; u8 chain_b;
} __packed; /* PER_CHAIN_LIMIT_OFFSET_PER_CHAIN_S_VER_1 */ } __packed; /* PER_CHAIN_LIMIT_OFFSET_PER_CHAIN_S_VER_1 */
struct iwl_per_chain_offset_group { struct iwl_per_chain_offset_group_v1 {
struct iwl_per_chain_offset lb; struct iwl_per_chain_offset lb;
struct iwl_per_chain_offset hb; struct iwl_per_chain_offset hb;
} __packed; /* PER_CHAIN_LIMIT_OFFSET_GROUP_S_VER_1 */ } __packed; /* PER_CHAIN_LIMIT_OFFSET_GROUP_S_VER_1 */
...@@ -472,7 +472,7 @@ struct iwl_per_chain_offset_group { ...@@ -472,7 +472,7 @@ struct iwl_per_chain_offset_group {
*/ */
struct iwl_geo_tx_power_profiles_cmd_v1 { struct iwl_geo_tx_power_profiles_cmd_v1 {
__le32 ops; __le32 ops;
struct iwl_per_chain_offset_group table[IWL_NUM_GEO_PROFILES]; struct iwl_per_chain_offset_group_v1 table[IWL_NUM_GEO_PROFILES];
} __packed; /* GEO_TX_POWER_LIMIT_VER_1 */ } __packed; /* GEO_TX_POWER_LIMIT_VER_1 */
/** /**
...@@ -481,11 +481,16 @@ struct iwl_geo_tx_power_profiles_cmd_v1 { ...@@ -481,11 +481,16 @@ struct iwl_geo_tx_power_profiles_cmd_v1 {
* @table: offset profile per band. * @table: offset profile per band.
* @table_revision: BIOS table revision. * @table_revision: BIOS table revision.
*/ */
struct iwl_geo_tx_power_profiles_cmd { struct iwl_geo_tx_power_profiles_cmd_v2 {
__le32 ops; __le32 ops;
struct iwl_per_chain_offset_group table[IWL_NUM_GEO_PROFILES]; struct iwl_per_chain_offset_group_v1 table[IWL_NUM_GEO_PROFILES];
__le32 table_revision; __le32 table_revision;
} __packed; /* GEO_TX_POWER_LIMIT */ } __packed; /* GEO_TX_POWER_LIMIT_VER_2 */
union iwl_geo_tx_power_profiles_cmd {
struct iwl_geo_tx_power_profiles_cmd_v1 v1;
struct iwl_geo_tx_power_profiles_cmd_v2 v2;
};
/** /**
* struct iwl_geo_tx_power_profiles_resp - response to GEO_TX_POWER_LIMIT cmd * struct iwl_geo_tx_power_profiles_resp - response to GEO_TX_POWER_LIMIT cmd
......
...@@ -782,22 +782,21 @@ int iwl_mvm_sar_select_profile(struct iwl_mvm *mvm, int prof_a, int prof_b) ...@@ -782,22 +782,21 @@ int iwl_mvm_sar_select_profile(struct iwl_mvm *mvm, int prof_a, int prof_b)
int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm) int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm)
{ {
union geo_tx_power_profiles_cmd geo_tx_cmd; union iwl_geo_tx_power_profiles_cmd geo_tx_cmd;
struct iwl_geo_tx_power_profiles_resp *resp; struct iwl_geo_tx_power_profiles_resp *resp;
u16 len; u16 len;
int ret; int ret;
struct iwl_host_cmd cmd; struct iwl_host_cmd cmd;
if (fw_has_api(&mvm->fwrt.fw->ucode_capa, /* the ops field is at the same spot for all versions, so set in v1 */
IWL_UCODE_TLV_API_SAR_TABLE_VER)) { geo_tx_cmd.v1.ops =
geo_tx_cmd.geo_cmd.ops =
cpu_to_le32(IWL_PER_CHAIN_OFFSET_GET_CURRENT_TABLE); cpu_to_le32(IWL_PER_CHAIN_OFFSET_GET_CURRENT_TABLE);
len = sizeof(geo_tx_cmd.geo_cmd);
} else { if (fw_has_api(&mvm->fwrt.fw->ucode_capa,
geo_tx_cmd.geo_cmd_v1.ops = IWL_UCODE_TLV_API_SAR_TABLE_VER))
cpu_to_le32(IWL_PER_CHAIN_OFFSET_GET_CURRENT_TABLE); len = sizeof(geo_tx_cmd.v2);
len = sizeof(geo_tx_cmd.geo_cmd_v1); else
} len = sizeof(geo_tx_cmd.v1);
if (!iwl_sar_geo_support(&mvm->fwrt)) if (!iwl_sar_geo_support(&mvm->fwrt))
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -827,14 +826,13 @@ int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm) ...@@ -827,14 +826,13 @@ int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm)
static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm) static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm)
{ {
u16 cmd_wide_id = WIDE_ID(PHY_OPS_GROUP, GEO_TX_POWER_LIMIT); union iwl_geo_tx_power_profiles_cmd cmd;
union geo_tx_power_profiles_cmd cmd;
u16 len; u16 len;
int ret; int ret;
cmd.geo_cmd.ops = cpu_to_le32(IWL_PER_CHAIN_OFFSET_SET_TABLES); /* the table is also at the same position both in v1 and v2 */
ret = iwl_sar_geo_init(&mvm->fwrt, cmd.v1.table);
ret = iwl_sar_geo_init(&mvm->fwrt, cmd.geo_cmd.table);
/* /*
* It is a valid scenario to not support SAR, or miss wgds table, * It is a valid scenario to not support SAR, or miss wgds table,
* but in that case there is no need to send the command. * but in that case there is no need to send the command.
...@@ -842,16 +840,20 @@ static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm) ...@@ -842,16 +840,20 @@ static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm)
if (ret) if (ret)
return 0; return 0;
cmd.geo_cmd.table_revision = cpu_to_le32(mvm->fwrt.geo_rev); /* the ops field is at the same spot for all versions, so set in v1 */
cmd.v1.ops = cpu_to_le32(IWL_PER_CHAIN_OFFSET_SET_TABLES);
if (!fw_has_api(&mvm->fwrt.fw->ucode_capa, if (fw_has_api(&mvm->fwrt.fw->ucode_capa,
IWL_UCODE_TLV_API_SAR_TABLE_VER)) { IWL_UCODE_TLV_API_SAR_TABLE_VER)) {
len = sizeof(struct iwl_geo_tx_power_profiles_cmd_v1); len = sizeof(cmd.v2);
cmd.v2.table_revision = cpu_to_le32(mvm->fwrt.geo_rev);
} else { } else {
len = sizeof(cmd.geo_cmd); len = sizeof(cmd.v1);
} }
return iwl_mvm_send_cmd_pdu(mvm, cmd_wide_id, 0, len, &cmd); return iwl_mvm_send_cmd_pdu(mvm,
WIDE_ID(PHY_OPS_GROUP, GEO_TX_POWER_LIMIT),
0, len, &cmd);
} }
static int iwl_mvm_get_ppag_table(struct iwl_mvm *mvm) static int iwl_mvm_get_ppag_table(struct iwl_mvm *mvm)
......
...@@ -184,11 +184,6 @@ enum iwl_power_scheme { ...@@ -184,11 +184,6 @@ enum iwl_power_scheme {
IWL_POWER_SCHEME_LP IWL_POWER_SCHEME_LP
}; };
union geo_tx_power_profiles_cmd {
struct iwl_geo_tx_power_profiles_cmd geo_cmd;
struct iwl_geo_tx_power_profiles_cmd_v1 geo_cmd_v1;
};
#define IWL_CONN_MAX_LISTEN_INTERVAL 10 #define IWL_CONN_MAX_LISTEN_INTERVAL 10
#define IWL_UAPSD_MAX_SP IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL #define IWL_UAPSD_MAX_SP IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment