qcacmn: Greenap componentization follow up patch

Greenap APIs and calls

Change-Id: I1242db788155f68dd91b72b94a48f78869eb835f
CRs-Fixed: 2142183
Dieser Commit ist enthalten in:
Soumya Bhat
2017-12-28 21:33:17 +05:30
committet von snandini
Ursprung a00b71b980
Commit 108f090a00
14 geänderte Dateien mit 455 neuen und 11 gelöschten Zeilen

Datei anzeigen

@@ -30,6 +30,10 @@ ifeq ($(WLAN_CONV_CRYPTO_SUPPORTED), 1)
INCS += -I$(obj)/$(DEPTH)/cmn_dev/umac/cmn_services/crypto/inc
endif
ifeq ($(WLAN_SUPPORT_GREEN_AP), 1)
INCS += -I$(obj)/$(DEPTH)/cmn_dev/umac/green_ap/dispatcher/inc
endif
#Start of offload related deifines
HOST_CMN_CONVG_SRC := $(DEPTH)/cmn_dev
HOST_CMN_CONVG_HIF_SRC := $(DEPTH)/cmn_dev/hif/src

Datei anzeigen

@@ -58,4 +58,30 @@ QDF_STATUS target_if_green_ap_enable_egap(
*/
QDF_STATUS target_if_green_ap_set_ps_on_off(struct wlan_objmgr_pdev *pdev,
bool value, uint8_t pdev_id);
/**
* target_if_green_ap_get_current_channel() - Get current channel
* @pdev: pdev pointer
*
* @Return: current channel freq
*/
uint16_t target_if_green_ap_get_current_channel(struct wlan_objmgr_pdev *pdev);
/**
* target_if_green_ap_get_current_channel_flags() - Get current channel flags
* @pdev: pdev pointer
*
* @Return: current channel flags
*/
uint64_t target_if_green_ap_get_current_channel_flags(
struct wlan_objmgr_pdev *pdev);
/**
* target_if_green_ap_reset_dev() - Reset dev
* @pdev: pdev pointer
*
* @Return: QDF_STATUS_SUCCESS if device resetted
*/
QDF_STATUS target_if_green_ap_reset_dev(struct wlan_objmgr_pdev *pdev);
#endif

Datei anzeigen

@@ -40,6 +40,10 @@ QDF_STATUS target_if_register_green_ap_tx_ops(
green_ap_tx_ops->enable_egap = target_if_green_ap_enable_egap;
green_ap_tx_ops->ps_on_off_send = target_if_green_ap_set_ps_on_off;
green_ap_tx_ops->reset_dev = NULL;
green_ap_tx_ops->get_current_channel = NULL;
green_ap_tx_ops->get_current_channel_flags = NULL;
green_ap_tx_ops->get_capab = NULL;
return QDF_STATUS_SUCCESS;
}

Datei anzeigen

@@ -158,4 +158,13 @@ struct wlan_objmgr_vdev *wlan_util_get_vdev_by_ifname(
* @id: vdev's interface name
*/
uint8_t *wlan_util_vdev_get_if_name(struct wlan_objmgr_vdev *vdev);
/*
* wlan_util_is_vap_active() - Check for vap active
* @pdev: pdev pointer
*
* @Return: QDF_STATUS_SUCCESS in case of vap active
*/
QDF_STATUS wlan_util_is_vap_active(struct wlan_objmgr_pdev *pdev);
#endif /* _WLAN_UTILITY_H_ */

Datei anzeigen

@@ -237,3 +237,36 @@ uint8_t *wlan_util_vdev_get_if_name(struct wlan_objmgr_vdev *vdev)
return name;
}
EXPORT_SYMBOL(wlan_util_vdev_get_if_name);
static void wlan_vap_active(struct wlan_objmgr_pdev *pdev,
void *object,
void *arg)
{
struct wlan_objmgr_vdev *vdev = (struct wlan_objmgr_vdev *)object;
uint8_t *flag = (uint8_t *)arg;
wlan_vdev_obj_lock(vdev);
if ((wlan_vdev_mlme_get_state(vdev) == WLAN_VDEV_S_RUN) ||
(wlan_vdev_mlme_get_state(vdev) == WLAN_VDEV_S_DFS_WAIT)) {
*flag = 1;
}
wlan_vdev_obj_unlock(vdev);
}
QDF_STATUS wlan_util_is_vap_active(struct wlan_objmgr_pdev *pdev)
{
uint8_t flag = 0;
if (!pdev)
return QDF_STATUS_E_INVAL;
wlan_objmgr_pdev_iterate_obj_list(pdev,
WLAN_VDEV_OP,
wlan_vap_active,
&flag, 0, WLAN_OBJMGR_ID);
if (flag == 1)
return QDF_STATUS_SUCCESS;
return QDF_STATUS_E_INVAL;
}

Datei anzeigen

@@ -101,6 +101,25 @@ wlan_lmac_if_get_reg_rx_ops(struct wlan_objmgr_psoc *psoc)
return &psoc->soc_cb.rx_ops.reg_rx_ops;
}
#ifdef WLAN_SUPPORT_GREEN_AP
/**
* wlan_lmac_if_get_green_ap_rx_ops() - retrieve the green ap rx_ops
* @psoc: psoc context
*
* API to retrieve the dfs rx_ops from the psoc context
*
* Return: green_ap_rx_ops pointer
*/
static inline struct wlan_lmac_if_green_ap_rx_ops *
wlan_lmac_if_get_green_ap_rx_ops(struct wlan_objmgr_psoc *psoc)
{
if (!psoc)
return NULL;
return &psoc->soc_cb.rx_ops.green_ap_rx_ops;
}
#endif
/**
* mgmt_txrx_get_nbuf() - retrieve nbuf from mgmt desc_id
* @pdev: pdev context

Datei anzeigen

@@ -552,6 +552,10 @@ struct wlan_lmac_if_green_ap_tx_ops {
struct wlan_green_ap_egap_params *egap_params);
QDF_STATUS (*ps_on_off_send)(struct wlan_objmgr_pdev *pdev,
bool value, uint8_t pdev_id);
QDF_STATUS (*reset_dev)(struct wlan_objmgr_pdev *pdev);
uint16_t (*get_current_channel)(struct wlan_objmgr_pdev *pdev);
uint64_t (*get_current_channel_flags)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*get_capab)(struct wlan_objmgr_pdev *pdev);
};
#endif
@@ -997,6 +1001,17 @@ struct wlan_lmac_if_mlme_rx_ops {
uint8_t vdev_id);
void (*wlan_mlme_end_scan)(struct wlan_objmgr_pdev *pdev);
};
#ifdef WLAN_SUPPORT_GREEN_AP
struct wlan_lmac_if_green_ap_rx_ops {
bool (*is_ps_enabled)(struct wlan_objmgr_pdev *pdev);
bool (*is_dbg_print_enabled)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*ps_get)(struct wlan_objmgr_pdev *pdev, uint8_t *value);
QDF_STATUS (*ps_set)(struct wlan_objmgr_pdev *pdev, uint8_t value);
void (*suspend_handle)(struct wlan_objmgr_pdev *pdev);
};
#endif
/**
* struct wlan_lmac_if_rx_ops - south bound rx function pointers
* @mgmt_txrx_tx_ops: mgmt txrx rx ops
@@ -1044,6 +1059,9 @@ struct wlan_lmac_if_rx_ops {
struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops;
#endif
struct wlan_lmac_if_mlme_rx_ops mops;
#ifdef WLAN_SUPPORT_GREEN_AP
struct wlan_lmac_if_green_ap_rx_ops green_ap_rx_ops;
#endif
};
/* Function pointer to call legacy tx_ops registration in OL/WMA.

Datei anzeigen

@@ -50,6 +50,10 @@
#include <wlan_dfs_tgt_api.h>
#include <wlan_dfs_utils_api.h>
#endif
#ifdef WLAN_SUPPORT_GREEN_AP
#include <wlan_green_ap_api.h>
#include <wlan_green_ap_ucfg_api.h>
#endif
/* Function pointer for OL/WMA specific UMAC tx_ops
* registration.
@@ -286,6 +290,27 @@ wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
}
#endif
#ifdef WLAN_SUPPORT_GREEN_AP
static QDF_STATUS
wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
{
rx_ops->green_ap_rx_ops.is_ps_enabled = wlan_green_ap_is_ps_enabled;
rx_ops->green_ap_rx_ops.is_dbg_print_enabled =
ucfg_green_ap_get_debug_prints;
rx_ops->green_ap_rx_ops.ps_set = ucfg_green_ap_set_ps_config;
rx_ops->green_ap_rx_ops.ps_get = ucfg_green_ap_get_ps_config;
rx_ops->green_ap_rx_ops.suspend_handle = wlan_green_ap_suspend_handle;
return QDF_STATUS_SUCCESS;
}
#else
static QDF_STATUS
wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
{
return QDF_STATUS_SUCCESS;
}
#endif
/**
* wlan_lmac_if_umac_rx_ops_register() - UMAC rx handler register
* @rx_ops: Pointer to rx_ops structure to be populated
@@ -349,6 +374,8 @@ wlan_lmac_if_umac_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
/* DFS rx_ops */
wlan_lmac_if_umac_dfs_rx_ops_register(rx_ops);
wlan_lmac_if_umac_green_ap_rx_ops_register(rx_ops);
return QDF_STATUS_SUCCESS;
}

