summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuanyuan Liu <yuanliu@codeaurora.org>2016-04-26 12:40:26 -0700
committerAkash Patel <akashp@codeaurora.org>2016-05-23 11:43:53 -0700
commiteaa6b6ef567e0cf0fc65fecfcd376962ef9b6855 (patch)
tree17d1a40e293d36e051b9c351142f55509dc14971
parent7f17ee751515d7d71607ba7c80c390361d8f5351 (diff)
qcacld-3.0: BMI: Use PLD APIs
PLD is a interface between CLD and CNSS/ICNSS. It hides CNSS/ICNSS APIs from CLD and provides a set of common APIs. CLD modules should use these PLD APIs instead of calling CNSS/ICNSS platform APIs. Replace all CNSS/ICNSS APIs with PLD APIs in BMI. CRs-Fixed: 1013853 Change-Id: I1e244ec9f9fd604a9b231b6ff1085f7b6b4bab22
-rw-r--r--core/bmi/inc/ol_if_athvar.h4
-rw-r--r--core/bmi/src/bmi.c7
-rw-r--r--core/bmi/src/i_bmi.h14
-rw-r--r--core/bmi/src/ol_fw.c132
4 files changed, 65 insertions, 92 deletions
diff --git a/core/bmi/inc/ol_if_athvar.h b/core/bmi/inc/ol_if_athvar.h
index 1eb13f2f76de..afd143899ec2 100644
--- a/core/bmi/inc/ol_if_athvar.h
+++ b/core/bmi/inc/ol_if_athvar.h
@@ -40,10 +40,6 @@
#include "ol_params.h"
#include <wdi_event_api.h>
-#ifdef CONFIG_CNSS
-#include <net/cnss.h>
-#endif
-
#include "ol_ctrl_addba_api.h"
struct ol_version {
diff --git a/core/bmi/src/bmi.c b/core/bmi/src/bmi.c
index fc9969d7d993..639ebbce8540 100644
--- a/core/bmi/src/bmi.c
+++ b/core/bmi/src/bmi.c
@@ -1,5 +1,5 @@
/*
- * copyright (c) 2014-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -512,7 +512,10 @@ QDF_STATUS ol_cds_init(qdf_device_t qdf_dev, void *hif_ctx)
ol_info->scn = hif_ctx;
ol_info->tgt_def.targetdef = hif_get_targetdef(hif_ctx);
- qdf_create_work(qdf_dev, &ol_info->ramdump_work, ramdump_work_handler, ol_info);
+ qdf_create_work(qdf_dev, &ol_info->ramdump_work,
+ ramdump_work_handler, ol_info);
+ qdf_create_work(qdf_dev, &ol_info->fw_indication_work,
+ fw_indication_work_handler, ol_info);
return status;
}
diff --git a/core/bmi/src/i_bmi.h b/core/bmi/src/i_bmi.h
index 1cdc0d2896ef..778403c59abe 100644
--- a/core/bmi/src/i_bmi.h
+++ b/core/bmi/src/i_bmi.h
@@ -31,14 +31,11 @@
#ifndef _I_BMI_H_
#define _I_BMI_H_
-#ifdef CONFIG_CNSS
-#include <net/cnss.h>
-#endif
-
#include "hif.h"
#include "bmi_msg.h"
#include "bmi.h"
#include "ol_fw.h"
+#include "pld_common.h"
#ifdef CONFIG_CNSS
#define QCA_FIRMWARE_FILE fw_files->image_file
@@ -149,9 +146,7 @@ struct bmi_info {
dma_addr_t bmi_cmd_da;
dma_addr_t bmi_rsp_da;
bool bmi_done;
-#ifdef CONFIG_CNSS
- struct cnss_fw_files fw_files;
-#endif
+ struct pld_fw_files fw_files;
};
/**
@@ -160,7 +155,8 @@ struct bmi_info {
* @cal_in_flash: For Firmware Flash Download
* @qdf_dev: QDF Device
* @scn: HIF Context
- * @ramdump_work: WorkQueue for Ramdump collection
+ * @ramdump_work: Work for Ramdump collection
+ * @fw_indication_work: Work for Fw inciation
* @tgt_def: Target Defnition pointer
*
* Structure to hold all ol BMI/Ramdump info
@@ -171,6 +167,7 @@ struct ol_context {
uint8_t *cal_in_flash;
qdf_device_t qdf_dev;
qdf_work_t ramdump_work;
+ qdf_work_t fw_indication_work;
struct hif_opaque_softc *scn;
struct targetdef_t {
struct targetdef_s *targetdef;
@@ -202,5 +199,6 @@ QDF_STATUS ol_configure_target(struct ol_context *ol_ctx);
QDF_STATUS bmi_sign_stream_start(uint32_t address, uint8_t *buffer,
uint32_t length, struct ol_context *ol_ctx);
void ramdump_work_handler(void *arg);
+void fw_indication_work_handler(void *arg);
struct ol_config_info *ol_get_ini_handle(struct ol_context *ol_ctx);
#endif
diff --git a/core/bmi/src/ol_fw.c b/core/bmi/src/ol_fw.c
index 3314d75c7e36..c8afd59b002e 100644
--- a/core/bmi/src/ol_fw.c
+++ b/core/bmi/src/ol_fw.c
@@ -36,10 +36,7 @@
#include "i_ar6320v2_regtable.h"
#include "epping_main.h"
#include "ce_reg.h"
-#if defined(CONFIG_CNSS)
-#include <net/cnss.h>
-#endif
-
+#include "pld_common.h"
#include "i_bmi.h"
#include "qwlan_version.h"
#include "cds_concurrency.h"
@@ -59,19 +56,16 @@ static uint32_t refclk_speed_to_hz[] = {
52000000, /* SOC_REFCLK_52_MHZ */
};
-#if defined(CONFIG_CNSS)
static int ol_target_coredump(void *inst, void *memory_block,
uint32_t block_len);
-#endif
#ifdef FEATURE_SECURE_FIRMWARE
-static int ol_check_fw_hash(const u8 *data, u32 fw_size, ATH_BIN_FILE file)
+static int ol_check_fw_hash(struct device *dev,
+ const u8 *data, u32 fw_size, ATH_BIN_FILE file)
{
u8 *hash = NULL;
-#ifdef CONFIG_CNSS
u8 *fw_mem = NULL;
u8 digest[SHA256_DIGEST_SIZE];
-#endif
u8 temp[SHA256_DIGEST_SIZE] = { };
int ret = 0;
@@ -105,8 +99,7 @@ static int ol_check_fw_hash(const u8 *data, u32 fw_size, ATH_BIN_FILE file)
goto end;
}
-#ifdef CONFIG_CNSS
- fw_mem = (u8 *)cnss_get_fw_ptr();
+ fw_mem = pld_get_fw_ptr(dev);
if (!fw_mem || (fw_size > MAX_FIRMWARE_SIZE)) {
BMI_ERR("No Memory to copy FW data");
ret = -1;
@@ -114,7 +107,7 @@ static int ol_check_fw_hash(const u8 *data, u32 fw_size, ATH_BIN_FILE file)
}
qdf_mem_copy(fw_mem, data, fw_size);
- ret = cnss_get_sha_hash(fw_mem, fw_size, "sha256", digest);
+ ret = pld_get_sha_hash(dev, fw_mem, fw_size, "sha256", digest);
if (ret) {
BMI_ERR("Sha256 Hash computation failed err:%d", ret);
@@ -129,7 +122,6 @@ static int ol_check_fw_hash(const u8 *data, u32 fw_size, ATH_BIN_FILE file)
hash, SHA256_DIGEST_SIZE);
ret = QDF_STATUS_E_FAILURE;
}
-#endif
end:
return ret;
}
@@ -279,7 +271,7 @@ __ol_transfer_bin_file(struct ol_context *ol_ctx, ATH_BIN_FILE file,
#ifdef FEATURE_SECURE_FIRMWARE
- if (ol_check_fw_hash(fw_entry->data, fw_entry_size, file)) {
+ if (ol_check_fw_hash(qdf_dev->dev, fw_entry->data, fw_entry_size, file)) {
BMI_ERR("Hash Check failed for file:%s", filename);
status = QDF_STATUS_E_FAILURE;
goto end;
@@ -439,23 +431,18 @@ ol_transfer_bin_file(struct ol_context *ol_ctx, ATH_BIN_FILE file,
uint32_t address, bool compressed)
{
int ret;
+ qdf_device_t qdf_dev = ol_ctx->qdf_dev;
-#ifdef CONFIG_CNSS
/* Wait until suspend and resume are completed before loading FW */
- cnss_lock_pm_sem();
-#endif
+ pld_lock_pm_sem(qdf_dev->dev);
ret = __ol_transfer_bin_file(ol_ctx, file, address, compressed);
-#ifdef CONFIG_CNSS
- cnss_release_pm_sem();
-#endif
+ pld_release_pm_sem(qdf_dev->dev);
return ret;
}
-#if defined(CONFIG_CNSS)
-
/**
* struct ramdump_info: Structure to hold ramdump information
* @base: Base address for Ramdump collection
@@ -468,27 +455,39 @@ struct ramdump_info {
unsigned long size;
};
-#if defined(CONFIG_CNSS) && !defined(QCA_WIFI_3_0)
-static inline void ol_get_ramdump_mem(struct ramdump_info *info)
+#if !defined(QCA_WIFI_3_0)
+static inline void ol_get_ramdump_mem(struct device *dev,
+ struct ramdump_info *info)
{
- info->base = cnss_get_virt_ramdump_mem(&info->size);
+ info->base = pld_get_virt_ramdump_mem(dev, &info->size);
}
#else
-static inline void ol_get_ramdump_mem(struct ramdump_info *info) { }
+static inline void ol_get_ramdump_mem(struct device *dev,
+ struct ramdump_info *info) { }
#endif
int ol_copy_ramdump(struct hif_opaque_softc *scn)
{
int ret = -1;
+ struct hif_opaque_softc **ol_ctx_ptr = &scn;
+ struct ol_context *ol_ctx;
+ qdf_device_t qdf_dev;
+ struct ramdump_info *info;
- struct ramdump_info *info = qdf_mem_malloc(sizeof(struct ramdump_info));
+ ol_ctx = container_of(ol_ctx_ptr, struct ol_context , scn);
+ if (!ol_ctx) {
+ BMI_ERR("%s: Invalid ol_ctx\n", __func__);
+ return -EINVAL;
+ }
+ qdf_dev = ol_ctx->qdf_dev;
+ info = qdf_mem_malloc(sizeof(struct ramdump_info));
if (!info) {
BMI_ERR("%s Memory for Ramdump Allocation failed", __func__);
return -ENOMEM;
}
- ol_get_ramdump_mem(info);
+ ol_get_ramdump_mem(qdf_dev->dev, info);
if (!info->base || !info->size) {
BMI_ERR("%s:ramdump collection fail", __func__);
@@ -510,6 +509,8 @@ void ramdump_work_handler(void *data)
struct hif_target_info *tgt_info;
struct ol_context *ol_ctx = data;
struct hif_opaque_softc *ramdump_scn = ol_ctx->scn;
+ qdf_device_t qdf_dev = ol_ctx->qdf_dev;
+ struct ol_config_info *ini_cfg = ol_get_ini_handle(ol_ctx);
if (!ramdump_scn) {
BMI_ERR("%s:Ramdump_scn is null:", __func__);
@@ -535,7 +536,7 @@ void ramdump_work_handler(void *data)
sizeof(uint32_t)) != QDF_STATUS_SUCCESS) {
BMI_ERR("HifDiagReadiMem FW Dump Area Pointer failed!");
ol_copy_ramdump(ramdump_scn);
- cnss_device_crashed();
+ pld_device_crashed(qdf_dev->dev);
return;
}
@@ -555,41 +556,33 @@ void ramdump_work_handler(void *data)
BMI_ERR("%s: RAM dump collecting completed!", __func__);
/* notify SSR framework the target has crashed. */
- cnss_device_crashed();
+ pld_device_crashed(qdf_dev->dev);
return;
out_fail:
/* Silent SSR on dump failure */
-#ifdef CNSS_SELF_RECOVERY
- cnss_device_self_recovery();
-#else
- cnss_device_crashed();
-#endif
+ if (ini_cfg->enable_self_recovery)
+ pld_device_self_recovery(qdf_dev->dev);
+ else
+ pld_device_crashed(qdf_dev->dev);
return;
}
-static void fw_indication_work_handler(struct work_struct *fw_indication)
+void fw_indication_work_handler(void *data)
{
- cnss_device_self_recovery();
-}
-
-static DECLARE_WORK(fw_indication_work, fw_indication_work_handler);
+ struct ol_context *ol_ctx = data;
+ qdf_device_t qdf_dev = ol_ctx->qdf_dev;
-void ol_schedule_fw_indication_work(struct hif_opaque_softc *scn)
-{
- schedule_work(&fw_indication_work);
+ pld_device_self_recovery(qdf_dev->dev);
}
-#endif
void ol_target_failure(void *instance, QDF_STATUS status)
{
struct ol_context *ol_ctx = instance;
struct hif_opaque_softc *scn = ol_ctx->scn;
tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
-#ifdef CONFIG_CNSS
struct ol_config_info *ini_cfg = ol_get_ini_handle(ol_ctx);
int ret;
-#endif
enum hif_target_status target_status = hif_get_target_status(scn);
if (hif_get_bus_type(scn) == QDF_BUS_TYPE_SNOC) {
@@ -618,27 +611,23 @@ void ol_target_failure(void *instance, QDF_STATUS status)
}
cds_set_recovery_in_progress(true);
-#ifdef CONFIG_CNSS
ret = hif_check_fw_reg(scn);
if (0 == ret) {
if (ini_cfg->enable_self_recovery) {
- ol_schedule_fw_indication_work(scn);
+ qdf_sched_work(0, &ol_ctx->fw_indication_work);
return;
}
} else if (-1 == ret) {
return;
}
-#endif
BMI_ERR("XXX TARGET ASSERTED XXX");
-#if defined(CONFIG_CNSS)
/* Collect the RAM dump through a workqueue */
if (ini_cfg->enable_ramdump_collection)
qdf_sched_work(0, &ol_ctx->ramdump_work);
else
pr_debug("%s: athdiag read for target reg\n", __func__);
-#endif
return;
}
@@ -646,14 +635,13 @@ void ol_target_failure(void *instance, QDF_STATUS status)
QDF_STATUS ol_configure_target(struct ol_context *ol_ctx)
{
uint32_t param;
-#ifdef CONFIG_CNSS
- struct cnss_platform_cap cap;
+ struct pld_platform_cap cap;
int ret;
-#endif
struct hif_opaque_softc *scn = ol_ctx->scn;
struct hif_target_info *tgt_info = hif_get_target_info_handle(scn);
struct ol_config_info *ini_cfg = ol_get_ini_handle(ol_ctx);
uint32_t target_type = tgt_info->target_type;
+ qdf_device_t qdf_dev = ol_ctx->qdf_dev;
/* Tell target which HTC version it is used */
param = HTC_PROTOCOL_VERSION;
@@ -718,13 +706,11 @@ QDF_STATUS ol_configure_target(struct ol_context *ol_ctx)
}
#endif /* CONFIG_CDC_MAX_PERF_WAR */
-#ifdef CONFIG_CNSS
-
- ret = cnss_get_platform_cap(&cap);
+ ret = pld_get_platform_cap(qdf_dev->dev, &cap);
if (ret)
- BMI_ERR("platform capability info from CNSS not available");
+ BMI_ERR("platform capability info not available");
- if (!ret && cap.cap_flag & CNSS_HAS_EXTERNAL_SWREG) {
+ if (!ret && cap.cap_flag & PLD_HAS_EXTERNAL_SWREG) {
if (bmi_read_memory(hif_hia_item_address(target_type,
offsetof(struct host_interest_s, hi_option_flag2)),
(uint8_t *)&param, 4, ol_ctx) != QDF_STATUS_SUCCESS) {
@@ -742,7 +728,6 @@ QDF_STATUS ol_configure_target(struct ol_context *ol_ctx)
return QDF_STATUS_E_FAILURE;
}
}
-#endif
#ifdef WLAN_FEATURE_LPSS
if (ini_cfg->enable_lpass_support) {
@@ -1157,16 +1142,16 @@ end:
return status;
}
-#ifdef CONFIG_CNSS
/* AXI Start Address */
#define TARGET_ADDR (0xa0000)
void ol_transfer_codeswap_struct(struct ol_context *ol_ctx)
{
- struct codeswap_codeseg_info wlan_codeswap;
+ struct pld_codeswap_codeseg_info wlan_codeswap;
QDF_STATUS rv;
+ qdf_device_t qdf_dev = ol_ctx->qdf_dev;
- if (cnss_get_codeswap_struct(&wlan_codeswap)) {
+ if (pld_get_codeswap_struct(qdf_dev->dev, &wlan_codeswap)) {
BMI_ERR("%s: failed to get codeswap structure", __func__);
return;
}
@@ -1181,7 +1166,6 @@ void ol_transfer_codeswap_struct(struct ol_context *ol_ctx)
}
BMI_INFO("codeswap structure is successfully downloaded");
}
-#endif
QDF_STATUS ol_download_firmware(struct ol_context *ol_ctx)
{
@@ -1193,16 +1177,17 @@ QDF_STATUS ol_download_firmware(struct ol_context *ol_ctx)
struct ol_config_info *ini_cfg = ol_get_ini_handle(ol_ctx);
uint32_t target_type = tgt_info->target_type;
uint32_t target_version = tgt_info->target_version;
-#ifdef CONFIG_CNSS
struct bmi_info *bmi_ctx = GET_BMI_CONTEXT(ol_ctx);
+ qdf_device_t qdf_dev = ol_ctx->qdf_dev;
- if (0 != cnss_get_fw_files_for_target(&bmi_ctx->fw_files,
+ if (0 != pld_get_fw_files_for_target(qdf_dev->dev,
+ &bmi_ctx->fw_files,
target_type,
target_version)) {
- BMI_ERR("%s: No FW files from CNSS driver", __func__);
+ BMI_ERR("%s: No FW files from platform driver", __func__);
return QDF_STATUS_E_FAILURE;
}
-#endif
+
/* Transfer Board Data from Target EEPROM to Target RAM */
/* Determine where in Target RAM to write Board Data */
bmi_read_memory(hif_hia_item_address(target_type,
@@ -1256,9 +1241,8 @@ QDF_STATUS ol_download_firmware(struct ol_context *ol_ctx)
BMI_INFO("%s: Using 0x%x for the remainder of init",
__func__, address);
-#ifdef CONFIG_CNSS
ol_transfer_codeswap_struct(ol_ctx);
-#endif
+
status = ol_transfer_bin_file(ol_ctx, ATH_OTP_FILE,
address, true);
/* Execute the OTP code only if entry found and downloaded */
@@ -1396,7 +1380,6 @@ int ol_diag_read(struct hif_opaque_softc *scn, uint8_t *buffer,
return -EIO;
}
-#if defined(CONFIG_CNSS)
static int ol_ath_get_reg_table(uint32_t target_version,
tgt_reg_table *reg_table)
{
@@ -1431,10 +1414,7 @@ static int ol_ath_get_reg_table(uint32_t target_version,
return section_len;
}
-#endif
-
-#if defined(CONFIG_CNSS)
static int ol_diag_read_reg_loc(struct hif_opaque_softc *scn, uint8_t *buffer,
uint32_t buffer_len)
{
@@ -1500,7 +1480,6 @@ static int ol_diag_read_reg_loc(struct hif_opaque_softc *scn, uint8_t *buffer,
out:
return result;
}
-#endif
void ol_dump_target_memory(struct hif_opaque_softc *scn, void *memory_block)
{
@@ -1526,8 +1505,6 @@ void ol_dump_target_memory(struct hif_opaque_softc *scn, void *memory_block)
}
}
-
-#if defined(CONFIG_CNSS)
/**
* ol_target_coredump() - API to collect target ramdump
* @inst - private context
@@ -1614,7 +1591,6 @@ static int ol_target_coredump(void *inst, void *memory_block,
}
return ret;
}
-#endif
/**
* ol_get_ini_handle() - API to get Ol INI configuration