mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 00:24:41 -04:00
qcacmn: Merge remote-tracking branch 'origin/wlan-cmn.driver.lnx.1.0-dev' into wlan-cmn.driver.lnx.2.0-dev
Fast-forwarding wlan-cmn.driver.lnx.2.0-dev to the tip of wlan-cmn.driver.lnx.1.0-dev which has driver version 5.1.0.23K * origin/wlan-cmn.driver.lnx.1.0-dev: Release 5.1.0.23K qcacmn: Add APIs to get lower 32 and upper 32 bits Release 5.1.0.23J qcacmn: Fix index recording for FAST_TX_SOFTWARE_INDEX_UPDATE qcacmn: Double CE2 resources on host and firmware Release 5.1.0.23I qcacmn: Modify LFR3 firmware OKC flag Release 5.1.0.23H qcacmn: Add fwtest interface Release 5.1.0.23G qcacmn: Added a member in qca_napi_info structure Release 5.1.0.23F qcacmn: fake apps ensures correct ce_id before resume Release 5.1.0.23E qcacmn: Support for wifidown and wifiup without modules removal Release 5.1.0.23D
This commit is contained in:
commit
e1257fb4b4
16 changed files with 206 additions and 35 deletions
|
|
@ -1,2 +1,2 @@
|
|||
Current Component wlan-cmn.driver.lnx.1.0 version 5.1.0.23C
|
||||
Current Component wlan-cmn.driver.lnx.1.0 version 5.1.0.23K
|
||||
Matches Component wlan-cld3.driver.lnx.1.1 version 5.1.0.22C
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ struct qca_napi_stat {
|
|||
*/
|
||||
struct qca_napi_info {
|
||||
struct net_device netdev; /* dummy net_dev */
|
||||
void *hif_ctx;
|
||||
struct napi_struct napi; /* one NAPI Instance per CE in phase I */
|
||||
uint8_t scale; /* currently same on all instances */
|
||||
uint8_t id;
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ static struct CE_attr host_ce_config_wlan[] = {
|
|||
/* target->host HTT + HTC control */
|
||||
{ /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,},
|
||||
/* target->host WMI */
|
||||
{ /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 32, NULL,},
|
||||
{ /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 64, NULL,},
|
||||
/* host->target WMI */
|
||||
{ /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,},
|
||||
/* host->target HTT */
|
||||
|
|
@ -121,7 +121,7 @@ static struct CE_pipe_config target_ce_config_wlan[] = {
|
|||
/* target->host HTT */
|
||||
{ /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,},
|
||||
/* target->host WMI + HTC control */
|
||||
{ /* CE2 */ 2, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,},
|
||||
{ /* CE2 */ 2, PIPEDIR_IN, 64, 2048, CE_ATTR_FLAGS, 0,},
|
||||
/* host->target WMI */
|
||||
{ /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,},
|
||||
/* host->target HTT */
|
||||
|
|
|
|||
|
|
@ -576,7 +576,7 @@ int ce_send_fast(struct CE_handle *copyeng, qdf_nbuf_t msdu,
|
|||
|
||||
hif_record_ce_desc_event(scn, ce_state->id,
|
||||
FAST_TX_SOFTWARE_INDEX_UPDATE,
|
||||
NULL, NULL, write_index);
|
||||
NULL, NULL, sw_index);
|
||||
|
||||
if (qdf_unlikely(CE_RING_DELTA(nentries_mask, write_index, sw_index - 1)
|
||||
< SLOTS_PER_DATAPATH_TX)) {
|
||||
|
|
|
|||
|
|
@ -271,11 +271,11 @@ int hif_drain_tasklets(struct hif_softc *scn)
|
|||
|
||||
#ifdef WLAN_SUSPEND_RESUME_TEST
|
||||
static bool g_hif_apps_fake_suspended;
|
||||
static hdd_fake_resume_callback hdd_fake_aps_resume;
|
||||
static hdd_fake_resume_callback hdd_fake_apps_resume;
|
||||
|
||||
static void hif_wlan_resume_work_handler(struct work_struct *work)
|
||||
{
|
||||
hdd_fake_aps_resume(0);
|
||||
hdd_fake_apps_resume(0);
|
||||
}
|
||||
|
||||
static DECLARE_WORK(hif_resume_work, hif_wlan_resume_work_handler);
|
||||
|
|
@ -284,41 +284,66 @@ static DECLARE_WORK(hif_resume_work, hif_wlan_resume_work_handler);
|
|||
* hif_fake_apps_suspend(): Suspend WLAN
|
||||
*
|
||||
* Set the fake suspend flag such that hif knows that it will need
|
||||
* to fake the aps resume process using the hdd_fake_aps_resume
|
||||
* to fake the apps resume process using the hdd_fake_apps_resume
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void hif_fake_apps_suspend(hdd_fake_resume_callback callback)
|
||||
{
|
||||
hdd_fake_aps_resume = callback;
|
||||
hdd_fake_apps_resume = callback;
|
||||
g_hif_apps_fake_suspended = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* hif_fake_aps_resume(): check if WLAN resume is needed
|
||||
* hif_fake_apps_resume(): trigger WLAN resume if needed
|
||||
* @fid_hdl: hif context
|
||||
* @ce_id: copy engine Id
|
||||
*
|
||||
* Return: true if a fake apps resume has been been triggered
|
||||
* returns false if regular interrupt processing is needed
|
||||
* Return: True if a fake apps resume has been been triggered,
|
||||
* returns false if regular interrupt processing is needed.
|
||||
* Ensures copy engine Id matches mapped Irq
|
||||
*/
|
||||
static bool hif_fake_aps_resume(void)
|
||||
static bool hif_fake_apps_resume(struct hif_opaque_softc *hif_hdl, int ce_id)
|
||||
{
|
||||
if (g_hif_apps_fake_suspended) {
|
||||
g_hif_apps_fake_suspended = false;
|
||||
schedule_work(&hif_resume_work);
|
||||
return true;
|
||||
} else {
|
||||
uint8_t ul_pipe, dl_pipe;
|
||||
int ul_is_polled, dl_is_polled;
|
||||
QDF_STATUS status;
|
||||
|
||||
/* can't resume if not already suspended */
|
||||
if (!g_hif_apps_fake_suspended)
|
||||
return false;
|
||||
|
||||
/* ensure passed copy engine Id matches Id from irq map */
|
||||
|
||||
status = hif_map_service_to_pipe(hif_hdl, HTC_CTRL_RSVD_SVC,
|
||||
&ul_pipe, &dl_pipe,
|
||||
&ul_is_polled, &dl_is_polled);
|
||||
|
||||
if (status) {
|
||||
HIF_ERROR("%s: pipe_mapping failure", __func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* dl_pipe is equivalent to a copy engine Id at this point */
|
||||
if (ce_id != dl_pipe)
|
||||
return false;
|
||||
|
||||
/* trigger fake apps resume */
|
||||
g_hif_apps_fake_suspended = false;
|
||||
schedule_work(&hif_resume_work);
|
||||
return true;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/**
|
||||
* hif_fake_aps_resume(): check if WLAN resume is needed
|
||||
* hif_fake_apps_resume(): trigger WLAN resume if needed
|
||||
* @hif_hdl: hif context
|
||||
* @ce_id: copy engine Id
|
||||
*
|
||||
* Return: always false if WLAN_SUSPEND_RESUME_TEST is not defined
|
||||
*/
|
||||
static bool hif_fake_aps_resume(void)
|
||||
static bool hif_fake_apps_resume(struct hif_opaque_softc *hif_hdl, int ce_id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -426,7 +451,7 @@ irqreturn_t ce_dispatch_interrupt(int ce_id,
|
|||
hif_record_ce_desc_event(scn, ce_id, HIF_IRQ_EVENT, NULL, NULL, 0);
|
||||
hif_ce_increment_interrupt_count(hif_ce_state, ce_id);
|
||||
|
||||
if (unlikely(hif_fake_aps_resume())) {
|
||||
if (unlikely(hif_fake_apps_resume(hif_hdl, ce_id))) {
|
||||
HIF_ERROR("received resume interrupt");
|
||||
hif_irq_enable(scn, ce_id);
|
||||
return IRQ_HANDLED;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ void hif_ahb_close(struct hif_softc *hif_ctx);
|
|||
|
||||
void hif_ahb_disable_isr(struct hif_softc *hif_ctx);
|
||||
void hif_ahb_nointrs(struct hif_softc *scn);
|
||||
void hif_ahb_reset_soc(struct hif_softc *hif_ctx);
|
||||
QDF_STATUS hif_ahb_enable_bus(struct hif_softc *ol_sc,
|
||||
struct device *dev, void *bdev,
|
||||
const hif_bus_id *bid,
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ QDF_STATUS hif_initialize_ahb_ops(struct hif_bus_ops *bus_ops)
|
|||
bus_ops->hif_bus_open = &hif_ahb_open;
|
||||
bus_ops->hif_bus_close = &hif_ahb_close;
|
||||
bus_ops->hif_bus_prevent_linkdown = &hif_dummy_bus_prevent_linkdown;
|
||||
bus_ops->hif_reset_soc = &hif_dummy_reset_soc;
|
||||
bus_ops->hif_reset_soc = &hif_ahb_reset_soc;
|
||||
bus_ops->hif_bus_suspend = &hif_dummy_bus_suspend;
|
||||
bus_ops->hif_bus_resume = &hif_dummy_bus_resume;
|
||||
bus_ops->hif_target_sleep_state_adjust =
|
||||
|
|
|
|||
|
|
@ -31,8 +31,6 @@
|
|||
* HIF NAPI interface implementation
|
||||
*/
|
||||
|
||||
#include <string.h> /* memset */
|
||||
|
||||
#include <hif_napi.h>
|
||||
#include <hif_debug.h>
|
||||
#include <hif_io32.h>
|
||||
|
|
@ -96,7 +94,7 @@ int hif_napi_create(struct hif_opaque_softc *hif_ctx,
|
|||
}
|
||||
for (i = 0; i < hif->ce_count; i++) {
|
||||
ce_state = hif->ce_id_to_state[i];
|
||||
NAPI_DEBUG("ce %d: htt_rx=%d htt_rx=%d",
|
||||
NAPI_DEBUG("ce %d: htt_rx=%d htt_tx=%d",
|
||||
i, ce_state->htt_rx_data,
|
||||
ce_state->htt_tx_data);
|
||||
if (!ce_state->htt_rx_data)
|
||||
|
|
@ -109,6 +107,7 @@ int hif_napi_create(struct hif_opaque_softc *hif_ctx,
|
|||
memset(napii, 0, sizeof(struct qca_napi_info));
|
||||
napii->scale = scale;
|
||||
napii->id = NAPI_PIPE2ID(i);
|
||||
napii->hif_ctx = hif_ctx;
|
||||
init_dummy_netdev(&(napii->netdev));
|
||||
|
||||
NAPI_DEBUG("adding napi=%p to netdev=%p (poll=%p, bdgt=%d)",
|
||||
|
|
|
|||
|
|
@ -233,15 +233,29 @@ void hif_ahb_disable_bus(struct hif_softc *scn)
|
|||
struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(scn);
|
||||
void __iomem *mem;
|
||||
struct platform_device *pdev = (struct platform_device *)sc->pdev;
|
||||
struct resource *memres = NULL;
|
||||
int mem_pa_size = 0;
|
||||
|
||||
/*Disable WIFI clock input*/
|
||||
hif_ahb_clk_enable_disable(&pdev->dev, 0);
|
||||
if (sc->mem) {
|
||||
memres = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!memres) {
|
||||
HIF_INFO("%s: Failed to get IORESOURCE_MEM\n",
|
||||
__func__);
|
||||
return;
|
||||
}
|
||||
mem_pa_size = memres->end - memres->start + 1;
|
||||
|
||||
hif_ahb_device_reset(scn);
|
||||
mem = (void __iomem *)sc->mem;
|
||||
if (mem) {
|
||||
devm_iounmap(&pdev->dev, mem);
|
||||
sc->mem = NULL;
|
||||
hif_ahb_clk_enable_disable(&pdev->dev, 0);
|
||||
|
||||
hif_ahb_device_reset(scn);
|
||||
mem = (void __iomem *)sc->mem;
|
||||
if (mem) {
|
||||
devm_iounmap(&pdev->dev, mem);
|
||||
devm_release_mem_region(&pdev->dev, scn->mem_pa,
|
||||
mem_pa_size);
|
||||
sc->mem = NULL;
|
||||
}
|
||||
}
|
||||
scn->mem = NULL;
|
||||
}
|
||||
|
|
@ -324,6 +338,7 @@ QDF_STATUS hif_ahb_enable_bus(struct hif_softc *ol_sc,
|
|||
sc->mem = mem;
|
||||
ol_sc->mem = mem;
|
||||
ol_sc->mem_pa = memres->start;
|
||||
|
||||
tgt_info = hif_get_target_info_handle((struct hif_opaque_softc *)ol_sc);
|
||||
|
||||
tgt_info->target_type = target_type;
|
||||
|
|
@ -362,10 +377,9 @@ err_cleanup1:
|
|||
* Return: void
|
||||
*/
|
||||
/* Function to reset SoC */
|
||||
void hif_ahb_reset_soc(struct hif_opaque_softc *hif_ctx)
|
||||
void hif_ahb_reset_soc(struct hif_softc *hif_ctx)
|
||||
{
|
||||
struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(hif_ctx);
|
||||
hif_ahb_device_reset((struct hif_softc *)sc);
|
||||
hif_ahb_device_reset(hif_ctx);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -439,4 +439,32 @@ uint64_t qdf_get_totalramsize(void)
|
|||
return __qdf_get_totalramsize();
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_get_lower_32_bits() - get lower 32 bits from an address.
|
||||
* @addr: address
|
||||
*
|
||||
* This api returns the lower 32 bits of an address.
|
||||
*
|
||||
* Return: lower 32 bits.
|
||||
*/
|
||||
static inline
|
||||
uint32_t qdf_get_lower_32_bits(qdf_dma_addr_t addr)
|
||||
{
|
||||
return __qdf_get_lower_32_bits(addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_get_upper_32_bits() - get upper 32 bits from an address.
|
||||
* @addr: address
|
||||
*
|
||||
* This api returns the upper 32 bits of an address.
|
||||
*
|
||||
* Return: upper 32 bits.
|
||||
*/
|
||||
static inline
|
||||
uint32_t qdf_get_upper_32_bits(qdf_dma_addr_t addr)
|
||||
{
|
||||
return __qdf_get_upper_32_bits(addr);
|
||||
}
|
||||
|
||||
#endif /*_QDF_UTIL_H*/
|
||||
|
|
|
|||
|
|
@ -292,4 +292,33 @@ __qdf_get_totalramsize(void)
|
|||
return MEMINFO_KB(meminfo.totalram);
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_get_lower_32_bits() - get lower 32 bits from an address.
|
||||
* @addr: address
|
||||
*
|
||||
* This api returns the lower 32 bits of an address.
|
||||
*
|
||||
* Return: lower 32 bits.
|
||||
*/
|
||||
static inline
|
||||
uint32_t __qdf_get_lower_32_bits(__qdf_dma_addr_t addr)
|
||||
{
|
||||
return lower_32_bits(addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_get_upper_32_bits() - get upper 32 bits from an address.
|
||||
* @addr: address
|
||||
*
|
||||
* This api returns the upper 32 bits of an address.
|
||||
*
|
||||
* Return: upper 32 bits.
|
||||
*/
|
||||
static inline
|
||||
uint32_t __qdf_get_upper_32_bits(__qdf_dma_addr_t addr)
|
||||
{
|
||||
return upper_32_bits(addr);
|
||||
}
|
||||
|
||||
|
||||
#endif /*_I_QDF_UTIL_H*/
|
||||
|
|
|
|||
|
|
@ -1258,4 +1258,7 @@ QDF_STATUS wmi_unified_send_power_dbg_cmd(void *wmi_hdl,
|
|||
QDF_STATUS wmi_unified_send_adapt_dwelltime_params_cmd(void *wmi_hdl,
|
||||
struct wmi_adaptive_dwelltime_params *
|
||||
wmi_param);
|
||||
QDF_STATUS wmi_unified_fw_test_cmd(void *wmi_hdl,
|
||||
struct set_fwtest_params *wmi_fwtest);
|
||||
|
||||
#endif /* _WMI_UNIFIED_API_H_ */
|
||||
|
|
|
|||
|
|
@ -1693,6 +1693,7 @@ typedef struct {
|
|||
* @rokh_id: r0kh id
|
||||
* @roam_key_mgmt_offload_enabled: roam offload flag
|
||||
* @auth_mode: authentication mode
|
||||
* @okc_enabled: enable opportunistic key caching
|
||||
* @is_ese_assoc: flag to determine ese assoc
|
||||
* @mdid: mobility domain info
|
||||
* @roam_offload_params: roam offload tlv params
|
||||
|
|
@ -1715,6 +1716,7 @@ struct roam_offload_scan_params {
|
|||
uint8_t rokh_id[WMI_ROAM_R0KH_ID_MAX_LEN];
|
||||
uint8_t roam_key_mgmt_offload_enabled;
|
||||
int auth_mode;
|
||||
bool okc_enabled;
|
||||
#endif
|
||||
bool is_ese_assoc;
|
||||
struct mobility_domain_info mdid;
|
||||
|
|
|
|||
|
|
@ -676,7 +676,7 @@ QDF_STATUS (*send_process_roam_synch_complete_cmd)(wmi_unified_t wmi_handle,
|
|||
uint8_t vdev_id);
|
||||
|
||||
QDF_STATUS (*send_unit_test_cmd)(wmi_unified_t wmi_handle,
|
||||
struct wmi_unit_test_cmd *wmi_utest);
|
||||
struct wmi_unit_test_cmd *wmi_utest);
|
||||
|
||||
QDF_STATUS (*send_roam_invoke_cmd)(wmi_unified_t wmi_handle,
|
||||
struct wmi_roam_invoke_cmd *roaminvoke,
|
||||
|
|
@ -1124,6 +1124,9 @@ QDF_STATUS (*send_power_dbg_cmd)(wmi_unified_t wmi_handle,
|
|||
|
||||
QDF_STATUS (*send_adapt_dwelltime_params_cmd)(wmi_unified_t wmi_handle,
|
||||
struct wmi_adaptive_dwelltime_params *dwelltime_params);
|
||||
|
||||
QDF_STATUS (*send_fw_test_cmd)(wmi_unified_t wmi_handle,
|
||||
struct set_fwtest_params *wmi_fwtest);
|
||||
};
|
||||
|
||||
struct target_abi_version {
|
||||
|
|
|
|||
|
|
@ -3233,6 +3233,28 @@ QDF_STATUS wmi_unified_roam_synch_complete_cmd(void *wmi_hdl,
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/**
|
||||
* wmi_unified_fw_test_cmd() - send fw test command to fw.
|
||||
* @wmi_hdl: wmi handle
|
||||
* @wmi_fwtest: fw test command
|
||||
*
|
||||
* This function sends fw test command to fw.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
|
||||
*/
|
||||
QDF_STATUS wmi_unified_fw_test_cmd(void *wmi_hdl,
|
||||
struct set_fwtest_params *wmi_fwtest)
|
||||
{
|
||||
wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
|
||||
|
||||
if (wmi_handle->ops->send_fw_test_cmd)
|
||||
return wmi_handle->ops->send_fw_test_cmd(wmi_handle,
|
||||
wmi_fwtest);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* wmi_unified_unit_test_cmd() - send unit test command to fw.
|
||||
* @wmi_hdl: wmi handle
|
||||
|
|
|
|||
|
|
@ -4282,7 +4282,8 @@ QDF_STATUS send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle,
|
|||
buf_ptr += WMI_TLV_HDR_SIZE;
|
||||
roam_offload_11i =
|
||||
(wmi_roam_11i_offload_tlv_param *) buf_ptr;
|
||||
if (roam_req->roam_key_mgmt_offload_enabled) {
|
||||
if (roam_req->roam_key_mgmt_offload_enabled &&
|
||||
roam_req->okc_enabled) {
|
||||
WMI_SET_ROAM_OFFLOAD_OKC_ENABLED
|
||||
(roam_offload_11i->flags);
|
||||
WMI_LOGE("LFR3:OKC Enabled");
|
||||
|
|
@ -10104,6 +10105,48 @@ QDF_STATUS send_process_roam_synch_complete_cmd_tlv(wmi_unified_t wmi_handle,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* send_fw_test_cmd_tlv() - send fw test command to fw.
|
||||
* @wmi_handle: wmi handle
|
||||
* @wmi_fwtest: fw test command
|
||||
*
|
||||
* This function sends fw test command to fw.
|
||||
*
|
||||
* Return: CDF STATUS
|
||||
*/
|
||||
QDF_STATUS send_fw_test_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
struct set_fwtest_params *wmi_fwtest)
|
||||
{
|
||||
wmi_fwtest_set_param_cmd_fixed_param *cmd;
|
||||
wmi_buf_t wmi_buf;
|
||||
uint16_t len;
|
||||
|
||||
len = sizeof(*cmd);
|
||||
|
||||
wmi_buf = wmi_buf_alloc(wmi_handle, len);
|
||||
if (!wmi_buf) {
|
||||
WMI_LOGE("%s: wmai_buf_alloc failed", __func__);
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
cmd = (wmi_fwtest_set_param_cmd_fixed_param *) wmi_buf_data(wmi_buf);
|
||||
WMITLV_SET_HDR(&cmd->tlv_header,
|
||||
WMITLV_TAG_STRUC_wmi_fwtest_set_param_cmd_fixed_param,
|
||||
WMITLV_GET_STRUCT_TLVLEN(
|
||||
wmi_fwtest_set_param_cmd_fixed_param));
|
||||
cmd->param_id = wmi_fwtest->arg;
|
||||
cmd->param_value = wmi_fwtest->value;
|
||||
|
||||
if (wmi_unified_cmd_send(wmi_handle, wmi_buf, len,
|
||||
WMI_FWTEST_CMDID)) {
|
||||
WMI_LOGP("%s: failed to send fw test command", __func__);
|
||||
qdf_nbuf_free(wmi_buf);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* send_unit_test_cmd_tlv() - send unit test command to fw.
|
||||
* @wmi_handle: wmi handle
|
||||
|
|
@ -12095,6 +12138,7 @@ struct wmi_ops tlv_ops = {
|
|||
.extract_profile_data = extract_profile_data_tlv,
|
||||
.extract_chan_info_event = extract_chan_info_event_tlv,
|
||||
.extract_channel_hopping_event = extract_channel_hopping_event_tlv,
|
||||
.send_fw_test_cmd = send_fw_test_cmd_tlv,
|
||||
};
|
||||
|
||||
#ifdef WMI_TLV_AND_NON_TLV_SUPPORT
|
||||
|
|
|
|||
Loading…
Reference in a new issue