Commit 81870d13 authored by Luca Coelho's avatar Luca Coelho

iwlwifi: convert flat SAR profile table to a struct version

The SAR profiles have been stored in single-dimension arrays and the
access has been done via a single index.  We will soon need to support
different revisions of this table, which will make the flat array even
harder to handle.  To prepare for that, convert the single-dimension
array to a struct with substructures.
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20210805130823.01530088097f.I903c236a574c7e4c0fc4db101fc39c0f5415ca43@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 248e7e2a
...@@ -414,16 +414,25 @@ static int iwl_sar_set_profile(union acpi_object *table, ...@@ -414,16 +414,25 @@ static int iwl_sar_set_profile(union acpi_object *table,
struct iwl_sar_profile *profile, struct iwl_sar_profile *profile,
bool enabled) bool enabled)
{ {
int i; int i, j, idx = 0;
profile->enabled = enabled; profile->enabled = enabled;
for (i = 0; i < ACPI_SAR_TABLE_SIZE; i++) { /*
if (table[i].type != ACPI_TYPE_INTEGER || * The table from ACPI is flat, but we store it in a
table[i].integer.value > U8_MAX) * structured array.
return -EINVAL; */
for (i = 0; i < ACPI_SAR_NUM_CHAINS; i++) {
for (j = 0; j < ACPI_SAR_NUM_SUB_BANDS; j++) {
if (table[idx].type != ACPI_TYPE_INTEGER ||
table[idx].integer.value > U8_MAX)
return -EINVAL;
profile->chains[i].subbands[j] =
table[idx].integer.value;
profile->table[i] = table[i].integer.value; idx++;
}
} }
return 0; return 0;
...@@ -434,7 +443,7 @@ static int iwl_sar_fill_table(struct iwl_fw_runtime *fwrt, ...@@ -434,7 +443,7 @@ static int iwl_sar_fill_table(struct iwl_fw_runtime *fwrt,
int prof_a, int prof_b) int prof_a, int prof_b)
{ {
int profs[ACPI_SAR_NUM_CHAINS] = { prof_a, prof_b }; int profs[ACPI_SAR_NUM_CHAINS] = { prof_a, prof_b };
int i, j, idx; int i, j;
for (i = 0; i < ACPI_SAR_NUM_CHAINS; i++) { for (i = 0; i < ACPI_SAR_NUM_CHAINS; i++) {
struct iwl_sar_profile *prof; struct iwl_sar_profile *prof;
...@@ -467,11 +476,10 @@ static int iwl_sar_fill_table(struct iwl_fw_runtime *fwrt, ...@@ -467,11 +476,10 @@ static int iwl_sar_fill_table(struct iwl_fw_runtime *fwrt,
i, profs[i]); i, profs[i]);
IWL_DEBUG_RADIO(fwrt, " Chain[%d]:\n", i); IWL_DEBUG_RADIO(fwrt, " Chain[%d]:\n", i);
for (j = 0; j < n_subbands; j++) { for (j = 0; j < n_subbands; j++) {
idx = i * ACPI_SAR_NUM_SUB_BANDS + j;
per_chain[i * n_subbands + j] = per_chain[i * n_subbands + j] =
cpu_to_le16(prof->table[idx]); cpu_to_le16(prof->chains[i].subbands[j]);
IWL_DEBUG_RADIO(fwrt, " Band[%d] = %d * .125dBm\n", IWL_DEBUG_RADIO(fwrt, " Band[%d] = %d * .125dBm\n",
j, prof->table[idx]); j, prof->chains[i].subbands[j]);
} }
} }
...@@ -595,7 +603,7 @@ int iwl_sar_get_ewrd_table(struct iwl_fw_runtime *fwrt) ...@@ -595,7 +603,7 @@ int iwl_sar_get_ewrd_table(struct iwl_fw_runtime *fwrt)
break; break;
/* go to the next table */ /* go to the next table */
pos += ACPI_SAR_TABLE_SIZE; pos += ACPI_SAR_NUM_CHAINS * ACPI_SAR_NUM_SUB_BANDS;
} }
out_free: out_free:
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#define ACPI_WIFI_DOMAIN (0x07) #define ACPI_WIFI_DOMAIN (0x07)
#define ACPI_SAR_TABLE_SIZE 10
#define ACPI_SAR_PROFILE_NUM 4 #define ACPI_SAR_PROFILE_NUM 4
#define ACPI_GEO_TABLE_SIZE 6 #define ACPI_GEO_TABLE_SIZE 6
...@@ -37,9 +36,11 @@ ...@@ -37,9 +36,11 @@
#define ACPI_SAR_NUM_SUB_BANDS 5 #define ACPI_SAR_NUM_SUB_BANDS 5
#define ACPI_SAR_NUM_TABLES 1 #define ACPI_SAR_NUM_TABLES 1
#define ACPI_WRDS_WIFI_DATA_SIZE (ACPI_SAR_TABLE_SIZE + 2) #define ACPI_WRDS_WIFI_DATA_SIZE (ACPI_SAR_NUM_CHAINS * \
ACPI_SAR_NUM_SUB_BANDS + 2)
#define ACPI_EWRD_WIFI_DATA_SIZE ((ACPI_SAR_PROFILE_NUM - 1) * \ #define ACPI_EWRD_WIFI_DATA_SIZE ((ACPI_SAR_PROFILE_NUM - 1) * \
ACPI_SAR_TABLE_SIZE + 3) ACPI_SAR_NUM_CHAINS * \
ACPI_SAR_NUM_SUB_BANDS + 3)
#define ACPI_WGDS_WIFI_DATA_SIZE 19 #define ACPI_WGDS_WIFI_DATA_SIZE 19
#define ACPI_WRDD_WIFI_DATA_SIZE 2 #define ACPI_WRDD_WIFI_DATA_SIZE 2
#define ACPI_SPLC_WIFI_DATA_SIZE 2 #define ACPI_SPLC_WIFI_DATA_SIZE 2
...@@ -64,9 +65,13 @@ ...@@ -64,9 +65,13 @@
#define ACPI_PPAG_MIN_HB -16 #define ACPI_PPAG_MIN_HB -16
#define ACPI_PPAG_MAX_HB 40 #define ACPI_PPAG_MAX_HB 40
struct iwl_sar_profile_chain {
u8 subbands[ACPI_SAR_NUM_SUB_BANDS];
};
struct iwl_sar_profile { struct iwl_sar_profile {
bool enabled; bool enabled;
u8 table[ACPI_SAR_TABLE_SIZE]; struct iwl_sar_profile_chain chains[ACPI_SAR_NUM_CHAINS];
}; };
struct iwl_geo_profile { struct iwl_geo_profile {
......
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