diff options
author | Roger Wang <wangroger@google.com> | 2021-01-27 16:55:47 +0800 |
---|---|---|
committer | Ahmed ElArabawy <arabawy@google.com> | 2021-01-28 00:47:17 +0000 |
commit | b7c5854e535f5b74eed0e9b27af4cd164b826448 (patch) | |
tree | c3ef1fb78b7574f39d0edab7686965cc72c05844 | |
parent | c0c1633870dd7fa70c66844696e2fb40c4bce194 (diff) | |
download | wlan-b7c5854e535f5b74eed0e9b27af4cd164b826448.tar.gz |
HAL: add SKU parameter on OTA NVRAM name
In this commit, we consider the NVRAM for different SKU.
NVRAM loading sequence will be changed as following.
1. File with the hardware revision and the hardware sku
2. File with the hardware sku.
3. File with the hardware revision.
4. Default file (bcmdhd.cal)
Bug: 177338748
Test: Put SKU related nvram into device OTA path and check it can
be loaded correctly.
Change-Id: Ie9479a070d16391303ea80ae916df8a0caa9a095
-rwxr-xr-x | bcmdhd/wifi_hal/wifi_logger.cpp | 63 |
1 files changed, 49 insertions, 14 deletions
diff --git a/bcmdhd/wifi_hal/wifi_logger.cpp b/bcmdhd/wifi_hal/wifi_logger.cpp index 68a797d..dcb82e6 100755 --- a/bcmdhd/wifi_hal/wifi_logger.cpp +++ b/bcmdhd/wifi_hal/wifi_logger.cpp @@ -73,10 +73,13 @@ typedef enum { LOGGER_SET_HAL_PID } DEBUG_SUB_COMMAND; +#define MAX_NV_FILE 4 +#define MAX_SKU_NAME_LEN 5 #define OTA_PATH "/data/vendor/firmware/wifi/" #define OTA_CLM_FILE "bcmdhd_clm.blob" #define OTA_NVRAM_FILE "bcmdhd.cal" #define HW_DEV_PROP "ro.revision" +#define HW_SKU_PROP "ro.boot.hardware.sku" char ota_nvram_ext[10]; typedef struct ota_info_buf { @@ -1810,10 +1813,13 @@ wifi_error wifi_hal_ota_update(wifi_interface_handle iface, uint32_t ota_version wifi_handle handle = getWifiHandle(iface); wifi_error result = WIFI_SUCCESS; ota_info_buf_t buf; - char file_name[FILE_NAME_LEN]; + char clm_file_name[FILE_NAME_LEN]; + char nv_file_name[MAX_NV_FILE][FILE_NAME_LEN]; char *buffer_nvram = NULL; char *buffer_clm = NULL; - char prop_buf[PROPERTY_VALUE_MAX] = {0,}; + char prop_revision_buf[PROPERTY_VALUE_MAX] = {0,}; + char prop_sku_buf[PROPERTY_VALUE_MAX] = {0,}; + char sku_name[MAX_SKU_NAME_LEN] = {0,}; OtaUpdateCommand *cmd = new OtaUpdateCommand(iface); NULL_CHECK_RETURN(cmd, "memory allocation failure", WIFI_ERROR_OUT_OF_MEMORY); @@ -1826,30 +1832,59 @@ wifi_error wifi_hal_ota_update(wifi_interface_handle iface, uint32_t ota_version return result; } - sprintf(file_name, "%s%s", OTA_PATH, OTA_CLM_FILE); - ALOGE("[OTA] PATH CLM %s", file_name); - read_ota_file(file_name, &buffer_clm, &buf.ota_clm_len); + memset(clm_file_name, 0, FILE_NAME_LEN); + sprintf(clm_file_name, "%s%s", OTA_PATH, OTA_CLM_FILE); + ALOGE("[OTA] PATH CLM %s", clm_file_name); + read_ota_file(clm_file_name, &buffer_clm, &buf.ota_clm_len); if (buffer_clm == NULL) { ALOGE("buffer_clm is null"); goto exit; } buf.ota_clm_buf[0] = buffer_clm; - memset(file_name, 0, FILE_NAME_LEN); - property_get(HW_DEV_PROP, prop_buf, NULL); - sprintf(file_name, "%s%s_%s", OTA_PATH, OTA_NVRAM_FILE, prop_buf); - result = read_ota_file(file_name, &buffer_nvram, &buf.ota_nvram_len); - if (result != WIFI_SUCCESS) { - memset(file_name, 0, FILE_NAME_LEN); - sprintf(file_name, "%s%s", OTA_PATH, OTA_NVRAM_FILE); - read_ota_file(file_name, &buffer_nvram, &buf.ota_nvram_len); + for (unsigned int i = 0; i < MAX_NV_FILE; i++) { + memset(nv_file_name[i], 0, FILE_NAME_LEN); + } + property_get(HW_DEV_PROP, prop_revision_buf, NULL); + property_get(HW_SKU_PROP, prop_sku_buf, NULL); + + if (strcmp(prop_sku_buf, "G9S9B") == 0 || + strcmp(prop_sku_buf, "G8V0U") == 0 || + strcmp(prop_sku_buf, "GFQM1") == 0) { + strncpy(sku_name, "MMW", MAX_SKU_NAME_LEN); + } else if (strcmp(prop_sku_buf, "GR1YH") == 0 || + strcmp(prop_sku_buf, "GF5KQ") == 0 || + strcmp(prop_sku_buf, "GPQ72") == 0) { + strncpy(sku_name, "JPN", MAX_SKU_NAME_LEN); + } else if (strcmp(prop_sku_buf, "GB7N6") == 0 || + strcmp(prop_sku_buf, "GLU0G") == 0 || + strcmp(prop_sku_buf, "GNA8F") == 0) { + strncpy(sku_name, "ROW", MAX_SKU_NAME_LEN); + } else { + strncpy(sku_name, "NA", MAX_SKU_NAME_LEN); + } + + sprintf(nv_file_name[0], "%s%s_%s_%s", OTA_PATH, OTA_NVRAM_FILE, + prop_revision_buf, sku_name); + sprintf(nv_file_name[1], "%s%s_%s", OTA_PATH, OTA_NVRAM_FILE, + sku_name); + sprintf(nv_file_name[2], "%s%s_%s", OTA_PATH, OTA_NVRAM_FILE, + prop_revision_buf); + sprintf(nv_file_name[3], "%s%s", OTA_PATH, OTA_NVRAM_FILE); + + for (unsigned int i = 0; i < MAX_NV_FILE; i++) { + result = read_ota_file(nv_file_name[i], &buffer_nvram, + &buf.ota_nvram_len); + if (result == WIFI_SUCCESS) { + ALOGE("[OTA] PATH NVRAM %s", nv_file_name[i]); + break; + } } if (buffer_nvram == NULL) { ALOGE("buffer_nvram is null"); goto exit; } - ALOGE("[OTA] PATH NVRAM %s", file_name); buf.ota_nvram_buf[0] = buffer_nvram; cmd->otaDownload(&buf, ota_version); |