blob: dc4b95bc2f7fd1fb5179f1cfd7b30443ada0acf5 [file] [log] [blame]
/*
* Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* This file was originally distributed by Qualcomm Atheros, Inc.
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
/**========================================================================
\file wma.c
\brief Implementation of WMA
========================================================================*/
/**=========================================================================
EDIT HISTORY FOR FILE
This section contains comments describing changes made to the module.
Notice that changes are listed in reverse chronological order.
$Header:$ $DateTime: $ $Author: $
when who what, where, why
-------- --- -----------------------------------------
12/03/2013 Ganesh Implementation of wma function for initialization
Kondabattini
==========================================================================*/
#ifndef WMA_API_H
#define WMA_API_H
#include "osdep.h"
#include "vos_mq.h"
#include "aniGlobal.h"
#include "a_types.h"
#include "wmi_unified.h"
#include "wlan_hdd_tgt_cfg.h"
#ifdef NOT_YET
#include "htc_api.h"
#endif
#include "limGlobal.h"
typedef v_VOID_t* WMA_HANDLE;
typedef enum {
/* Set ampdu size */
GEN_VDEV_PARAM_AMPDU = 0x1,
/* Set amsdu size */
GEN_VDEV_PARAM_AMSDU,
GEN_PARAM_DUMP_AGC_START,
GEN_PARAM_DUMP_AGC,
GEN_PARAM_DUMP_CHANINFO_START,
GEN_PARAM_DUMP_CHANINFO,
GEN_PARAM_DUMP_WATCHDOG,
GEN_PARAM_CRASH_INJECT,
#ifdef CONFIG_ATH_PCIE_ACCESS_DEBUG
GEN_PARAM_DUMP_PCIE_ACCESS_LOG,
#endif
GEN_PARAM_MODULATED_DTIM,
GEN_PARAM_CAPTURE_TSF,
GEN_PARAM_RESET_TSF_GPIO,
GEN_PDEV_MONITOR_MODE,
} GEN_PARAM;
#define VDEV_CMD 1
#define PDEV_CMD 2
#define GEN_CMD 3
#define DBG_CMD 4
#define PPS_CMD 5
#define QPOWER_CMD 6
#define GTX_CMD 7
VOS_STATUS wma_pre_start(v_VOID_t *vos_context);
VOS_STATUS wma_mc_process_msg( v_VOID_t *vos_context, vos_msg_t *msg );
VOS_STATUS wma_start(v_VOID_t *vos_context);
VOS_STATUS wma_stop(v_VOID_t *vos_context, tANI_U8 reason);
VOS_STATUS wma_close(v_VOID_t *vos_context);
VOS_STATUS wma_wmi_service_close(v_VOID_t *vos_context);
VOS_STATUS wma_wmi_work_close(v_VOID_t *vos_context);
v_VOID_t wma_rx_ready_event(WMA_HANDLE handle, v_VOID_t *ev);
v_VOID_t wma_rx_service_ready_event(WMA_HANDLE handle,
v_VOID_t *ev);
v_VOID_t wma_setneedshutdown(v_VOID_t *vos_context);
v_BOOL_t wma_needshutdown(v_VOID_t *vos_context);
VOS_STATUS wma_wait_for_ready_event(WMA_HANDLE handle);
tANI_U8 wma_map_channel(tANI_U8 mapChannel);
int wma_cli_get_command(void *wmapvosContext, int vdev_id,
int param_id, int vpdev);
eHalStatus wma_set_htconfig(tANI_U8 vdev_id, tANI_U16 ht_capab, int value);
eHalStatus WMA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
tAniBool sendRegHint);
VOS_STATUS WMA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx, tANI_U8 *pVersion,
tANI_U32 versionBufferSize);
int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr);
void wma_target_suspend_acknowledge(void *context);
int wma_resume_target(WMA_HANDLE handle, int);
int wma_disable_wow_in_fw(WMA_HANDLE handle, int);
int wma_is_wow_mode_selected(WMA_HANDLE handle);
int wma_enable_wow_in_fw(WMA_HANDLE handle, int);
bool wma_check_scan_in_progress(WMA_HANDLE handle);
#ifdef FEATURE_RUNTIME_PM
int wma_runtime_suspend_req(WMA_HANDLE handle);
int wma_runtime_resume_req(WMA_HANDLE handle);
#endif
int wma_get_client_count(WMA_HANDLE handle);
int wma_set_peer_param(void *wma_ctx, u_int8_t *peer_addr, u_int32_t param_id,
u_int32_t param_value, u_int32_t vdev_id);
#ifdef NOT_YET
VOS_STATUS wma_update_channel_list(WMA_HANDLE handle, void *scan_chan_info);
#endif
u_int8_t *wma_get_vdev_address_by_vdev_id(u_int8_t vdev_id);
void *wma_get_beacon_buffer_by_vdev_id(u_int8_t vdev_id,
u_int32_t *buffer_size);
int process_wma_set_command(int sessid, int paramid,
int sval, int vpdev);
tANI_U8 wma_getFwWlanFeatCaps(tANI_U8 featEnumValue);
VOS_STATUS wma_set_cts2self_for_p2p_go(void *wda_handle,
u_int32_t cts2self_for_p2p_go);
VOS_STATUS wma_set_mib_stats_enable(void *wda_handle, u_int32_t enable);
#ifdef FEATURE_GREEN_AP
void wma_setup_egap_support(struct hdd_tgt_cfg *tgt_cfg, WMA_HANDLE handle);
void wma_register_egap_event_handle(WMA_HANDLE handle);
VOS_STATUS wma_send_egap_conf_params(WMA_HANDLE handle,
struct egap_conf_params *egap_params);
#else
static inline void wma_setup_egap_support(struct hdd_tgt_cfg *tgt_cfg,
WMA_HANDLE handle) {}
static inline void wma_register_egap_event_handle(WMA_HANDLE handle) {}
static inline VOS_STATUS wma_send_egap_conf_params(WMA_HANDLE handle,
struct egap_conf_params *egap_params)
{
return VOS_STATUS_E_NOSUPPORT;
}
#endif
extern int wma_scpc_event_handler(void *handle, u_int8_t *event, u_int32_t len);
VOS_STATUS wma_set_tx_power_scale(uint8_t vdev_id, int value);
VOS_STATUS wma_set_tx_power_scale_decr_db(uint8_t vdev_id, int value);
void wma_tx_failure_cb(void *ctx, uint32_t num_msdu,
uint8_t tid, uint32_t status);
VOS_STATUS wma_set_ac_txq_optimize(void *wda_handle, uint8_t *value);
#endif