mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-20 16:46:23 +08:00
wl1271: Add support for NVS files with 5GHz band parameters
This patch adds support for NVS files with 5GHz band parameters. The change is done in a backward compatible manner - if 11a is not enabled in the driver, the driver will allow also old NVS files to be loaded. Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com> Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
eb70eb723b
commit
a7da74fc88
@ -238,13 +238,20 @@ int wl1271_cmd_radio_parms(struct wl1271 *wl)
|
||||
|
||||
radio_parms->test.id = TEST_CMD_INI_FILE_RADIO_PARAM;
|
||||
|
||||
/* 2.4GHz parameters */
|
||||
memcpy(&radio_parms->static_params_2, &wl->nvs->stat_radio_params_2,
|
||||
sizeof(struct wl1271_ini_band_params_2));
|
||||
memcpy(&radio_parms->dyn_params_2,
|
||||
&wl->nvs->dyn_radio_params_2[rparam->fem].params,
|
||||
sizeof(struct wl1271_ini_fem_params_2));
|
||||
|
||||
/* FIXME: current NVS is missing 5GHz parameters */
|
||||
/* 5GHz parameters */
|
||||
memcpy(&radio_parms->static_params_5,
|
||||
&wl->nvs->stat_radio_params_5,
|
||||
sizeof(struct wl1271_ini_band_params_5));
|
||||
memcpy(&radio_parms->dyn_params_5,
|
||||
&wl->nvs->dyn_radio_params_5[rparam->fem].params,
|
||||
sizeof(struct wl1271_ini_fem_params_5));
|
||||
|
||||
wl1271_dump(DEBUG_CMD, "TEST_CMD_INI_FILE_RADIO_PARAM: ",
|
||||
radio_parms, sizeof(*radio_parms));
|
||||
|
@ -95,9 +95,10 @@ struct wl1271_ini_fem_params_5 {
|
||||
|
||||
/* NVS data structure */
|
||||
#define WL1271_INI_NVS_SECTION_SIZE 468
|
||||
#define WL1271_INI_SPARE_SIZE 124
|
||||
#define WL1271_INI_FEM_MODULE_COUNT 2
|
||||
|
||||
#define WL1271_INI_LEGACY_NVS_FILE_SIZE 800
|
||||
|
||||
struct wl1271_nvs_file {
|
||||
/* NVS section */
|
||||
u8 nvs[WL1271_INI_NVS_SECTION_SIZE];
|
||||
@ -111,8 +112,12 @@ struct wl1271_nvs_file {
|
||||
struct wl1271_ini_fem_params_2 params;
|
||||
u8 padding;
|
||||
} dyn_radio_params_2[WL1271_INI_FEM_MODULE_COUNT];
|
||||
|
||||
u8 ini_spare[WL1271_INI_SPARE_SIZE];
|
||||
struct wl1271_ini_band_params_5 stat_radio_params_5;
|
||||
u8 padding3;
|
||||
struct {
|
||||
struct wl1271_ini_fem_params_5 params;
|
||||
u8 padding;
|
||||
} dyn_radio_params_5[WL1271_INI_FEM_MODULE_COUNT];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#endif
|
||||
|
@ -566,14 +566,21 @@ static int wl1271_fetch_nvs(struct wl1271 *wl)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (fw->size != sizeof(struct wl1271_nvs_file)) {
|
||||
/*
|
||||
* FIXME: the LEGACY NVS image support (NVS's missing the 5GHz band
|
||||
* configurations) can be removed when those NVS files stop floating
|
||||
* around.
|
||||
*/
|
||||
if (fw->size != sizeof(struct wl1271_nvs_file) &&
|
||||
(fw->size != WL1271_INI_LEGACY_NVS_FILE_SIZE ||
|
||||
wl1271_11a_enabled())) {
|
||||
wl1271_error("nvs size is not as expected: %zu != %zu",
|
||||
fw->size, sizeof(struct wl1271_nvs_file));
|
||||
ret = -EILSEQ;
|
||||
goto out;
|
||||
}
|
||||
|
||||
wl->nvs = kmalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
|
||||
wl->nvs = kzalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
|
||||
|
||||
if (!wl->nvs) {
|
||||
wl1271_error("could not allocate memory for the nvs file");
|
||||
@ -581,7 +588,7 @@ static int wl1271_fetch_nvs(struct wl1271 *wl)
|
||||
goto out;
|
||||
}
|
||||
|
||||
memcpy(wl->nvs, fw->data, sizeof(struct wl1271_nvs_file));
|
||||
memcpy(wl->nvs, fw->data, fw->size);
|
||||
|
||||
out:
|
||||
release_firmware(fw);
|
||||
|
@ -199,7 +199,14 @@ static int wl1271_tm_cmd_nvs_push(struct wl1271 *wl, struct nlattr *tb[])
|
||||
buf = nla_data(tb[WL1271_TM_ATTR_DATA]);
|
||||
len = nla_len(tb[WL1271_TM_ATTR_DATA]);
|
||||
|
||||
if (len != sizeof(struct wl1271_nvs_file)) {
|
||||
/*
|
||||
* FIXME: the LEGACY NVS image support (NVS's missing the 5GHz band
|
||||
* configurations) can be removed when those NVS files stop floating
|
||||
* around.
|
||||
*/
|
||||
if (len != sizeof(struct wl1271_nvs_file) &&
|
||||
(len != WL1271_INI_LEGACY_NVS_FILE_SIZE ||
|
||||
wl1271_11a_enabled())) {
|
||||
wl1271_error("nvs size is not as expected: %zu != %zu",
|
||||
len, sizeof(struct wl1271_nvs_file));
|
||||
return -EMSGSIZE;
|
||||
@ -209,7 +216,7 @@ static int wl1271_tm_cmd_nvs_push(struct wl1271 *wl, struct nlattr *tb[])
|
||||
|
||||
kfree(wl->nvs);
|
||||
|
||||
wl->nvs = kmalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
|
||||
wl->nvs = kzalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
|
||||
if (!wl->nvs) {
|
||||
wl1271_error("could not allocate memory for the nvs file");
|
||||
ret = -ENOMEM;
|
||||
|
Loading…
Reference in New Issue
Block a user