blob: c6a4b9b79cbad56cd0dcceb7959691e6119687af [file] [log] [blame]
Mukul Sharmad75a6672017-06-22 15:40:53 +05301/*
Dustin Brown06259e52018-02-28 16:00:02 -08002 * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
Jeff Johnsonb4c29962017-10-07 19:35:14 -07003 *
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 */
Mukul Sharmad75a6672017-06-22 15:40:53 +053018/**
19 * DOC: Declare various struct, macros which are common for
20 * various pmo related features.
Jeff Johnsonb4c29962017-10-07 19:35:14 -070021 *
22 * Note: This file shall not contain public API's prototype/declartions.
23 *
24 */
Mukul Sharmad75a6672017-06-22 15:40:53 +053025
26#ifndef _WLAN_PMO_COMMONP_PUBLIC_STRUCT_H_
27#define _WLAN_PMO_COMMONP_PUBLIC_STRUCT_H_
28
29#include "wlan_cmn.h"
30#include "wlan_objmgr_cmn.h"
31#include "wlan_objmgr_global_obj.h"
32#include "wlan_objmgr_psoc_obj.h"
33#include "wlan_objmgr_pdev_obj.h"
34#include "wlan_objmgr_vdev_obj.h"
35#include "wlan_objmgr_peer_obj.h"
36#include "wmi_unified.h"
37#include "qdf_status.h"
38#include "qdf_lock.h"
39#include "qdf_event.h"
40#include "wlan_pmo_hw_filter_public_struct.h"
41
42#define PMO_IPV4_ADDR_LEN 4
43
44#define PMO_IPV4_ARP_REPLY_OFFLOAD 0
45#define PMO_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD 1
46#define PMO_IPV6_NS_OFFLOAD 2
47#define PMO_OFFLOAD_DISABLE 0
48#define PMO_OFFLOAD_ENABLE 1
49
50#define PMO_MAC_NS_OFFLOAD_SIZE 1
51#define PMO_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA 16
52#define PMO_MAC_IPV6_ADDR_LEN 16
53#define PMO_IPV6_ADDR_VALID 1
54#define PMO_IPV6_ADDR_UC_TYPE 0
55#define PMO_IPV6_ADDR_AC_TYPE 1
56
57#define PMO_80211_ADDR_LEN 6 /* size of 802.11 address */
58
59#define PMO_WOW_REQUIRED_CREDITS 1
60
61/**
62 * enum pmo_offload_type: tell offload type
63 * @pmo_arp_offload: arp offload
64 * @pmo_ns_offload: ns offload
65 * @pmo_gtk_offload: gtk offload
66 */
67enum pmo_offload_type {
68 pmo_arp_offload = 0,
69 pmo_ns_offload,
70 pmo_gtk_offload,
71};
72
73/**
74 * enum pmo_vdev_param_id: tell vdev param id
75 * @pmo_vdev_param_listen_interval: vdev listen interval param id
76 * @pmo_vdev_param_dtim_policy: vdev param dtim policy
77 * @pmo_vdev_max_param: Max vdev param id
78 */
79enum pmo_vdev_param_id {
80 pmo_vdev_param_listen_interval = 0,
81 pmo_vdev_param_dtim_policy,
82 pmo_vdev_max_param
83};
84
85/**
86 * enum pmo_beacon_dtim_policy: tell vdev beacon policy
87 * @pmo_ignore_dtim: fwr need to igonre dtime policy
88 * @pmo_normal_dtim: fwr need to use normal dtime policy
89 * @pmo_stick_dtim: fwr need to use stick dtime policy
90 * @auto_dtim: fwr need to auto dtime policy
91 */
92enum pmo_beacon_dtim_policy {
93 pmo_ignore_dtim = 0x01,
94 pmo_normal_dtim = 0x02,
95 pmo_stick_dtim = 0x03,
96 pmo_auto_dtim = 0x04,
97};
98
99/**
100 * @pmo_sta_ps_param_rx_wake_policy: Controls how frames are retrievd from AP
101 * while STA is sleeping.
102 * @pmo_sta_ps_param_tx_wake_threshold: STA will go active after this many TX
103 * @pmo_sta_ps_param_pspoll_count:No of PS-Poll to send before STA wakes up
104 * @pmo_sta_ps_param_inactivity_time: TX/RX inactivity time in msec before
105 going to sleep.
106 * @pmo_sta_ps_param_uapsd: Set uapsd configuration.
107 * @pmo_sta_ps_param_qpower_pspoll_count: No of PS-Poll to send before
108 STA wakes up in QPower Mode.
109 * @pmo_sta_ps_enable_qpower: Enable QPower
110 * @pmo_sta_ps_param_qpower_max_tx_before_wake: Number of TX frames before the
111 entering the Active state
112 */
113enum pmo_sta_powersave_param {
114 pmo_sta_ps_param_rx_wake_policy = 0,
115 pmo_sta_ps_param_tx_wake_threshold = 1,
116 pmo_sta_ps_param_pspoll_count = 2,
117 pmo_sta_ps_param_inactivity_time = 3,
118 pmo_sta_ps_param_uapsd = 4,
119 pmo_sta_ps_param_qpower_pspoll_count = 5,
120 pmo_sta_ps_enable_qpower = 6,
121 pmo_sta_ps_param_qpower_max_tx_before_wake = 7,
122};
123
124/**
125 * enum powersave_qpower_mode: QPOWER modes
126 * @pmo_qpower_disabled: Qpower is disabled
127 * @pmo_qpower_enabled: Qpower is enabled
128 * @pmo_qpower_duty_cycling: Qpower is enabled with duty cycling
129 */
130enum pmo_power_save_qpower_mode {
131 pmo_qpower_disabled = 0,
132 pmo_qpower_enabled = 1,
133 pmo_qpower_duty_cycling = 2
134};
135
136/**
137 * enum powersave_qpower_mode: powersave_mode
138 * @pmo_ps_not_supported: Power save is not supported
139 * @pmo_ps_legacy_no_deep_sleep: Legacy pwr save enabled and deep sleep disabled
140 * @pmo_ps_qpower_no_deep_sleep: QPOWER enabled and deep sleep disabled
141 * @pmo_ps_legacy_deep_sleep: Legacy power save enabled and deep sleep enabled
142 * @pmo_ps_qpower_deep_sleep: QPOWER enabled and deep sleep enabled
143 * @pmo_ps_duty_cycling_qpower: QPOWER enabled in duty cycling mode
144 */
145enum pmo_powersave_mode {
146 pmo_ps_not_supported = 0,
147 pmo_ps_legacy_no_deep_sleep = 1,
148 pmo_ps_qpower_no_deep_sleep = 2,
149 pmo_ps_legacy_deep_sleep = 3,
150 pmo_ps_qpower_deep_sleep = 4,
151 pmo_ps_duty_cycling_qpower = 5
152};
153
154/**
155 * enum wow_resume_trigger - resume trigger override setting values
156 * @PMO_WOW_RESUME_TRIGGER_DEFAULT: fw to use platform default resume trigger
157 * @PMO_WOW_RESUME_TRIGGER_HTC_WAKEUP: force fw to use HTC Wakeup to resume
158 * @PMO_WOW_RESUME_TRIGGER_GPIO: force fw to use GPIO to resume
159 * @PMO_WOW_RESUME_TRIGGER_COUNT: number of resume trigger options
160 */
161enum pmo_wow_resume_trigger {
162 /* always first */
163 PMO_WOW_RESUME_TRIGGER_DEFAULT = 0,
164 PMO_WOW_RESUME_TRIGGER_HTC_WAKEUP,
165 PMO_WOW_RESUME_TRIGGER_GPIO,
166 /* always last */
167 PMO_WOW_RESUME_TRIGGER_COUNT
168};
169
170/**
171 * enum wow_interface_pause - interface pause override setting values
172 * @PMO_WOW_INTERFACE_PAUSE_DEFAULT: use platform default iface pause setting
173 * @PMO_WOW_INTERFACE_PAUSE_ENABLE: force interface pause setting to enabled
174 * @PMO_WOW_INTERFACE_PAUSE_DISABLE: force interface pause setting to disabled
175 * @PMO_WOW_INTERFACE_PAUSE_COUNT: number of interface pause options
176 */
177enum pmo_wow_interface_pause {
178 /* always first */
179 PMO_WOW_INTERFACE_PAUSE_DEFAULT = 0,
180 PMO_WOW_INTERFACE_PAUSE_ENABLE,
181 PMO_WOW_INTERFACE_PAUSE_DISABLE,
182 /* always last */
183 PMO_WOW_INTERFACE_PAUSE_COUNT
184};
185
Dustin Brownd69ec372018-03-29 10:48:06 -0700186#define PMO_TARGET_SUSPEND_TIMEOUT 6000
187#define PMO_WAKE_LOCK_TIMEOUT 1000
188#define PMO_RESUME_TIMEOUT 6000
Mukul Sharmad75a6672017-06-22 15:40:53 +0530189
190/**
191 * struct wow_enable_params - A collection of wow enable override parameters
192 * @is_unit_test: true to notify fw this is a unit-test suspend
193 * @interface_pause: used to override the interface pause indication sent to fw
194 * @resume_trigger: used to force fw to use a particular resume method
195 */
196struct pmo_wow_enable_params {
197 bool is_unit_test;
198 enum pmo_wow_interface_pause interface_pause;
199 enum pmo_wow_resume_trigger resume_trigger;
200};
201
202/**
203 * typedef for psoc suspend handler
204 */
205typedef QDF_STATUS(*pmo_psoc_suspend_handler)
206 (struct wlan_objmgr_psoc *psoc, void *arg);
207/**
208 * typedef for psoc resume handler
209 */
210typedef QDF_STATUS(*pmo_psoc_resume_handler)
211 (struct wlan_objmgr_psoc *psoc, void *arg);
212
213/**
214 * enum pmo_offload_trigger: trigger information
215 * @pmo_apps_suspend: trigger is apps suspend
216 * @pmo_apps_resume: trigger is apps resume
217 * @pmo_runtime_suspend: trigger is runtime suspend
218 * @pmo_runtime_resume: trigger is runtime resume
219 * @pmo_ipv4_change_notify: trigger is ipv4 change handler
220 * @pmo_ipv6_change_notify: trigger is ipv6 change handler
221 * @pmo_ns_offload_dynamic_update: enable/disable ns offload on the fly
222 * @pmo_peer_disconnect: trigger is peer disconnect
223 * @pmo_mcbc_setting_dynamic_update: mcbc value update on the fly
224 *
225 * @pmo_offload_trigger_max: Max trigger value
226 */
227enum pmo_offload_trigger {
228 pmo_apps_suspend = 0,
229 pmo_apps_resume,
230 pmo_runtime_suspend,
231 pmo_runtime_resume,
232 pmo_ipv4_change_notify,
233 pmo_ipv6_change_notify,
234 pmo_mc_list_change_notify,
235 pmo_ns_offload_dynamic_update,
236 pmo_peer_disconnect,
237 pmo_mcbc_setting_dynamic_update,
238
239 pmo_offload_trigger_max,
240};
241
242/**
Hanumanth Reddy Pothulaab395952017-09-05 19:12:26 +0530243 * enum pmo_auto_pwr_detect_failure_mode_t - auto detect failure modes
244 * @PMO_FW_TO_CRASH_ON_PWR_FAILURE: Don't register wow wakeup event and FW
245 * crashes on power failure
246 * @PMO_FW_TO_SEND_WOW_IND_ON_PWR_FAILURE: Register wow wakeup event and FW
247 * sends failure event to host on power failure
248 * @PMO_FW_TO_REJUVENATE_ON_PWR_FAILURE: Don't register wow wakeup event and
249 * FW silently rejuvenate on power failure
250 * @PMO_AUTO_PWR_FAILURE_DETECT_DISABLE: Don't register wow wakeup event and the
251 * auto power failure detect feature is disabled in FW.
252 */
253enum pmo_auto_pwr_detect_failure_mode {
254 PMO_FW_TO_CRASH_ON_PWR_FAILURE,
255 PMO_FW_TO_SEND_WOW_IND_ON_PWR_FAILURE,
256 PMO_FW_TO_REJUVENATE_ON_PWR_FAILURE,
257 PMO_AUTO_PWR_FAILURE_DETECT_DISABLE
258};
259
260/**
Mukul Sharmad75a6672017-06-22 15:40:53 +0530261 * struct pmo_psoc_cfg - user configuration required for pmo
262 * @ptrn_match_enable_all_vdev: true when pattern match is enable for all vdev
Nachiket Kukadee547a482018-05-22 16:43:30 +0530263 * @apf_enable: true if psoc supports apf else false
Mukul Sharmad75a6672017-06-22 15:40:53 +0530264 * @arp_offload_enable: true if arp offload is supported for psoc else false
Nachiket Kukadef0804072018-02-27 18:20:07 +0530265 * @hw_filter_mode_bitmap: which mode the hardware filter should use during DTIM
Mukul Sharmad75a6672017-06-22 15:40:53 +0530266 * @ns_offload_enable_static: true if psoc supports ns offload in ini else false
267 * @ns_offload_enable_dynamic: to enable / disable the ns offload using
268 * ioctl or vendor command.
Dustin Brownb9987af2018-03-01 17:15:11 -0800269 * @packet_filter_enabled: true if feature is enabled by configuration
Mukul Sharmad75a6672017-06-22 15:40:53 +0530270 * @ssdp: true if psoc supports if ssdp configuration in wow mode
271 * @enable_mc_list: true if psoc supports mc addr list else false
272 * @active_mode_offload: true if psoc supports active mode offload else false
273 * @ap_arpns_support: true if psoc supports arp ns for ap mode
Will Huang3cd2b7c2017-11-17 13:16:56 +0800274 * @d0_wow_supported: true if psoc supports D0 wow command
Mukul Sharmad75a6672017-06-22 15:40:53 +0530275 * @ra_ratelimit_enable: true when ra filtering ins eanbled else false
276 * @ra_ratelimit_interval: ra packets interval
277 * @magic_ptrn_enable: true when magic pattern is enabled else false
278 * @deauth_enable: true when wake up on deauth is enabled else false
279 * @disassoc_enable: true when wake up on disassoc is enabled else false
280 * @bmiss_enable: true when wake up on bmiss is enabled else false
Mukul Sharmad75a6672017-06-22 15:40:53 +0530281 * @lpass_enable: true when lpass is enabled else false
282 * @sta_dynamic_dtim: station dynamic DTIM value
283 * @sta_mod_dtim: station modulated DTIM value
284 * @sta_max_li_mod_dtim: station max listen interval DTIM value
285 * @power_save_mode: power save mode for psoc
286 * @auto_power_save_fail_mode: auto detect power save failure
287 */
288struct pmo_psoc_cfg {
289 bool ptrn_match_enable_all_vdev;
Dustin Brownb9987af2018-03-01 17:15:11 -0800290 bool apf_enable;
Mukul Sharmad75a6672017-06-22 15:40:53 +0530291 bool arp_offload_enable;
Nachiket Kukadef0804072018-02-27 18:20:07 +0530292 enum pmo_hw_filter_mode hw_filter_mode_bitmap;
Mukul Sharmad75a6672017-06-22 15:40:53 +0530293 bool ns_offload_enable_static;
294 bool ns_offload_enable_dynamic;
Dustin Brownb9987af2018-03-01 17:15:11 -0800295 bool packet_filter_enabled;
Mukul Sharmad75a6672017-06-22 15:40:53 +0530296 bool ssdp;
297 bool enable_mc_list;
298 bool active_mode_offload;
299 bool ap_arpns_support;
Will Huang3cd2b7c2017-11-17 13:16:56 +0800300 bool d0_wow_supported;
Mukul Sharmad75a6672017-06-22 15:40:53 +0530301 bool ra_ratelimit_enable;
302 uint16_t ra_ratelimit_interval;
303 bool magic_ptrn_enable;
304 bool deauth_enable;
305 bool disassoc_enable;
306 bool bmiss_enable;
Mukul Sharmad75a6672017-06-22 15:40:53 +0530307 bool lpass_enable;
308 uint8_t sta_dynamic_dtim;
309 uint8_t sta_mod_dtim;
310 uint8_t sta_max_li_mod_dtim;
311 uint8_t power_save_mode;
Hanumanth Reddy Pothulaab395952017-09-05 19:12:26 +0530312 enum pmo_auto_pwr_detect_failure_mode auto_power_save_fail_mode;
Mukul Sharmad75a6672017-06-22 15:40:53 +0530313};
314
Dustin Brown06259e52018-02-28 16:00:02 -0800315/**
316 * pmo_device_caps - device capability flags (true if feature is supported)
317 * @apf: Android Packet Filter (aka BPF)
318 * @arp_ns_offload: APR/NS offload
319 * @packet_filter: Legacy "Packet Filter"
320 * @unified_wow: Firmware supports "interface pause" flag in WoW command.
321 * This allows both D0-WoW (bus up) and Non-D0-WoW (bus down) to use one
322 * unified command
Nachiket Kukade4b7c8e02018-06-01 22:53:06 +0530323 * @li_offload: Firmware has listen interval offload support
Dustin Brown06259e52018-02-28 16:00:02 -0800324 */
325struct pmo_device_caps {
326 bool apf;
327 bool arp_ns_offload;
328 bool packet_filter;
329 bool unified_wow;
Nachiket Kukade4b7c8e02018-06-01 22:53:06 +0530330 bool li_offload;
Dustin Brown06259e52018-02-28 16:00:02 -0800331};
332
Rajeev Kumar289f3c42018-04-18 17:57:42 -0700333#endif /* end of _WLAN_PMO_COMMONP_STRUCT_H_ */