qcacld-3.0: Create OL BMI Context in global CDS Context.

Create bmi context in global cds context for BMI operations.

Modify HIF BMI API to pass dma command and response
Pass BMI DMA Command and Response address to HIF BMI API as
arguments instead of using bmi context in HIF.

Change-Id: Ifdb51581a33665b1857c63e33b1c26bbd99575eb
CRs-Fixed: 967765
This commit is contained in:
Komal Seelam 2016-02-15 10:31:44 +05:30 committed by Prakash Dhavali
parent 02d0934a4a
commit d910649caa
10 changed files with 177 additions and 37 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2015 The Linux Foundation. All rights reserved.
* Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@ -37,22 +37,26 @@
#include "ol_if_athvar.h"
#include "hif.h"
struct ol_context;
CDF_STATUS ol_cds_init(cdf_device_t cdf_dev, void *hif_ctx);
void ol_cds_free(void);
#ifdef HIF_PCI
void bmi_cleanup(struct ol_softc *scn);
CDF_STATUS bmi_done(struct ol_softc *scn);
CDF_STATUS bmi_download_firmware(struct ol_softc *scn);
CDF_STATUS bmi_done(struct ol_context *ol_ctx);
CDF_STATUS bmi_download_firmware(struct ol_context *ol_ctx);
#else
static inline void bmi_cleanup(struct ol_softc *scn)
{
return;
}
static inline CDF_STATUS bmi_done(struct ol_softc *scn)
static inline CDF_STATUS bmi_done(struct ol_context *ol_ctx)
{
return CDF_STATUS_SUCCESS;
}
static inline CDF_STATUS bmi_download_firmware(struct ol_softc *scn)
static inline CDF_STATUS bmi_download_firmware(struct ol_context *ol_ctx)
{
return CDF_STATUS_SUCCESS;
}

View File

