1 /* 2 * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 20 /** 21 * DOC: This file has main green ap structures. 22 */ 23 24 #ifndef _WLAN_GREEN_AP_MAIN_I_H_ 25 #define _WLAN_GREEN_AP_MAIN_I_H_ 26 27 #include <wlan_objmgr_cmn.h> 28 #include <wlan_objmgr_pdev_obj.h> 29 #include <wlan_green_ap_api.h> 30 #include <qdf_types.h> 31 #include <qdf_status.h> 32 #include <qdf_timer.h> 33 #include "wlan_utility.h" 34 #include <qdf_module.h> 35 36 #define WLAN_GREEN_AP_PS_ON_TIME (0) 37 #define WLAN_GREEN_AP_PS_TRANS_TIME (20) 38 39 #define green_ap_alert(params...) \ 40 QDF_TRACE_FATAL(QDF_MODULE_ID_GREEN_AP, params) 41 #define green_ap_err(params...) \ 42 QDF_TRACE_ERROR(QDF_MODULE_ID_GREEN_AP, params) 43 #define green_ap_warn(params...) \ 44 QDF_TRACE_WARN(QDF_MODULE_ID_GREEN_AP, params) 45 #define green_ap_notice(params...) \ 46 QDF_TRACE_INFO(QDF_MODULE_ID_GREEN_AP, params) 47 #define green_ap_info(params...) \ 48 QDF_TRACE_INFO(QDF_MODULE_ID_GREEN_AP, params) 49 #define green_ap_debug(params...) \ 50 QDF_TRACE_DEBUG(QDF_MODULE_ID_GREEN_AP, params) 51 52 #define greenap_nofl_alert(params...) \ 53 QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_GREEN_AP, params) 54 #define greenap_nofl_err(params...) \ 55 QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_GREEN_AP, params) 56 #define greenap_nofl_warn(params...) \ 57 QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_GREEN_AP, params) 58 #define greenap_nofl_info(params...) \ 59 QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_GREEN_AP, params) 60 #define greenap_nofl_debug(params...) \ 61 QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_GREEN_AP, params) 62 63 #define WLAN_GREEN_AP_PS_DISABLE 0 64 #define WLAN_GREEN_AP_PS_ENABLE 1 65 #define WLAN_GREEN_AP_PS_SUSPEND 2 66 /** 67 * enum wlan_green_ap_ps_state - PS states 68 * @WLAN_GREEN_AP_PS_IDLE_STATE - Idle 69 * @WLAN_GREEN_AP_PS_OFF_STATE - Off 70 * @WLAN_GREEN_AP_PS_WAIT_STATE - Wait 71 * @WLAN_GREEN_AP_PS_ON_STATE - On 72 */ 73 enum wlan_green_ap_ps_state { 74 WLAN_GREEN_AP_PS_IDLE_STATE = 1, 75 WLAN_GREEN_AP_PS_OFF_STATE, 76 WLAN_GREEN_AP_PS_WAIT_STATE, 77 WLAN_GREEN_AP_PS_ON_STATE, 78 }; 79 80 /** 81 * enum wlan_green_ap_ps_event - PS event 82 * @WLAN_GREEN_AP_PS_START_EVENT - Start 83 * @WLAN_GREEN_AP_PS_STOP_EVENT - Stop 84 * @WLAN_GREEN_AP_ADD_STA_EVENT - Sta assoc 85 * @WLAN_GREEN_AP_DEL_STA_EVENT - Sta disassoc 86 * @WLAN_GREEN_AP_PS_ON_EVENT - PS on 87 * @WLAN_GREEN_AP_PS_OFF_EVENT - PS off 88 */ 89 enum wlan_green_ap_ps_event { 90 WLAN_GREEN_AP_PS_START_EVENT = 1, 91 WLAN_GREEN_AP_PS_STOP_EVENT, 92 WLAN_GREEN_AP_ADD_STA_EVENT, 93 WLAN_GREEN_AP_DEL_STA_EVENT, 94 WLAN_GREEN_AP_PS_ON_EVENT, 95 WLAN_GREEN_AP_PS_WAIT_EVENT, 96 }; 97 98 /** 99 * struct wlan_pdev_green_ap_ctx - green ap context 100 * @pdev - Pdev pointer 101 * @ps_enable - Enable PS 102 * @ps_on_time - PS on time, once enabled 103 * @ps_trans_time - PS transition time 104 * @num_nodes - Number of nodes associated to radio 105 * @ps_state - PS state 106 * @ps_event - PS event 107 * @ps_timer - Timer 108 * @lock: green ap spinlock 109 * @egap_params - Enhanced green ap params 110 */ 111 struct wlan_pdev_green_ap_ctx { 112 struct wlan_objmgr_pdev *pdev; 113 uint8_t ps_enable; 114 uint8_t ps_on_time; 115 uint32_t ps_trans_time; 116 uint32_t num_nodes; 117 enum wlan_green_ap_ps_state ps_state; 118 enum wlan_green_ap_ps_event ps_event; 119 qdf_timer_t ps_timer; 120 qdf_spinlock_t lock; 121 struct wlan_green_ap_egap_params egap_params; 122 bool dbg_enable; 123 }; 124 125 /** 126 * wlan_psoc_get_green_ap_tx_ops() - Obtain green ap tx ops from green ap ctx 127 * @green_ap_ctx: green ap context 128 * 129 * @Return: green ap tx ops pointer 130 */ 131 struct wlan_lmac_if_green_ap_tx_ops * 132 wlan_psoc_get_green_ap_tx_ops(struct wlan_pdev_green_ap_ctx *green_ap_ctx); 133 134 /** 135 * wlan_is_egap_enabled() - Get Enhance Green AP feature status 136 * @green_ap_ctx: green ap context 137 * 138 * Return: true if firmware, feature_flag and ini are all egap enabled 139 */ 140 bool wlan_is_egap_enabled(struct wlan_pdev_green_ap_ctx *green_ap_ctx); 141 142 /** 143 * wlan_green_ap_state_mc() - Green ap state machine 144 * @green_ap_ctx: green ap context 145 * @event: ps event 146 * 147 * @Return: Success or Failure 148 */ 149 QDF_STATUS wlan_green_ap_state_mc(struct wlan_pdev_green_ap_ctx *green_ap_ctx, 150 enum wlan_green_ap_ps_event event); 151 152 /** 153 * wlan_green_ap_timer_fn() - Green ap timer callback 154 * @pdev: pdev pointer 155 * 156 * @Return: None 157 */ 158 void wlan_green_ap_timer_fn(void *pdev); 159 160 /** 161 * wlan_green_ap_check_mode() - Check for mode 162 * @pdev: pdev pointer 163 * @object: vdev object 164 * @arg: flag to be set 165 * 166 * Callback to check if all modes on radio are configured as AP 167 * 168 * @Return: None 169 */ 170 void wlan_green_ap_check_mode(struct wlan_objmgr_pdev *pdev, 171 void *object, 172 void *arg); 173 #endif /* _WLAN_GREEN_AP_MAIN_I_H_ */ 174