1 /* 2 * Copyright (c) 2017-2019 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_ADD_MULTISTREAM_STA_EVENT - Multistream sta assoc 87 * @WLAN_GREEN_AP_DEL_MULTISTREAM_STA_EVENT - Multistream sta disassoc 88 * @WLAN_GREEN_AP_PS_ON_EVENT - PS on 89 * @WLAN_GREEN_AP_PS_OFF_EVENT - PS off 90 */ 91 enum wlan_green_ap_ps_event { 92 WLAN_GREEN_AP_PS_START_EVENT = 1, 93 WLAN_GREEN_AP_PS_STOP_EVENT, 94 WLAN_GREEN_AP_ADD_STA_EVENT, 95 WLAN_GREEN_AP_DEL_STA_EVENT, 96 WLAN_GREEN_AP_ADD_MULTISTREAM_STA_EVENT, 97 WLAN_GREEN_AP_DEL_MULTISTREAM_STA_EVENT, 98 WLAN_GREEN_AP_PS_ON_EVENT, 99 WLAN_GREEN_AP_PS_WAIT_EVENT, 100 }; 101 102 /** 103 * struct wlan_pdev_green_ap_ctx - green ap context 104 * @pdev - Pdev pointer 105 * @ps_enable - Enable PS 106 * @ps_mode - No sta or Multistream sta mode 107 * @ps_on_time - PS on time, once enabled 108 * @ps_trans_time - PS transition time 109 * @num_nodes - Number of nodes associated to radio 110 * @num_nodes_multistream - Multistream nodes associated to radio 111 * @ps_state - PS state 112 * @ps_event - PS event 113 * @ps_timer - Timer 114 * @lock: green ap spinlock 115 * @egap_params - Enhanced green ap params 116 */ 117 struct wlan_pdev_green_ap_ctx { 118 struct wlan_objmgr_pdev *pdev; 119 uint8_t ps_enable; 120 uint8_t ps_mode; 121 uint8_t ps_on_time; 122 uint32_t ps_trans_time; 123 uint32_t num_nodes; 124 uint32_t num_nodes_multistream; 125 enum wlan_green_ap_ps_state ps_state; 126 enum wlan_green_ap_ps_event ps_event; 127 qdf_timer_t ps_timer; 128 qdf_spinlock_t lock; 129 struct wlan_green_ap_egap_params egap_params; 130 bool dbg_enable; 131 }; 132 133 /** 134 * wlan_psoc_get_green_ap_tx_ops() - Obtain green ap tx ops from green ap ctx 135 * @green_ap_ctx: green ap context 136 * 137 * @Return: green ap tx ops pointer 138 */ 139 struct wlan_lmac_if_green_ap_tx_ops * 140 wlan_psoc_get_green_ap_tx_ops(struct wlan_pdev_green_ap_ctx *green_ap_ctx); 141 142 /** 143 * wlan_is_egap_enabled() - Get Enhance Green AP feature status 144 * @green_ap_ctx: green ap context 145 * 146 * Return: true if firmware, feature_flag and ini are all egap enabled 147 */ 148 bool wlan_is_egap_enabled(struct wlan_pdev_green_ap_ctx *green_ap_ctx); 149 150 /** 151 * wlan_green_ap_state_mc() - Green ap state machine 152 * @green_ap_ctx: green ap context 153 * @event: ps event 154 * 155 * @Return: Success or Failure 156 */ 157 QDF_STATUS wlan_green_ap_state_mc(struct wlan_pdev_green_ap_ctx *green_ap_ctx, 158 enum wlan_green_ap_ps_event event); 159 160 /** 161 * wlan_green_ap_timer_fn() - Green ap timer callback 162 * @pdev: pdev pointer 163 * 164 * @Return: None 165 */ 166 void wlan_green_ap_timer_fn(void *pdev); 167 168 /** 169 * wlan_green_ap_check_mode() - Check for mode 170 * @pdev: pdev pointer 171 * @object: vdev object 172 * @arg: flag to be set 173 * 174 * Callback to check if all modes on radio are configured as AP 175 * 176 * @Return: None 177 */ 178 void wlan_green_ap_check_mode(struct wlan_objmgr_pdev *pdev, 179 void *object, 180 void *arg); 181 #endif /* _WLAN_GREEN_AP_MAIN_I_H_ */ 182