blob: 2287bf19e090411e471d8ae9e6f4ae9ec0d1a7a7 [file] [log] [blame]
Mukul Sharmad75a6672017-06-22 15:40:53 +05301/*
Jeff Johnsonb4c29962017-10-07 19:35:14 -07002 * 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 */
18/**
19 * DOC: Declare various struct, macros which shall be used in
20 * pmo wow related features.
21 *
22 * Note: This file shall not contain public API's prototype/declarations.
23 *
24 */
Mukul Sharmad75a6672017-06-22 15:40:53 +053025
26#ifndef _WLAN_PMO_WOW_PUBLIC_STRUCT_H_
27#include "wlan_pmo_lphb_public_struct.h"
28
29#define _WLAN_PMO_WOW_PUBLIC_STRUCT_H_
30
31#define PMO_WOWL_PTRN_MAX_SIZE 146
32#define PMO_WOWL_PTRN_MASK_MAX_SIZE 19
33#define PMO_WOWL_MAX_PTRNS_ALLOWED CFG_MAX_WOW_FILTERS_MAX
34#define PMO_WOWL_BCAST_PATTERN_MAX_SIZE 146
35
36#define PMO_WOW_INTER_PTRN_TOKENIZER ';'
37#define PMO_WOW_INTRA_PTRN_TOKENIZER ':'
38
39
40/* Action frame categories */
41
42#define PMO_MAC_ACTION_SPECTRUM_MGMT 0
43#define PMO_MAC_ACTION_QOS_MGMT 1
44#define PMO_MAC_ACTION_DLP 2
45#define PMO_MAC_ACTION_BLKACK 3
46#define PMO_MAC_ACTION_PUBLIC_USAGE 4
47#define PMO_MAC_ACTION_RRM 5
48#define PMO_MAC_ACTION_FAST_BSS_TRNST 6
49#define PMO_MAC_ACTION_HT 7
50#define PMO_MAC_ACTION_SA_QUERY 8
51#define PMO_MAC_ACTION_PROT_DUAL_PUB 9
52#define PMO_MAC_ACTION_WNM 10
53#define PMO_MAC_ACTION_UNPROT_WNM 11
54#define PMO_MAC_ACTION_TDLS 12
55#define PMO_MAC_ACITON_MESH 13
56#define PMO_MAC_ACTION_MHF 14
57#define PMO_MAC_SELF_PROTECTED 15
58#define PMO_MAC_ACTION_WME 17
59#define PMO_MAC_ACTION_FST 18
60#define PMO_MAC_ACTION_VHT 21
61#define PMO_MAC_ACTION_MAX 256
62
Sridhar Selvaraj53166d72017-08-04 11:49:19 +053063#define PMO_MAC_ACTION_MEASURE_REQUEST_ID 0
64#define PMO_MAC_ACTION_TPC_REQUEST_ID 2
Mukul Sharmad75a6672017-06-22 15:40:53 +053065/*
66 * ALLOWED_ACTION_FRAMES_BITMAP
67 *
68 * Bitmask is based on the below. The frames with 0's
69 * set to their corresponding bit can be dropped in FW.
70 *
71 * -----------------------------+-----+-------+
72 * Type | Bit | Allow |
73 * -----------------------------+-----+-------+
74 * PMO_ACTION_SPECTRUM_MGMT 0 1
75 * PMO_ACTION_QOS_MGMT 1 1
76 * PMO_ACTION_DLP 2 0
77 * PMO_ACTION_BLKACK 3 0
78 * PMO_ACTION_PUBLIC_USAGE 4 1
Srinivas Girigowda31cef192017-10-09 17:31:49 -070079 * PMO_ACTION_RRM 5 0
Mukul Sharmad75a6672017-06-22 15:40:53 +053080 * PMO_ACTION_FAST_BSS_TRNST 6 0
81 * PMO_ACTION_HT 7 0
82 * PMO_ACTION_SA_QUERY 8 1
83 * PMO_ACTION_PROT_DUAL_PUB 9 1
84 * PMO_ACTION_WNM 10 1
85 * PMO_ACTION_UNPROT_WNM 11 0
86 * PMO_ACTION_TDLS 12 0
87 * PMO_ACITON_MESH 13 0
88 * PMO_ACTION_MHF 14 0
89 * PMO_SELF_PROTECTED 15 0
90 * PMO_ACTION_WME 17 1
91 * PMO_ACTION_FST 18 1
92 * PMO_ACTION_VHT 21 1
93 * ----------------------------+------+-------+
94 */
95#define ALLOWED_ACTION_FRAMES_BITMAP0 \
96 ((1 << PMO_MAC_ACTION_SPECTRUM_MGMT) | \
97 (1 << PMO_MAC_ACTION_QOS_MGMT) | \
98 (1 << PMO_MAC_ACTION_PUBLIC_USAGE) | \
Mukul Sharmad75a6672017-06-22 15:40:53 +053099 (1 << PMO_MAC_ACTION_SA_QUERY) | \
100 (1 << PMO_MAC_ACTION_PROT_DUAL_PUB) | \
101 (1 << PMO_MAC_ACTION_WNM) | \
102 (1 << PMO_MAC_ACTION_WME) | \
103 (1 << PMO_MAC_ACTION_FST) | \
104 (1 << PMO_MAC_ACTION_VHT))
105
106#define ALLOWED_ACTION_FRAMES_BITMAP1 0x0
107#define ALLOWED_ACTION_FRAMES_BITMAP2 0x0
108#define ALLOWED_ACTION_FRAMES_BITMAP3 0x0
109#define ALLOWED_ACTION_FRAMES_BITMAP4 0x0
110#define ALLOWED_ACTION_FRAMES_BITMAP5 0x0
111#define ALLOWED_ACTION_FRAMES_BITMAP6 0x0
112#define ALLOWED_ACTION_FRAMES_BITMAP7 0x0
113
114#define ALLOWED_ACTION_FRAME_MAP_WORDS (PMO_MAC_ACTION_MAX / 32)
115
Sridhar Selvaraj53166d72017-08-04 11:49:19 +0530116#ifndef ANI_SUPPORT_11H
117/*
118 * DROP_SPEC_MGMT_ACTION_FRAME_BITMAP
119 *
120 * Bitmask is based on the below. The frames with 1's
121 * set to their corresponding bit can be dropped in FW.
122 *
123 * ----------------------------------+-----+------+
124 * Type | Bit | Drop |
125 * ----------------------------------+-----+------+
126 * SIR_MAC_ACTION_MEASURE_REQUEST_ID 0 1
127 * SIR_MAC_ACTION_TPC_REQUEST_ID 1 1
128 * ----------------------------------+-----+------+
129 */
130#define DROP_SPEC_MGMT_ACTION_FRAME_BITMAP \
131 ((1 << PMO_MAC_ACTION_MEASURE_REQUEST_ID) |\
132 (1 << PMO_MAC_ACTION_TPC_REQUEST_ID))
133#else
134/*
135 * If 11H support is defined, dont drop the above action category of
136 * spectrum mgmt action frames as host driver is processing them.
137 */
138#define DROP_SPEC_MGMT_ACTION_FRAME_BITMAP 0
139#endif /* ANI_SUPPORT_11H */
Mukul Sharmad75a6672017-06-22 15:40:53 +0530140
141#define PMO_SUPPORTED_ACTION_CATE 256
142#define PMO_SUPPORTED_ACTION_CATE_ELE_LIST (PMO_SUPPORTED_ACTION_CATE/32)
143
144/**
145 * struct pmo_action_wakeup_set_params - action wakeup set params
146 * @vdev_id: virtual device id
147 * @operation: 0 reset to fw default, 1 set the bits,
148 * 2 add the setting bits, 3 delete the setting bits
149 * @action_category_map: bit mapping.
Sridhar Selvaraj53166d72017-08-04 11:49:19 +0530150 * @action_per_category: bitmap per action category
Mukul Sharmad75a6672017-06-22 15:40:53 +0530151 */
152struct pmo_action_wakeup_set_params {
153 uint32_t vdev_id;
154 uint32_t operation;
155 uint32_t action_category_map[PMO_SUPPORTED_ACTION_CATE_ELE_LIST];
Sridhar Selvaraj53166d72017-08-04 11:49:19 +0530156 uint32_t action_per_category[PMO_SUPPORTED_ACTION_CATE];
Mukul Sharmad75a6672017-06-22 15:40:53 +0530157};
158
159/**
160 * enum pmo_wow_action_wakeup_opertion: describe action wakeup operation
161 * @pmo_action_wakeup_reset: reset
162 * @pmo_action_wakeup_set: set
163 * @pmo_action_wakeup_add_set: add and set
164 * @pmo_action_wakeup_del_set: delete and set
165 */
166enum pmo_wow_action_wakeup_opertion {
167 pmo_action_wakeup_reset = 0,
168 pmo_action_wakeup_set,
169 pmo_action_wakeup_add_set,
170 pmo_action_wakeup_del_set,
171};
172
173/**
174 * struct pmo_wow - store wow patterns
175 * @wow_enable: wow enable/disable
176 * @wow_enable_cmd_sent: is wow enable command sent to fw
177 * @is_wow_bus_suspended: true if bus is suspended
178 * @target_suspend: target suspend event
179 * @target_resume: target resume event
180 * @wow_nack: wow negative ack flag
181 * @wow_initial_wake_up: target initial wake up is received
182 * @wow_wake_lock: wow wake lock
183 * @lphb_cache: lphb cache
184 * @lphb_cb_ctx: callback context for lphb, kept as void* as
185 * osif structures are opaque to pmo.
186 * @pmo_lphb_callback: registered os if calllback function
Will Huangfe649172017-09-06 16:52:18 +0800187 * @ptrn_id_def: default pattern id counter for legacy firmware
188 * @ptrn_id_usr: user pattern id counter for legacy firmware
Mukul Sharmad75a6672017-06-22 15:40:53 +0530189 *
190 * This structure stores wow patterns and
191 * wow related parameters in host.
192 */
193struct pmo_wow {
194 bool wow_enable;
195 bool wow_enable_cmd_sent;
196 bool is_wow_bus_suspended;
197 qdf_event_t target_suspend;
198 qdf_event_t target_resume;
199 int wow_nack;
200 bool wow_initial_wake_up;
201 qdf_wake_lock_t wow_wake_lock;
202 /*
203 * currently supports only vdev 0.
204 * cache has two entries: one for TCP and one for UDP.
205 */
206 struct pmo_lphb_req lphb_cache[2];
207 void *lphb_cb_ctx;
208 pmo_lphb_callback lphb_cb;
Will Huangfe649172017-09-06 16:52:18 +0800209
210 uint8_t ptrn_id_def;
211 uint8_t ptrn_id_usr;
Mukul Sharmad75a6672017-06-22 15:40:53 +0530212};
213
214/* WOW related structures */
215/**
216 * struct pmo_wow_add_pattern - wow pattern add structure
217 * @pattern_id: pattern id
218 * @pattern_byte_offset: pattern byte offset from beginning of the 802.11
219 * packet to start of the wake-up pattern
220 * @pattern_size: pattern size
221 * @pattern: pattern byte stream
222 * @pattern_mask_size: pattern mask size
223 * @pattern_mask: pattern mask
224 * @session_id: session id
225 */
226struct pmo_wow_add_pattern {
227 uint8_t pattern_id;
228 uint8_t pattern_byte_offset;
229 uint8_t pattern_size;
230 uint8_t pattern[PMO_WOWL_BCAST_PATTERN_MAX_SIZE];
231 uint8_t pattern_mask_size;
232 uint8_t pattern_mask[PMO_WOWL_BCAST_PATTERN_MAX_SIZE];
233 uint8_t session_id;
234};
235
236/**
237 * struct pmo_wow_add_pattern - wow pattern add structure
238 * @magic_pkt_enable: enables or disables magic packet filtering
239 * @wow_deauth_rcv: This configuration is valid only when magicPktEnable=1,
240 * It requests hardware to wake up when it receives the
241 * Deauthentication Frame.
242 * @pattern_filtering_enable: Enables/disables packet pattern filtering
243 * @wow_bss_conn_loss: wake up host when bss connection lost
244 */
245struct pmo_wow_enter_params {
246 uint8_t magic_pkt_enable;
247 uint8_t wow_deauth_rcv;
248 uint8_t pattern_filtering_enable;
249 uint8_t wow_bss_conn_loss;
250};
251
252/**
253 * struct pmo_wow_cmd_params - wow cmd parameter
254 * @enable: wow enable or disable flag
255 * @can_suspend_link: flag to indicate if link can be suspended
256 * @pause_iface_config: interface config
257 */
258struct pmo_wow_cmd_params {
259 bool enable;
260 bool can_suspend_link;
261 uint8_t pause_iface_config;
262 uint32_t flags;
263};
264
265/**
266 * struct pmo_suspend_params - suspend cmd parameter
267 * @disable_target_intr: disable target interrupt
268 */
269struct pmo_suspend_params {
270 uint8_t disable_target_intr;
271};
272
273#endif /* end of _WLAN_PMO_WOW_PUBLIC_STRUCT_H_ */