mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 00:43:08 -04:00
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: Luca Coelho <luciano.coelho@intel.com> Link: https://lore.kernel.org/r/iwlwifi.20210805130823.01530088097f.I903c236a574c7e4c0fc4db101fc39c0f5415ca43@changeid Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
@@ -414,16 +414,25 @@ static int iwl_sar_set_profile(union acpi_object *table,
|
||||
struct iwl_sar_profile *profile,
|
||||
bool enabled)
|
||||
{
|
||||
int i;
|
||||
int i, j, idx = 0;
|
||||
|
||||
profile->enabled = enabled;
|
||||
|
||||
for (i = 0; i < ACPI_SAR_TABLE_SIZE; i++) {
|
||||
if (table[i].type != ACPI_TYPE_INTEGER ||
|
||||
table[i].integer.value > U8_MAX)
|
||||
return -EINVAL;
|
||||
/*
|
||||
* The table from ACPI is flat, but we store it in a
|
||||
* structured array.
|
||||
*/
|
||||
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->table[i] = table[i].integer.value;
|
||||
profile->chains[i].subbands[j] =
|
||||
table[idx].integer.value;
|
||||
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -434,7 +443,7 @@ static int iwl_sar_fill_table(struct iwl_fw_runtime *fwrt,
|
||||
int prof_a, int 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++) {
|
||||
struct iwl_sar_profile *prof;
|
||||
@@ -467,11 +476,10 @@ static int iwl_sar_fill_table(struct iwl_fw_runtime *fwrt,
|
||||
i, profs[i]);
|
||||
IWL_DEBUG_RADIO(fwrt, " Chain[%d]:\n", i);
|
||||
for (j = 0; j < n_subbands; j++) {
|
||||
idx = i * ACPI_SAR_NUM_SUB_BANDS + 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",
|
||||
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)
|
||||
break;
|
||||
|
||||
/* go to the next table */
|
||||
pos += ACPI_SAR_TABLE_SIZE;
|
||||
pos += ACPI_SAR_NUM_CHAINS * ACPI_SAR_NUM_SUB_BANDS;
|
||||
}
|
||||
|
||||
out_free:
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
|
||||
#define ACPI_WIFI_DOMAIN (0x07)
|
||||
|
||||
#define ACPI_SAR_TABLE_SIZE 10
|
||||
#define ACPI_SAR_PROFILE_NUM 4
|
||||
|
||||
#define ACPI_GEO_TABLE_SIZE 6
|
||||
@@ -37,9 +36,11 @@
|
||||
#define ACPI_SAR_NUM_SUB_BANDS 5
|
||||
#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) * \
|
||||
ACPI_SAR_TABLE_SIZE + 3)
|
||||
ACPI_SAR_NUM_CHAINS * \
|
||||
ACPI_SAR_NUM_SUB_BANDS + 3)
|
||||
#define ACPI_WGDS_WIFI_DATA_SIZE 19
|
||||
#define ACPI_WRDD_WIFI_DATA_SIZE 2
|
||||
#define ACPI_SPLC_WIFI_DATA_SIZE 2
|
||||
@@ -64,9 +65,13 @@
|
||||
#define ACPI_PPAG_MIN_HB -16
|
||||
#define ACPI_PPAG_MAX_HB 40
|
||||
|
||||
struct iwl_sar_profile_chain {
|
||||
u8 subbands[ACPI_SAR_NUM_SUB_BANDS];
|
||||
};
|
||||
|
||||
struct iwl_sar_profile {
|
||||
bool enabled;
|
||||
u8 table[ACPI_SAR_TABLE_SIZE];
|
||||
struct iwl_sar_profile_chain chains[ACPI_SAR_NUM_CHAINS];
|
||||
};
|
||||
|
||||
struct iwl_geo_profile {
|
||||
|
||||
Reference in New Issue
Block a user