qcacld-3.0: Refactor BMI members from ol_softc

Group BMI members and access bmi info from hif instead of
dereferencing hif context.

Change-Id: I9108ec1b719ec3e62dd19cc3341cbc1c868bf5de
CRs-Fixed: 967765
This commit is contained in:
Komal Seelam 2016-02-01 19:22:17 +05:30 • committed by Prakash Dhavali
commit 588ad2bc46
4 changed files with 117 additions and 91 deletions

View file

@ -57,26 +57,30 @@ bmi_command_test(uint32_t command, uint32_t address, uint8_t *data,
CDF_STATUS bmi_init(struct ol_softc *scn)
{
struct bmi_info *info;
if (!scn) {
BMI_ERR("Invalid scn Context");
bmi_assert(0);
return CDF_STATUS_NOT_INITIALIZED;
}
scn->bmi_done = false;
if (!scn->bmi_cmd_buff) {
scn->bmi_cmd_buff = cdf_os_mem_alloc_consistent(scn->cdf_dev,
MAX_BMI_CMDBUF_SZ, &scn->bmi_cmd_da, 0);
if (!scn->bmi_cmd_buff) {
info = hif_get_bmi_ctx(scn);
info->bmi_done = false;
if (!info->bmi_cmd_buff) {
info->bmi_cmd_buff = cdf_os_mem_alloc_consistent(scn->cdf_dev,
MAX_BMI_CMDBUF_SZ, &info->bmi_cmd_da, 0);
if (!info->bmi_cmd_buff) {
BMI_ERR("No Memory for BMI Command");
return CDF_STATUS_E_NOMEM;
}
}
if (!scn->bmi_rsp_buff) {
scn->bmi_rsp_buff = cdf_os_mem_alloc_consistent(scn->cdf_dev,
MAX_BMI_CMDBUF_SZ, &scn->bmi_rsp_da, 0);
if (!scn->bmi_rsp_buff) {
if (!info->bmi_rsp_buff) {
info->bmi_rsp_buff = cdf_os_mem_alloc_consistent(scn->cdf_dev,
MAX_BMI_CMDBUF_SZ, &info->bmi_rsp_da, 0);
if (!info->bmi_rsp_buff) {
BMI_ERR("No Memory for BMI Response");
goto end;
}
@ -84,25 +88,27 @@ CDF_STATUS bmi_init(struct ol_softc *scn)
return CDF_STATUS_SUCCESS;
end:
cdf_os_mem_free_consistent(scn->cdf_dev, MAX_BMI_CMDBUF_SZ,
scn->bmi_cmd_buff, scn->bmi_cmd_da, 0);
scn->bmi_cmd_buff = NULL;
info->bmi_cmd_buff, info->bmi_cmd_da, 0);
info->bmi_cmd_buff = NULL;
return CDF_STATUS_E_NOMEM;
}
void bmi_cleanup(struct ol_softc *scn)
{
if (scn->bmi_cmd_buff) {
struct bmi_info *info = hif_get_bmi_ctx(scn);
if (info->bmi_cmd_buff) {
cdf_os_mem_free_consistent(scn->cdf_dev, MAX_BMI_CMDBUF_SZ,
scn->bmi_cmd_buff, scn->bmi_cmd_da, 0);
scn->bmi_cmd_buff = NULL;
scn->bmi_cmd_da = 0;
info->bmi_cmd_buff, info->bmi_cmd_da, 0);
info->bmi_cmd_buff = NULL;
info->bmi_cmd_da = 0;
}
if (scn->bmi_rsp_buff) {
if (info->bmi_rsp_buff) {
cdf_os_mem_free_consistent(scn->cdf_dev, MAX_BMI_CMDBUF_SZ,
scn->bmi_rsp_buff, scn->bmi_rsp_da, 0);
scn->bmi_rsp_buff = NULL;
scn->bmi_rsp_da = 0;
info->bmi_rsp_buff, info->bmi_rsp_da, 0);
info->bmi_rsp_buff = NULL;
info->bmi_rsp_da = 0;
}
}
@ -126,11 +132,12 @@ bmi_get_target_info(struct bmi_target_info *targ_info,
struct ol_softc *scn)
{
int status = 0;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
uint32_t cid, length;
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("BMI Phase is Already Done");
return CDF_STATUS_E_PERM;
}
@ -208,14 +215,15 @@ bmi_read_soc_register(uint32_t address, uint32_t *param, struct ol_softc *scn)
uint32_t cid;
int status;
uint32_t offset, param_len;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
bmi_assert(BMI_COMMAND_FITS(sizeof(cid) + sizeof(address)));
cdf_mem_set(bmi_cmd_buff, 0, sizeof(cid) + sizeof(address));
cdf_mem_set(bmi_rsp_buff, 0, sizeof(cid) + sizeof(address));
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_DBG("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -249,12 +257,13 @@ bmi_write_soc_register(uint32_t address, uint32_t param, struct ol_softc *scn)
uint32_t cid;
int status;
uint32_t offset;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint32_t size = sizeof(cid) + sizeof(address) + sizeof(param);
bmi_assert(BMI_COMMAND_FITS(size));
cdf_mem_set(bmi_cmd_buff, 0, size);
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_DBG("Command disallowed");
return CDF_STATUS_E_FAILURE;
}
@ -290,12 +299,13 @@ bmilz_data(uint8_t *buffer, uint32_t length, struct ol_softc *scn)
uint32_t offset;
uint32_t remaining, txlen;
const uint32_t header = sizeof(cid) + sizeof(length);
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
bmi_assert(BMI_COMMAND_FITS(BMI_DATASZ_MAX + header));
cdf_mem_set(bmi_cmd_buff, 0, BMI_DATASZ_MAX + header);
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -342,13 +352,14 @@ bmi_sign_stream_start(uint32_t address,
const uint32_t header = sizeof(cid) + sizeof(address) + sizeof(length);
uint8_t aligned_buf[BMI_DATASZ_MAX + 4];
uint8_t *src;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint32_t remaining, txlen;
bmi_assert(BMI_COMMAND_FITS(BMI_DATASZ_MAX + header));
cdf_mem_set(bmi_cmd_buff, 0, BMI_DATASZ_MAX + header);
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -402,12 +413,13 @@ bmilz_stream_start(uint32_t address, struct ol_softc *scn)
uint32_t cid;
int status;
uint32_t offset;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
bmi_assert(BMI_COMMAND_FITS(sizeof(cid) + sizeof(address)));
cdf_mem_set(bmi_cmd_buff, 0, sizeof(cid) + sizeof(address));
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_DBG("Command disallowed");
return CDF_STATUS_E_PERM;
}

View file

@ -37,16 +37,17 @@ bmi_read_memory(uint32_t address,
int status;
uint32_t offset;
uint32_t remaining, rxlen;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
uint32_t align;
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_DBG("command disallowed");
return CDF_STATUS_E_PERM;
}
if (!scn->bmi_cmd_buff || !scn->bmi_rsp_buff) {
if (!info->bmi_cmd_buff || !info->bmi_rsp_buff) {
BMI_ERR("BMI Initialization hasn't done");
return CDF_STATUS_NOT_INITIALIZED;
}
@ -111,9 +112,10 @@ bmi_write_memory(uint32_t address,
const uint32_t header = sizeof(cid) + sizeof(address) + sizeof(length);
uint8_t aligned_buffer[BMI_DATASZ_MAX];
uint8_t *src;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -178,11 +180,12 @@ bmi_execute(uint32_t address, A_UINT32 *param, struct ol_softc *scn)
int status;
uint32_t offset;
uint32_t param_len;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
uint32_t size = sizeof(cid) + sizeof(address) + sizeof(param);
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -272,6 +275,7 @@ CDF_STATUS bmi_done_local(struct ol_softc *scn)
{
int status;
uint32_t cid;
struct bmi_info *info;
if (!scn) {
BMI_ERR("Invalid scn context");
@ -279,43 +283,44 @@ CDF_STATUS bmi_done_local(struct ol_softc *scn)
return CDF_STATUS_NOT_INITIALIZED;
}
if (scn->bmi_done) {
info = hif_get_bmi_ctx(scn);
if (info->bmi_done) {
BMI_DBG("bmi_done_local skipped");
return CDF_STATUS_E_PERM;
}
BMI_DBG("BMI Done: Enter (device: 0x%p)", scn);
scn->bmi_done = true;
info->bmi_done = true;
cid = BMI_DONE;
if (!scn->bmi_cmd_buff) {
if (!info->bmi_cmd_buff) {
BMI_ERR("Invalid scn BMICmdBuff");
bmi_assert(0);
return CDF_STATUS_NOT_INITIALIZED;
}
cdf_mem_copy(scn->bmi_cmd_buff, &cid, sizeof(cid));
cdf_mem_copy(info->bmi_cmd_buff, &cid, sizeof(cid));
status = hif_exchange_bmi_msg(scn, scn->bmi_cmd_buff,
status = hif_exchange_bmi_msg(scn, info->bmi_cmd_buff,
sizeof(cid), NULL, NULL, 0);
if (status) {
BMI_ERR("Failed to write to the device; status:%d", status);
return CDF_STATUS_E_FAILURE;
}
if (scn->bmi_cmd_buff) {
if (info->bmi_cmd_buff) {
cdf_os_mem_free_consistent(scn->cdf_dev, MAX_BMI_CMDBUF_SZ,
scn->bmi_cmd_buff, scn->bmi_cmd_da, 0);
scn->bmi_cmd_buff = NULL;
scn->bmi_cmd_da = 0;
info->bmi_cmd_buff, info->bmi_cmd_da, 0);
info->bmi_cmd_buff = NULL;
info->bmi_cmd_da = 0;
}
if (scn->bmi_rsp_buff) {
if (info->bmi_rsp_buff) {
cdf_os_mem_free_consistent(scn->cdf_dev, MAX_BMI_CMDBUF_SZ,
scn->bmi_rsp_buff, scn->bmi_rsp_da, 0);
scn->bmi_rsp_buff = NULL;
scn->bmi_rsp_da = 0;
info->bmi_rsp_buff, info->bmi_rsp_da, 0);
info->bmi_rsp_buff = NULL;
info->bmi_rsp_da = 0;
}
return CDF_STATUS_SUCCESS;

View file

@ -39,10 +39,11 @@ bmi_no_command(struct ol_softc *scn)
int status;
uint32_t length;
uint8_t ret = 0;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed: BMI DONE ALREADY");
return CDF_STATUS_E_PERM;
}
@ -79,10 +80,11 @@ bmi_done_local(struct ol_softc *scn)
int status;
uint32_t length;
uint8_t ret = 0;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -110,18 +112,18 @@ bmi_done_local(struct ol_softc *scn)
return CDF_STATUS_E_FAILURE;
}
if (scn->bmi_cmd_buff) {
if (info->bmi_cmd_buff) {
cdf_os_mem_free_consistent(scn->cdf_dev, MAX_BMI_CMDBUF_SZ,
scn->bmi_cmd_buff, scn->bmi_cmd_da, 0);
scn->bmi_cmd_buff = NULL;
scn->bmi_cmd_da = 0;
info->bmi_cmd_buff, info->bmi_cmd_da, 0);
info->bmi_cmd_buff = NULL;
info->bmi_cmd_da = 0;
}
if (scn->bmi_rsp_buff) {
if (info->bmi_rsp_buff) {
cdf_os_mem_free_consistent(scn->cdf_dev, MAX_BMI_CMDBUF_SZ,
scn->bmi_rsp_buff, scn->bmi_rsp_da, 0);
scn->bmi_rsp_buff = NULL;
scn->bmi_rsp_da = 0;
info->bmi_rsp_buff, info->bmi_rsp_da, 0);
info->bmi_rsp_buff = NULL;
info->bmi_rsp_da = 0;
}
return CDF_STATUS_SUCCESS;
@ -142,10 +144,11 @@ bmi_write_memory(uint32_t address,
const uint32_t header = sizeof(cid) + sizeof(address) + sizeof(length);
uint8_t aligned_buffer[BMI_DATASZ_MAX];
uint8_t *src;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -211,12 +214,13 @@ bmi_read_memory(uint32_t address, uint8_t *buffer,
uint8_t ret = 0;
uint32_t offset;
uint32_t remaining, rxlen, rsp_len, total_len;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
/* note we reuse the same buffer to receive on */
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
uint32_t size = sizeof(cid) + sizeof(address) + sizeof(length);
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -282,10 +286,11 @@ bmi_execute(uint32_t address, uint32_t *param,
int status;
uint32_t length;
uint8_t ret = 0;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -326,11 +331,12 @@ bmi_load_image(dma_addr_t address,
uint32_t offset;
uint32_t length;
uint8_t ret = 0;
uint8_t *bmi_cmd_buff = scn->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = scn->bmi_rsp_buff;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
uint32_t addr_h, addr_l;
if (scn->bmi_done) {
if (info->bmi_done) {
BMI_ERR("Command disallowed");
return CDF_STATUS_E_PERM;
}
@ -383,6 +389,7 @@ static CDF_STATUS bmi_enable(struct ol_softc *scn)
struct image_desc_info image_desc_info;
CDF_STATUS status;
struct hif_target_info *tgt_info;
struct bmi_info *info = hif_get_bmi_ctx(scn);
if (!scn) {
BMI_ERR("Invalid scn context");
@ -392,7 +399,7 @@ static CDF_STATUS bmi_enable(struct ol_softc *scn)
tgt_info = hif_get_target_info_handle(scn);
if (scn->bmi_cmd_buff == NULL || scn->bmi_rsp_buff == NULL) {
if (info->bmi_cmd_buff == NULL || info->bmi_rsp_buff == NULL) {
BMI_ERR("bmi_open failed!");
return CDF_STATUS_NOT_INITIALIZED;
}

View file

@ -148,6 +148,7 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
#endif
struct hif_target_info *tgt_info = hif_get_target_info_handle(scn);
uint32_t target_type = tgt_info->target_type;
struct bmi_info *bmi_ctx = hif_get_bmi_ctx(scn);
switch (file) {
default:
@ -155,7 +156,7 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
return -1;
case ATH_OTP_FILE:
#if defined(CONFIG_CNSS)
filename = scn->fw_files.otp_data;
filename = bmi_ctx->fw_files.otp_data;
#else
filename = QCA_OTP_FILE;
#endif
@ -166,7 +167,7 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
case ATH_FIRMWARE_FILE:
if (WLAN_IS_EPPING_ENABLED(cds_get_conparam())) {
#if defined(CONFIG_CNSS)
filename = scn->fw_files.epping_file;
filename = bmi_ctx->fw_files.epping_file;
#else
filename = QCA_FIRMWARE_EPPING_FILE;
#endif
@ -177,7 +178,7 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
#ifdef QCA_WIFI_FTM
if (cds_get_conparam() == CDF_GLOBAL_FTM_MODE) {
#if defined(CONFIG_CNSS)
filename = scn->fw_files.utf_file;
filename = bmi_ctx->fw_files.utf_file;
#else
filename = QCA_UTF_FIRMWARE_FILE;
#endif
@ -190,7 +191,7 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
}
#endif
#if defined(CONFIG_CNSS)
filename = scn->fw_files.image_file;
filename = bmi_ctx->fw_files.image_file;
#else
filename = QCA_FIRMWARE_FILE;
#endif
@ -205,7 +206,7 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
#ifdef QCA_WIFI_FTM
if (cds_get_conparam() == CDF_GLOBAL_FTM_MODE) {
#if defined(CONFIG_CNSS)
filename = scn->fw_files.utf_board_data;
filename = bmi_ctx->fw_files.utf_board_data;
#else
filename = QCA_BOARD_DATA_FILE;
#endif
@ -218,7 +219,7 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
}
#endif /* QCA_WIFI_FTM */
#if defined(CONFIG_CNSS)
filename = scn->fw_files.board_data;
filename = bmi_ctx->fw_files.board_data;
#else
filename = QCA_BOARD_DATA_FILE;
#endif
@ -256,8 +257,8 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
#if defined(QCA_WIFI_FTM) && defined(CONFIG_CNSS)
/* Try default board data file if FTM specific
* board data file is not present. */
if (filename == scn->fw_files.utf_board_data) {
filename = scn->fw_files.board_data;
if (filename == bmi_ctx->fw_files.utf_board_data) {
filename = bmi_ctx->fw_files.board_data;
BMI_INFO("%s: Trying to load default %s",
__func__, filename);
if (request_firmware(&fw_entry, filename,
@ -1211,9 +1212,10 @@ CDF_STATUS ol_download_firmware(struct ol_softc *scn)
struct hif_config_info *ini_cfg = hif_get_ini_handle(scn);
uint32_t target_type = tgt_info->target_type;
uint32_t target_version = tgt_info->target_version;
struct bmi_info *bmi_ctx = hif_get_bmi_ctx(scn);
#ifdef CONFIG_CNSS
if (0 != cnss_get_fw_files_for_target(&scn->fw_files,
if (0 != cnss_get_fw_files_for_target(&bmi_ctx->fw_files,
target_type,
target_version)) {
BMI_ERR("%s: No FW files from CNSS driver", __func__);