@ -128,9 +128,10 @@ void bmi_cleanup(struct ol_softc *scn)
}
CDF_STATUS bmi_done(struct ol_softc *scn)
CDF_STATUS bmi_done(struct ol_context *ol_ctx)
{
CDF_STATUS status = CDF_STATUS_SUCCESS;
struct ol_softc *scn = ol_ctx->scn;
if (NO_BMI)
return status;
@ -151,6 +152,8 @@ bmi_get_target_info(struct bmi_target_info *targ_info,
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
uint32_t cid, length;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
if (info->bmi_done) {
BMI_ERR("BMI Phase is Already Done");
@ -166,7 +169,7 @@ bmi_get_target_info(struct bmi_target_info *targ_info,
cdf_mem_copy(bmi_cmd_buff, &cid, sizeof(cid));
length = sizeof(struct bmi_target_info);
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, sizeof(cid),
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff, sizeof(cid),
(uint8_t *)bmi_rsp_buff, &length,
BMI_EXCHANGE_TIMEOUT_MS);
if (status) {
@ -190,11 +193,12 @@ static inline uint32_t bmi_get_test_addr(void)
}
#endif
CDF_STATUS bmi_download_firmware(struct ol_softc *scn)
CDF_STATUS bmi_download_firmware(struct ol_context *ol_ctx)
{
uint8_t data[10], out[10];
uint32_t address;
int32_t ret;
struct ol_softc *scn = ol_ctx->scn;
if (NO_BMI)
return CDF_STATUS_SUCCESS; /* no BMI for Q6 bring up */
@ -233,6 +237,8 @@ bmi_read_soc_register(uint32_t address, uint32_t *param, struct ol_softc *scn)
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;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
bmi_assert(BMI_COMMAND_FITS(sizeof(cid) + sizeof(address)));
cdf_mem_set(bmi_cmd_buff, 0, sizeof(cid) + sizeof(address));
@ -254,7 +260,7 @@ bmi_read_soc_register(uint32_t address, uint32_t *param, struct ol_softc *scn)
cdf_mem_copy(&(bmi_cmd_buff[offset]), &address, sizeof(address));
offset += sizeof(address);
param_len = sizeof(*param);
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, offset,
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff, offset,
bmi_rsp_buff, &param_len, BMI_EXCHANGE_TIMEOUT_MS);
if (status) {
BMI_DBG("Unable to read from the device; status:%d", status);
@ -275,6 +281,9 @@ bmi_write_soc_register(uint32_t address, uint32_t param, struct ol_softc *scn)
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);
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
bmi_assert(BMI_COMMAND_FITS(size));
cdf_mem_set(bmi_cmd_buff, 0, size);
@ -295,7 +304,7 @@ bmi_write_soc_register(uint32_t address, uint32_t param, struct ol_softc *scn)
offset += sizeof(address);
cdf_mem_copy(&(bmi_cmd_buff[offset]), &param, sizeof(param));
offset += sizeof(param);
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, offset,
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff, offset,
NULL, NULL, 0);
if (status) {
BMI_ERR("Unable to write to the device: status:%d", status);
@ -316,6 +325,8 @@ bmilz_data(uint8_t *buffer, uint32_t length, struct ol_softc *scn)
const uint32_t header = sizeof(cid) + sizeof(length);
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
bmi_assert(BMI_COMMAND_FITS(BMI_DATASZ_MAX + header));
cdf_mem_set(bmi_cmd_buff, 0, BMI_DATASZ_MAX + header);
@ -342,8 +353,9 @@ bmilz_data(uint8_t *buffer, uint32_t length, struct ol_softc *scn)
cdf_mem_copy(&(bmi_cmd_buff[offset]),
&buffer[length - remaining], txlen);
offset += txlen;
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, offset,
NULL, NULL, 0);
status = hif_exchange_bmi_msg(scn, cmd, rsp,
bmi_cmd_buff, offset,
NULL, NULL, 0);
if (status) {
BMI_ERR("Failed to write to the device: status:%d",
status);
@ -370,6 +382,8 @@ bmi_sign_stream_start(uint32_t address,
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint32_t remaining, txlen;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
bmi_assert(BMI_COMMAND_FITS(BMI_DATASZ_MAX + header));
cdf_mem_set(bmi_cmd_buff, 0, BMI_DATASZ_MAX + header);
@ -407,9 +421,9 @@ bmi_sign_stream_start(uint32_t address,
offset += sizeof(txlen);
cdf_mem_copy(&(bmi_cmd_buff[offset]), src, txlen);
offset += txlen;
status = hif_exchange_bmi_msg(scn,
bmi_cmd_buff, offset,
NULL, NULL, BMI_EXCHANGE_TIMEOUT_MS);
status = hif_exchange_bmi_msg(scn, cmd, rsp,
bmi_cmd_buff, offset, NULL,
NULL, BMI_EXCHANGE_TIMEOUT_MS);
if (status) {
BMI_ERR("Unable to write to the device: status:%d",
status);
@ -430,6 +444,8 @@ bmilz_stream_start(uint32_t address, struct ol_softc *scn)
uint32_t offset;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
bmi_assert(BMI_COMMAND_FITS(sizeof(cid) + sizeof(address)));
cdf_mem_set(bmi_cmd_buff, 0, sizeof(cid) + sizeof(address));
@ -447,7 +463,7 @@ bmilz_stream_start(uint32_t address, struct ol_softc *scn)
offset += sizeof(cid);
cdf_mem_copy(&(bmi_cmd_buff[offset]), &address, sizeof(address));
offset += sizeof(address);
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, offset,
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff, offset,
NULL, NULL, 0);
if (status) {
BMI_ERR("Unable to Start LZ Stream to the device status:%d",
@ -494,3 +510,47 @@ end:
return status;
}
/**
* ol_cds_init() - API to initialize global CDS OL Context
* @cdf_dev: CDF Device
* @hif_ctx: HIF Context
*
* Return: Success/Failure
*/
CDF_STATUS ol_cds_init(cdf_device_t cdf_dev, void *hif_ctx)
{
struct ol_context *ol_info;
CDF_STATUS status = CDF_STATUS_SUCCESS;
if (NO_BMI)
return CDF_STATUS_SUCCESS; /* no BMI for Q6 bring up */
status = cds_alloc_context(cds_get_global_context(), CDF_MODULE_ID_BMI,
(void **)&ol_info, sizeof(*ol_info));
if (status != CDF_STATUS_SUCCESS) {
BMI_ERR("%s: CDS Allocation failed for ol_bmi context",
__func__);
return status;
}
ol_info->cdf_dev = cdf_dev;
ol_info->scn = hif_ctx;
return status;
}
/**
* ol_cds_free() - API to free the global CDS OL Context
*
* Return: void
*/
void ol_cds_free(void)
{
struct ol_context *ol_info = cds_get_context(CDF_MODULE_ID_BMI);
if (NO_BMI)
return;
cds_free_context(cds_get_global_context(), CDF_MODULE_ID_BMI, ol_info);
}

View File

@ -42,6 +42,8 @@ bmi_read_memory(uint32_t address,
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
uint32_t align;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
if (info->bmi_done) {
BMI_DBG("command disallowed");
@ -80,8 +82,9 @@ bmi_read_memory(uint32_t address,
offset += sizeof(length);
/* note we reuse the same buffer to receive on */
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, offset,
bmi_rsp_buff, &rxlen, BMI_EXCHANGE_TIMEOUT_MS);
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff,
offset, bmi_rsp_buff, &rxlen,
BMI_EXCHANGE_TIMEOUT_MS);
if (status) {
BMI_ERR("Unable to read from the device");
return CDF_STATUS_E_FAILURE;
@ -115,6 +118,8 @@ bmi_write_memory(uint32_t address,
uint8_t *src;
struct bmi_info *info = hif_get_bmi_ctx(scn);
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
if (info->bmi_done) {
BMI_ERR("Command disallowed");
@ -158,8 +163,9 @@ bmi_write_memory(uint32_t address,
offset += sizeof(txlen);
cdf_mem_copy(&(bmi_cmd_buff[offset]), src, txlen);
offset += txlen;
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, offset,
NULL, NULL, BMI_EXCHANGE_TIMEOUT_MS);
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff,
offset, NULL, NULL,
BMI_EXCHANGE_TIMEOUT_MS);
if (status) {
BMI_ERR("Unable to write to the device; status:%d",
status);
@ -185,6 +191,8 @@ bmi_execute(uint32_t address, A_UINT32 *param, struct ol_softc *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);
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
if (info->bmi_done) {
BMI_ERR("Command disallowed");
@ -214,7 +222,7 @@ bmi_execute(uint32_t address, A_UINT32 *param, struct ol_softc *scn)
cdf_mem_copy(&(bmi_cmd_buff[offset]), param, sizeof(*param));
offset += sizeof(*param);
param_len = sizeof(*param);
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, offset,
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff, offset,
bmi_rsp_buff, &param_len, 0);
if (status) {
BMI_ERR("Unable to read from the device status:%d", status);
@ -278,6 +286,7 @@ CDF_STATUS bmi_done_local(struct ol_softc *scn)
uint32_t cid;
struct bmi_info *info;
cdf_device_t cdf_dev = cds_get_context(CDF_MODULE_ID_CDF_DEVICE);
cdf_dma_addr_t cmd, rsp;
if (!scn) {
BMI_ERR("Invalid scn context");
@ -296,6 +305,9 @@ CDF_STATUS bmi_done_local(struct ol_softc *scn)
return CDF_STATUS_E_PERM;
}
cmd = info->bmi_cmd_da;
rsp = info->bmi_rsp_da;
BMI_DBG("BMI Done: Enter (device: 0x%p)", scn);
info->bmi_done = true;
@ -309,7 +321,7 @@ CDF_STATUS bmi_done_local(struct ol_softc *scn)
cdf_mem_copy(info->bmi_cmd_buff, &cid, sizeof(cid));
status = hif_exchange_bmi_msg(scn, info->bmi_cmd_buff,
status = hif_exchange_bmi_msg(scn, cmd, rsp, info->bmi_cmd_buff,
sizeof(cid), NULL, NULL, 0);
if (status) {
BMI_ERR("Failed to write to the device; status:%d", status);

View File

@ -43,6 +43,8 @@ bmi_no_command(struct ol_softc *scn)
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;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
if (info->bmi_done) {
BMI_ERR("Command disallowed: BMI DONE ALREADY");
@ -58,7 +60,7 @@ bmi_no_command(struct ol_softc *scn)
cdf_mem_copy(bmi_cmd_buff, &cid, sizeof(cid));
length = sizeof(ret);
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, sizeof(cid),
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff, sizeof(cid),
bmi_rsp_buff, &length, BMI_EXCHANGE_TIMEOUT_MS);
if (status) {
@ -85,6 +87,8 @@ bmi_done_local(struct ol_softc *scn)
uint8_t *bmi_cmd_buff = info->bmi_cmd_buff;
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
cdf_device_t cdf_dev = cds_get_context(CDF_MODULE_ID_CDF_DEVICE);
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
if (info->bmi_done) {
BMI_ERR("Command disallowed");
@ -106,7 +110,7 @@ bmi_done_local(struct ol_softc *scn)
cdf_mem_copy(bmi_cmd_buff, &cid, sizeof(cid));
length = sizeof(ret);
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, sizeof(cid),
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff, sizeof(cid),
bmi_rsp_buff, &length, BMI_EXCHANGE_TIMEOUT_MS);
if (status) {
@ -155,6 +159,8 @@ bmi_write_memory(uint32_t address,
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;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
if (info->bmi_done) {
BMI_ERR("Command disallowed");
@ -196,8 +202,9 @@ bmi_write_memory(uint32_t address,
offset += sizeof(txlen);
cdf_mem_copy(&(bmi_cmd_buff[offset]), src, txlen);
offset += txlen;
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, offset,
bmi_rsp_buff, &rsp_len, BMI_EXCHANGE_TIMEOUT_MS);
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff,
offset, bmi_rsp_buff, &rsp_len,
BMI_EXCHANGE_TIMEOUT_MS);
if (status) {
BMI_ERR("BMI Write Memory Failed status:%d", status);
return CDF_STATUS_E_FAILURE;
@ -227,6 +234,8 @@ bmi_read_memory(uint32_t address, uint8_t *buffer,
/* note we reuse the same buffer to receive on */
uint8_t *bmi_rsp_buff = info->bmi_rsp_buff;
uint32_t size = sizeof(cid) + sizeof(address) + sizeof(length);
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
if (info->bmi_done) {
BMI_ERR("Command disallowed");
@ -259,7 +268,7 @@ bmi_read_memory(uint32_t address, uint8_t *buffer,
total_len = rxlen + rsp_len;
status = hif_exchange_bmi_msg(scn,
status = hif_exchange_bmi_msg(scn, cmd, rsp,
bmi_cmd_buff,
offset,
bmi_rsp_buff,
@ -297,6 +306,8 @@ bmi_execute(uint32_t address, uint32_t *param,
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;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
if (info->bmi_done) {
BMI_ERR("Command disallowed");
@ -313,7 +324,7 @@ bmi_execute(uint32_t address, uint32_t *param,
cdf_mem_copy(bmi_cmd_buff, &cid, sizeof(cid));
length = sizeof(ret);
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, sizeof(cid),
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff, sizeof(cid),
bmi_rsp_buff, &length, BMI_EXCHANGE_TIMEOUT_MS);
if (status) {
@ -342,6 +353,9 @@ bmi_load_image(dma_addr_t address,
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;
cdf_dma_addr_t cmd = info->bmi_cmd_da;
cdf_dma_addr_t rsp = info->bmi_rsp_da;
uint32_t addr_h, addr_l;
if (info->bmi_done) {
@ -375,7 +389,7 @@ bmi_load_image(dma_addr_t address,
offset += sizeof(size);
length = sizeof(ret);
status = hif_exchange_bmi_msg(scn, bmi_cmd_buff, offset,
status = hif_exchange_bmi_msg(scn, cmd, rsp, bmi_cmd_buff, offset,
bmi_rsp_buff, &length, BMI_EXCHANGE_TIMEOUT_MS);
if (status) {

View File

@ -121,6 +121,18 @@ typedef enum _ATH_BIN_FILE {
#define NO_BMI 0
#endif
/**
* struct ol_context - Structure to hold OL context
* @cdf_dev: CDF Device
* @scn: HIF Context
*
* Structure to hold all ol BMI/Ramdump info
*/
struct ol_context {
cdf_device_t cdf_dev;
struct ol_softc *scn;
};
CDF_STATUS bmi_execute(uint32_t address, uint32_t *param,
struct ol_softc *scn);
CDF_STATUS bmi_init(struct ol_softc *scn);

View File

@ -263,6 +263,7 @@ typedef struct _cds_context_type {
void *htc_ctx;
void *g_ol_context;
/*
* cdf_ctx will be used by cdf
* while allocating dma memory

View File

@ -173,6 +173,7 @@ CDF_STATUS cds_open(void)
cdf_device_t cdf_ctx;
HTC_INIT_INFO htcInfo;
struct ol_softc *scn;
struct ol_context *ol_ctx;
void *HTCHandle;
hdd_context_t *pHddCtx;
@ -256,8 +257,9 @@ CDF_STATUS cds_open(void)
hdd_update_hif_config(scn, pHddCtx);
ol_ctx = cds_get_context(CDF_MODULE_ID_BMI);
/* Initialize BMI and Download firmware */
cdf_status = bmi_download_firmware(scn);
cdf_status = bmi_download_firmware(ol_ctx);
if (cdf_status != CDF_STATUS_SUCCESS) {
CDF_TRACE(CDF_MODULE_ID_CDF, CDF_TRACE_LEVEL_FATAL,
"BMI FIALED status:%d", cdf_status);
@ -278,7 +280,7 @@ CDF_STATUS cds_open(void)
goto err_bmi_close;
}
if (bmi_done(scn)) {
if (bmi_done(ol_ctx)) {
CDF_TRACE(CDF_MODULE_ID_CDF, CDF_TRACE_LEVEL_FATAL,
"%s: Failed to complete BMI phase", __func__);
goto err_htc_close;
@ -902,6 +904,12 @@ void *cds_get_context(CDF_MODULE_ID moduleId)
break;
}
case CDF_MODULE_ID_BMI:
{
pModContext = gp_cds_context->g_ol_context;
break;
}
case CDF_MODULE_ID_TXRX:
{
pModContext = gp_cds_context->pdev_txrx_ctx;
@ -1061,6 +1069,12 @@ CDF_STATUS cds_alloc_context(void *p_cds_context, CDF_MODULE_ID moduleID,
break;
}
case CDF_MODULE_ID_BMI:
{
pGpModContext = &(gp_cds_context->g_ol_context);
break;
}
case CDF_MODULE_ID_EPPING:
case CDF_MODULE_ID_SME:
case CDF_MODULE_ID_PE:
@ -1150,6 +1164,12 @@ CDF_STATUS cds_free_context(void *p_cds_context, CDF_MODULE_ID moduleID,
break;
}
case CDF_MODULE_ID_BMI:
{
pGpModContext = &(gp_cds_context->g_ol_context);
break;
}
case CDF_MODULE_ID_EPPING:
case CDF_MODULE_ID_HDD:
case CDF_MODULE_ID_SME:

View File

@ -52,6 +52,7 @@
#include "wlan_hdd_napi.h"
#include "cds_concurrency.h"
#include "qwlan_version.h"
#include "bmi.h"
#ifdef MODULE
#define WLAN_MODULE_NAME module_name(THIS_MODULE)
@ -219,6 +220,7 @@ static int wlan_hdd_probe(struct device *dev, void *bdev, const hif_bus_id *bid,
void *hif_ctx;
CDF_STATUS status;
int ret = 0;
cdf_device_t cdf_dev;
pr_info("%s: %sprobing driver v%s\n", WLAN_MODULE_NAME,
reinit ? "re-" : "", QWLAN_VERSIONSTR);
@ -257,6 +259,14 @@ static int wlan_hdd_probe(struct device *dev, void *bdev, const hif_bus_id *bid,
goto err_epping_close;
hif_ctx = cds_get_context(CDF_MODULE_ID_HIF);
cdf_dev = cds_get_context(CDF_MODULE_ID_CDF_DEVICE);
status = ol_cds_init(cdf_dev, hif_ctx);
if (status != CDF_STATUS_SUCCESS) {
pr_err("%s No Memory to Create BMI Context\n", __func__);
goto err_hif_close;
}
if (reinit)
ret = hdd_wlan_re_init(hif_ctx);
@ -264,7 +274,7 @@ static int wlan_hdd_probe(struct device *dev, void *bdev, const hif_bus_id *bid,
ret = hdd_wlan_startup(dev, hif_ctx);
if (ret)
goto err_hif_close;
goto err_bmi_close;
hif_enable_power_management(hif_ctx);
@ -280,6 +290,8 @@ static int wlan_hdd_probe(struct device *dev, void *bdev, const hif_bus_id *bid,
return 0;
err_bmi_close:
ol_cds_free();
err_hif_close:
hdd_hif_close(hif_ctx);
err_epping_close:
@ -344,8 +356,8 @@ static void wlan_hdd_remove(void)
__hdd_wlan_exit();
}
ol_cds_free();
hdd_hif_close(hif_ctx);
hdd_deinit();
pr_info("%s: Driver Removed\n", WLAN_MODULE_NAME);
@ -378,6 +390,7 @@ static void wlan_hdd_shutdown(void)
hdd_wlan_shutdown();
}
ol_cds_free();
hdd_hif_close(hif_ctx);
}

View File

@ -180,6 +180,7 @@ static CDF_STATUS wlan_ftm_cds_open(v_CONTEXT_t p_cds_context,
HTC_INIT_INFO htcInfo;
void *pHifContext = NULL;
void *pHtcContext = NULL;
struct ol_context *ol_ctx;
#endif
hdd_context_t *hdd_ctx;
@ -251,7 +252,8 @@ static CDF_STATUS wlan_ftm_cds_open(v_CONTEXT_t p_cds_context,
goto err_sched_close;
}
if (bmi_download_firmware(pHifContext)) {
ol_ctx = cds_get_context(CDF_MODULE_ID_BMI);
if (bmi_download_firmware(ol_ctx)) {
CDF_TRACE(CDF_MODULE_ID_CDF, CDF_TRACE_LEVEL_FATAL,
"%s: BMI failed to download target", __func__);
goto err_bmi_close;
@ -270,7 +272,7 @@ static CDF_STATUS wlan_ftm_cds_open(v_CONTEXT_t p_cds_context,
goto err_bmi_close;
}
if (bmi_done(pHifContext)) {
if (bmi_done(ol_ctx)) {
CDF_TRACE(CDF_MODULE_ID_CDF, CDF_TRACE_LEVEL_FATAL,
"%s: Failed to complete BMI phase", __func__);
goto err_htc_close;

View File

@ -183,6 +183,7 @@ int epping_enable(struct device *parent_dev)
tSirMacAddr adapter_macAddr;
struct hif_config_info *cfg;
struct hif_target_info *tgt_info;
struct ol_context *ol_ctx;
EPPING_LOG(CDF_TRACE_LEVEL_INFO_HIGH, "%s: Enter", __func__);
@ -225,9 +226,10 @@ int epping_enable(struct device *parent_dev)
/* store target type and target version info in hdd ctx */
pEpping_ctx->target_type = tgt_info->target_type;
ol_ctx = cds_get_context(CDF_MODULE_ID_BMI);
#ifndef FEATURE_BMI_2
/* Initialize BMI and Download firmware */
if (bmi_download_firmware(scn)) {
if (bmi_download_firmware(ol_ctx)) {
CDF_TRACE(CDF_MODULE_ID_CDF, CDF_TRACE_LEVEL_FATAL,
"%s: BMI failed to download target", __func__);
bmi_cleanup(scn);
@ -258,7 +260,7 @@ int epping_enable(struct device *parent_dev)
return -1;
}
if (bmi_done(scn)) {
if (bmi_done(ol_ctx)) {
EPPING_LOG(CDF_TRACE_LEVEL_FATAL,
"%s: Failed to complete BMI phase", __func__);
goto error_end;