xref: /wlan-dirver/qca-wifi-host-cmn/umac/green_ap/core/src/wlan_green_ap_main_i.h (revision dd4dc88b837a295134aa9869114a2efee0f4894b)
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