Datei anzeigen

@@ -22,6 +22,48 @@
#include "wlan_green_ap_main_i.h"
/*
* wlan_green_ap_ant_ps_reset() - Reset function
* @green_ap - green ap context
*
* Reset fiunction, so that Antenna Mask can come into effect.
* This applies for only few of the hardware chips
*
* Return: QDF_STATUS
*/
static QDF_STATUS wlan_green_ap_ant_ps_reset
(struct wlan_pdev_green_ap_ctx *green_ap_ctx)
{
struct wlan_lmac_if_green_ap_tx_ops *green_ap_tx_ops;
struct wlan_objmgr_pdev *pdev;
if (!green_ap_ctx) {
green_ap_err("green ap context obtained is NULL");
return QDF_STATUS_E_FAILURE;
}
pdev = green_ap_ctx->pdev;
green_ap_tx_ops = wlan_psoc_get_green_ap_tx_ops(green_ap_ctx);
if (!green_ap_tx_ops) {
green_ap_err("green ap tx ops obtained are NULL");
return QDF_STATUS_E_FAILURE;
}
if (!green_ap_tx_ops->reset_dev)
return QDF_STATUS_SUCCESS;
/*
* Add protection against green AP enabling interrupts
* when not valid or no VAPs exist
*/
if (wlan_util_is_vap_active(pdev) == QDF_STATUS_SUCCESS)
green_ap_tx_ops->reset_dev(pdev);
else
green_ap_err("Green AP tried to enable IRQs when invalid");
return QDF_STATUS_SUCCESS;
}
struct wlan_lmac_if_green_ap_tx_ops *
wlan_psoc_get_green_ap_tx_ops(struct wlan_pdev_green_ap_ctx *green_ap_ctx)
{
@@ -58,6 +100,7 @@ bool wlan_is_egap_enabled(struct wlan_pdev_green_ap_ctx *green_ap_ctx)
return true;
return false;
}
qdf_export_symbol(wlan_is_egap_enabled);
/**
* wlan_green_ap_ps_event_state_update() - Update PS state and event
@@ -89,6 +132,13 @@ QDF_STATUS wlan_green_ap_state_mc(struct wlan_pdev_green_ap_ctx *green_ap_ctx,
struct wlan_lmac_if_green_ap_tx_ops *green_ap_tx_ops;
uint8_t pdev_id;
/*
* Remove the assignments once channel info is available for
* converged component.
*/
uint16_t channel = 1;
uint32_t channel_flags = 1;
if (!green_ap_ctx) {
green_ap_err("green ap context obtained is NULL");
return QDF_STATUS_E_FAILURE;
@@ -113,6 +163,14 @@ QDF_STATUS wlan_green_ap_state_mc(struct wlan_pdev_green_ap_ctx *green_ap_ctx,
qdf_spin_lock_bh(&green_ap_ctx->lock);
if (green_ap_tx_ops->get_current_channel)
channel = green_ap_tx_ops->get_current_channel(
green_ap_ctx->pdev);
if (green_ap_tx_ops->get_current_channel_flags)
channel_flags = green_ap_tx_ops->get_current_channel_flags(
green_ap_ctx->pdev);
/* handle the green ap ps event */
switch (event) {
case WLAN_GREEN_AP_ADD_STA_EVENT:
@@ -145,9 +203,12 @@ QDF_STATUS wlan_green_ap_state_mc(struct wlan_pdev_green_ap_ctx *green_ap_ctx,
green_ap_ctx,
WLAN_GREEN_AP_PS_IDLE_STATE,
WLAN_GREEN_AP_PS_WAIT_EVENT);
if (green_ap_tx_ops->ps_on_off_send(green_ap_ctx->pdev,
false, pdev_id))
green_ap_err("failed to set green ap mode");
if (green_ap_ctx->ps_state == WLAN_GREEN_AP_PS_ON_STATE) {
if (green_ap_tx_ops->ps_on_off_send(green_ap_ctx->pdev,
false, pdev_id))
green_ap_err("failed to set green ap mode");
wlan_green_ap_ant_ps_reset(green_ap_ctx);
}
goto done;
}
@@ -187,17 +248,28 @@ QDF_STATUS wlan_green_ap_state_mc(struct wlan_pdev_green_ap_ctx *green_ap_ctx,
case WLAN_GREEN_AP_PS_WAIT_STATE:
if (!green_ap_ctx->num_nodes) {
wlan_green_ap_ps_event_state_update(
if ((channel == 0) || (channel_flags == 0)) {
/*
* Stay in the current state and restart the
* timer to check later.
*/
qdf_timer_start(&green_ap_ctx->ps_timer,
green_ap_ctx->ps_on_time);
} else {
wlan_green_ap_ps_event_state_update(
green_ap_ctx,
WLAN_GREEN_AP_PS_ON_STATE,
WLAN_GREEN_AP_PS_WAIT_EVENT);
green_ap_info("Transition to ON from WAIT");
green_ap_tx_ops->ps_on_off_send(green_ap_ctx->pdev,
true, pdev_id);
if (green_ap_ctx->ps_on_time)
qdf_timer_start(&green_ap_ctx->ps_timer,
green_ap_info("Transition to ON from WAIT");
green_ap_tx_ops->ps_on_off_send(
green_ap_ctx->pdev, true, pdev_id);
wlan_green_ap_ant_ps_reset(green_ap_ctx);
if (green_ap_ctx->ps_on_time)
qdf_timer_start(&green_ap_ctx->ps_timer,
green_ap_ctx->ps_on_time);
}
} else {
green_ap_info("Transition to OFF from WAIT");
qdf_timer_stop(&green_ap_ctx->ps_timer);
@@ -216,6 +288,7 @@ QDF_STATUS wlan_green_ap_state_mc(struct wlan_pdev_green_ap_ctx *green_ap_ctx,
green_ap_err("Failed to set Green AP mode");
goto done;
}
wlan_green_ap_ant_ps_reset(green_ap_ctx);
green_ap_info("Transition to OFF from ON\n");
wlan_green_ap_ps_event_state_update(
green_ap_ctx,
@@ -236,6 +309,7 @@ QDF_STATUS wlan_green_ap_state_mc(struct wlan_pdev_green_ap_ctx *green_ap_ctx,
goto done;
}
wlan_green_ap_ant_ps_reset(green_ap_ctx);
green_ap_info("Transition to WAIT from ON\n");
qdf_timer_start(&green_ap_ctx->ps_timer,
green_ap_ctx->ps_trans_time);
@@ -275,3 +349,17 @@ void wlan_green_ap_timer_fn(void *pdev)
wlan_green_ap_state_mc(green_ap_ctx, green_ap_ctx->ps_event);
}
void wlan_green_ap_check_mode(struct wlan_objmgr_pdev *pdev,
void *object,
void *arg)
{
struct wlan_objmgr_vdev *vdev = (struct wlan_objmgr_vdev *)object;
uint8_t *flag = (uint8_t *)arg;
wlan_vdev_obj_lock(vdev);
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_SAP_MODE)
*flag = 1;
wlan_vdev_obj_unlock(vdev);
}

Datei anzeigen

@@ -30,6 +30,8 @@
#include <qdf_types.h>
#include <qdf_status.h>
#include <qdf_timer.h>
#include "wlan_utility.h"
#include <qdf_module.h>
#define WLAN_GREEN_AP_PS_ON_TIME (0)
#define WLAN_GREEN_AP_PS_TRANS_TIME (20)
@@ -52,6 +54,9 @@
#define green_ap_debug(format, args...) \
green_ap_logfl(QDF_TRACE_LEVEL_DEBUG, format, ## args)
#define WLAN_GREEN_AP_PS_DISABLE 0
#define WLAN_GREEN_AP_PS_ENABLE 1
#define WLAN_GREEN_AP_PS_SUSPEND 2
/**
* enum wlan_green_ap_ps_state - PS states
* @WLAN_GREEN_AP_PS_IDLE_STATE - Idle
@@ -108,6 +113,7 @@ struct wlan_pdev_green_ap_ctx {
qdf_timer_t ps_timer;
qdf_spinlock_t lock;
struct wlan_green_ap_egap_params egap_params;
bool dbg_enable;
};
/**
@@ -144,4 +150,18 @@ QDF_STATUS wlan_green_ap_state_mc(struct wlan_pdev_green_ap_ctx *green_ap_ctx,
* @Return: None
*/
void wlan_green_ap_timer_fn(void *pdev);
/**
* wlan_green_ap_check_mode() - Check for mode
* @pdev: pdev pointer
* @object: vdev object
* @arg: flag to be set
*
* Callback to check if all modes on radio are configured as AP
*
* @Return: None
*/
void wlan_green_ap_check_mode(struct wlan_objmgr_pdev *pdev,
void *object,
void *arg);
#endif /* _WLAN_GREEN_AP_MAIN_I_H_ */

Datei anzeigen

@@ -96,4 +96,30 @@ QDF_STATUS wlan_green_ap_add_sta(struct wlan_objmgr_pdev *pdev);
* Return: Success or Failure
*/
QDF_STATUS wlan_green_ap_del_sta(struct wlan_objmgr_pdev *pdev);
/**
* wlan_green_ap_is_ps_enabled() - is power save enabled
* @pdev: pdev pointer
*
* Check if power save is enabled in FW
*
* Return: Success or Failure
*/
bool wlan_green_ap_is_ps_enabled(struct wlan_objmgr_pdev *pdev);
/**
* wlan_green_ap_suspend_handle() - handle driver suspend
* @pdev: pdev pointer
*
* Return: None
*/
void wlan_green_ap_suspend_handle(struct wlan_objmgr_pdev *pdev);
/**
* wlan_green_ap_get_capab() - get lmac capability
* @pdev: pdev pointer
*
* Return: Appropriate status
*/
QDF_STATUS wlan_green_ap_get_capab(struct wlan_objmgr_pdev *pdev);
#endif /* _WLAN_GREEN_AP_API_H_ */

Datei anzeigen

@@ -26,6 +26,7 @@
#include <wlan_objmgr_cmn.h>
#include <wlan_objmgr_pdev_obj.h>
#include <qdf_status.h>
#include "wlan_utility.h"
/**
* struct green_ap_user_cfg - green ap user cfg
@@ -116,4 +117,28 @@ QDF_STATUS ucfg_green_ap_set_transition_time(struct wlan_objmgr_pdev *pdev,
QDF_STATUS ucfg_green_ap_get_transition_time(struct wlan_objmgr_pdev *pdev,
uint32_t *ps_trans_time);
/**
* ucfg_green_ap_config() - Config green AP
* @pdev: pdev pointer
*
* Return: Success or Failure
*/
QDF_STATUS ucfg_green_ap_config(struct wlan_objmgr_pdev *pdev, uint8_t val);
/**
* ucfg_green_ap_enable_debug_prints() - Enable debugs
* @pdev: pdev pointer
*
* Return: None
*/
void ucfg_green_ap_enable_debug_prints(struct wlan_objmgr_pdev *pdev,
uint32_t val);
/**
* ucfg_green_ap_get_debug_prints() - Check if debug enabled
* @pdev: pdev pointer
*
* Return: Debug value
*/
bool ucfg_green_ap_get_debug_prints(struct wlan_objmgr_pdev *pdev);
#endif /* _WLAN_GREEN_AP_UCFG_API_H_ */

Datei anzeigen

@@ -23,6 +23,33 @@
#include <../../core/src/wlan_green_ap_main_i.h>
#include <wlan_objmgr_global_obj.h>
QDF_STATUS wlan_green_ap_get_capab(
struct wlan_objmgr_pdev *pdev)
{
struct wlan_lmac_if_green_ap_tx_ops *green_ap_tx_ops;
struct wlan_pdev_green_ap_ctx *green_ap_ctx;
green_ap_ctx = wlan_objmgr_pdev_get_comp_private_obj(pdev,
WLAN_UMAC_COMP_GREEN_AP);
if (!green_ap_ctx) {
green_ap_err("green ap context obtained is NULL");
return QDF_STATUS_E_FAILURE;
}
green_ap_tx_ops = wlan_psoc_get_green_ap_tx_ops(green_ap_ctx);
if (!green_ap_tx_ops) {
green_ap_err("green ap tx ops obtained are NULL");
return QDF_STATUS_E_EXISTS;
}
if (green_ap_tx_ops->get_capab)
return green_ap_tx_ops->get_capab(pdev);
return QDF_STATUS_SUCCESS;
}
/**
* wlan_green_ap_pdev_obj_create_notification() - called from objmgr when pdev
* is created
@@ -246,7 +273,6 @@ QDF_STATUS wlan_green_ap_stop(struct wlan_objmgr_pdev *pdev)
green_ap_debug("Green AP stop received");
qdf_spin_lock_bh(&green_ap_ctx->lock);
if (wlan_is_egap_enabled(green_ap_ctx)) {
qdf_spin_unlock_bh(&green_ap_ctx->lock);
green_ap_debug("enhanced green ap support is enabled");
@@ -257,7 +283,7 @@ QDF_STATUS wlan_green_ap_stop(struct wlan_objmgr_pdev *pdev)
qdf_timer_stop(&green_ap_ctx->ps_timer);
/* Disable the power save */
green_ap_ctx->ps_enable = 0;
green_ap_ctx->ps_enable = WLAN_GREEN_AP_PS_DISABLE;
qdf_spin_unlock_bh(&green_ap_ctx->lock);
return wlan_green_ap_state_mc(green_ap_ctx,
@@ -323,3 +349,49 @@ QDF_STATUS wlan_green_ap_del_sta(struct wlan_objmgr_pdev *pdev)
return wlan_green_ap_state_mc(green_ap_ctx,
WLAN_GREEN_AP_DEL_STA_EVENT);
}
bool wlan_green_ap_is_ps_enabled(struct wlan_objmgr_pdev *pdev)
{
struct wlan_pdev_green_ap_ctx *green_ap_ctx;
if (!pdev) {
green_ap_err("pdev context passed is NULL");
return QDF_STATUS_E_INVAL;
}
green_ap_ctx = wlan_objmgr_pdev_get_comp_private_obj(
pdev, WLAN_UMAC_COMP_GREEN_AP);
if (!green_ap_ctx) {
green_ap_err("green ap context obtained is NULL");
return QDF_STATUS_E_FAILURE;
}
if ((green_ap_ctx->ps_state == WLAN_GREEN_AP_PS_ON_STATE) &&
(green_ap_ctx->ps_enable))
return true;
return false;
}
void wlan_green_ap_suspend_handle(struct wlan_objmgr_pdev *pdev)
{
struct wlan_pdev_green_ap_ctx *green_ap_ctx;
if (!pdev) {
green_ap_err("pdev context passed is NULL");
return;
}
green_ap_ctx = wlan_objmgr_pdev_get_comp_private_obj(
pdev, WLAN_UMAC_COMP_GREEN_AP);
if (!green_ap_ctx) {
green_ap_err("green ap context obtained is NULL");
return;
}
wlan_green_ap_stop(pdev);
green_ap_ctx->ps_enable = WLAN_GREEN_AP_PS_SUSPEND;
}

Datei anzeigen

@@ -228,3 +228,76 @@ QDF_STATUS ucfg_green_ap_get_transition_time(struct wlan_objmgr_pdev *pdev,
return QDF_STATUS_SUCCESS;
}
QDF_STATUS ucfg_green_ap_config(struct wlan_objmgr_pdev *pdev, uint8_t val)
{
uint8_t flag;
if (wlan_green_ap_get_capab(pdev) == QDF_STATUS_E_NOSUPPORT) {
green_ap_err("GreenAP not supported on radio\n");
return QDF_STATUS_E_NOSUPPORT;
}
if (val) {
struct wlan_pdev_green_ap_ctx *green_ap_ctx;
wlan_objmgr_pdev_iterate_obj_list(pdev,
WLAN_VDEV_OP,
wlan_green_ap_check_mode,
&flag, 0, WLAN_OBJMGR_ID);
if (flag == 1) {
green_ap_err("Radio not in AP mode."
"Feature not supported");
return QDF_STATUS_E_NOSUPPORT;
}
green_ap_ctx = wlan_objmgr_pdev_get_comp_private_obj(pdev,
WLAN_UMAC_COMP_GREEN_AP);
if (!green_ap_ctx) {
green_ap_err("green ap context obtained is NULL");
return QDF_STATUS_E_NOSUPPORT;
}
ucfg_green_ap_set_ps_config(pdev, val);
if (wlan_util_is_vap_active(pdev) == QDF_STATUS_SUCCESS)
wlan_green_ap_start(pdev);
} else {
wlan_green_ap_stop(pdev);
}
return QDF_STATUS_SUCCESS;
}
void ucfg_green_ap_enable_debug_prints(struct wlan_objmgr_pdev *pdev,
uint32_t val)
{
struct wlan_pdev_green_ap_ctx *green_ap_ctx;
green_ap_ctx = wlan_objmgr_pdev_get_comp_private_obj(
pdev, WLAN_UMAC_COMP_GREEN_AP);
if (!green_ap_ctx) {
green_ap_err("green ap context obtained is NULL");
return;
}
green_ap_ctx->dbg_enable = val;
}
bool ucfg_green_ap_get_debug_prints(struct wlan_objmgr_pdev *pdev)
{
struct wlan_pdev_green_ap_ctx *green_ap_ctx;
green_ap_ctx = wlan_objmgr_pdev_get_comp_private_obj(
pdev, WLAN_UMAC_COMP_GREEN_AP);
if (!green_ap_ctx) {
green_ap_err("green ap context obtained is NULL");
return false;
}
return green_ap_ctx->dbg_enable;
}