Mukul Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 1 | /* |
Jeff Johnson | b4c2996 | 2017-10-07 19:35:14 -0700 | [diff] [blame] | 2 | * Copyright (c) 2017 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 | */ |
Mukul Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 18 | /** |
| 19 | * DOC: Declare various struct, macros which are common for |
| 20 | * various pmo related features. |
Jeff Johnson | b4c2996 | 2017-10-07 19:35:14 -0700 | [diff] [blame] | 21 | * |
| 22 | * Note: This file shall not contain public API's prototype/declartions. |
| 23 | * |
| 24 | */ |
Mukul Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 25 | |
| 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 | */ |
| 67 | enum 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 | */ |
| 79 | enum 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 | */ |
| 92 | enum 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 | */ |
| 113 | enum 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 | */ |
| 130 | enum 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 | */ |
| 145 | enum 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 | */ |
| 161 | enum 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 | */ |
| 177 | enum 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 | |
| 186 | #define PMO_TGT_SUSPEND_COMPLETE_TIMEOUT 6000 |
| 187 | #define PMO_WAKE_LOCK_TIMEOUT 1000 |
Rajeev Kumar | c22fb8f | 2017-10-17 16:01:49 -0700 | [diff] [blame] | 188 | #define PMO_RESUME_TIMEOUT 6000 |
Mukul Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 189 | |
| 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 | */ |
| 196 | struct 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 | */ |
| 205 | typedef QDF_STATUS(*pmo_psoc_suspend_handler) |
| 206 | (struct wlan_objmgr_psoc *psoc, void *arg); |
| 207 | /** |
| 208 | * typedef for psoc resume handler |
| 209 | */ |
| 210 | typedef 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 | */ |
| 227 | enum 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 Pothula | ab39595 | 2017-09-05 19:12:26 +0530 | [diff] [blame] | 243 | * 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 | */ |
| 253 | enum 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 Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 261 | * struct pmo_psoc_cfg - user configuration required for pmo |
| 262 | * @ptrn_match_enable_all_vdev: true when pattern match is enable for all vdev |
Will Huang | fe64917 | 2017-09-06 16:52:18 +0800 | [diff] [blame] | 263 | * @ptrn_id_per_vdev: true when pattern id can be same for different vdev |
Mukul Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 264 | * @bpf_enable: true if psoc supports bpf else false |
| 265 | * @arp_offload_enable: true if arp offload is supported for psoc else false |
| 266 | * @hw_filter_mode: which mode the hardware filter should use during DTIM |
| 267 | * @ns_offload_enable_static: true if psoc supports ns offload in ini else false |
| 268 | * @ns_offload_enable_dynamic: to enable / disable the ns offload using |
| 269 | * ioctl or vendor command. |
| 270 | * @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 Huang | 3cd2b7c | 2017-11-17 13:16:56 +0800 | [diff] [blame^] | 274 | * @d0_wow_supported: true if psoc supports D0 wow command |
Mukul Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 275 | * @max_wow_filters: maximum number of wow filter supported |
| 276 | * @ra_ratelimit_enable: true when ra filtering ins eanbled else false |
| 277 | * @ra_ratelimit_interval: ra packets interval |
| 278 | * @magic_ptrn_enable: true when magic pattern is enabled else false |
| 279 | * @deauth_enable: true when wake up on deauth is enabled else false |
| 280 | * @disassoc_enable: true when wake up on disassoc is enabled else false |
| 281 | * @bmiss_enable: true when wake up on bmiss is enabled else false |
| 282 | * @nan_enable: true when nan is enabled else false |
| 283 | * @lpass_enable: true when lpass is enabled else false |
| 284 | * @sta_dynamic_dtim: station dynamic DTIM value |
| 285 | * @sta_mod_dtim: station modulated DTIM value |
| 286 | * @sta_max_li_mod_dtim: station max listen interval DTIM value |
| 287 | * @power_save_mode: power save mode for psoc |
| 288 | * @auto_power_save_fail_mode: auto detect power save failure |
| 289 | */ |
| 290 | struct pmo_psoc_cfg { |
| 291 | bool ptrn_match_enable_all_vdev; |
Will Huang | fe64917 | 2017-09-06 16:52:18 +0800 | [diff] [blame] | 292 | bool ptrn_id_per_vdev; |
Mukul Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 293 | bool bpf_enable; |
| 294 | bool arp_offload_enable; |
| 295 | enum pmo_hw_filter_mode hw_filter_mode; |
| 296 | bool ns_offload_enable_static; |
| 297 | bool ns_offload_enable_dynamic; |
| 298 | bool ssdp; |
| 299 | bool enable_mc_list; |
| 300 | bool active_mode_offload; |
| 301 | bool ap_arpns_support; |
Will Huang | 3cd2b7c | 2017-11-17 13:16:56 +0800 | [diff] [blame^] | 302 | bool d0_wow_supported; |
Mukul Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 303 | uint8_t max_wow_filters; |
| 304 | bool ra_ratelimit_enable; |
| 305 | uint16_t ra_ratelimit_interval; |
| 306 | bool magic_ptrn_enable; |
| 307 | bool deauth_enable; |
| 308 | bool disassoc_enable; |
| 309 | bool bmiss_enable; |
| 310 | bool nan_enable; |
| 311 | bool lpass_enable; |
| 312 | uint8_t sta_dynamic_dtim; |
| 313 | uint8_t sta_mod_dtim; |
| 314 | uint8_t sta_max_li_mod_dtim; |
| 315 | uint8_t power_save_mode; |
Hanumanth Reddy Pothula | ab39595 | 2017-09-05 19:12:26 +0530 | [diff] [blame] | 316 | enum pmo_auto_pwr_detect_failure_mode auto_power_save_fail_mode; |
Mukul Sharma | d75a667 | 2017-06-22 15:40:53 +0530 | [diff] [blame] | 317 | }; |
| 318 | |
| 319 | #endif /* end of _WLAN_PMO_COMMONP_STRUCT_H_ */ |
| 320 | |