blob: 46d7048b5db83f5c5340b04dc9e8bb5d351cbfa9 [file] [log] [blame]
Mukul Sharmad75a6672017-06-22 15:40:53 +05301/*
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*/
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 */
25
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
63/*
64 * ALLOWED_ACTION_FRAMES_BITMAP
65 *
66 * Bitmask is based on the below. The frames with 0's
67 * set to their corresponding bit can be dropped in FW.
68 *
69 * -----------------------------+-----+-------+
70 * Type | Bit | Allow |
71 * -----------------------------+-----+-------+
72 * PMO_ACTION_SPECTRUM_MGMT 0 1
73 * PMO_ACTION_QOS_MGMT 1 1
74 * PMO_ACTION_DLP 2 0
75 * PMO_ACTION_BLKACK 3 0
76 * PMO_ACTION_PUBLIC_USAGE 4 1
77 * PMO_ACTION_RRM 5 1
78 * PMO_ACTION_FAST_BSS_TRNST 6 0
79 * PMO_ACTION_HT 7 0
80 * PMO_ACTION_SA_QUERY 8 1
81 * PMO_ACTION_PROT_DUAL_PUB 9 1
82 * PMO_ACTION_WNM 10 1
83 * PMO_ACTION_UNPROT_WNM 11 0
84 * PMO_ACTION_TDLS 12 0
85 * PMO_ACITON_MESH 13 0
86 * PMO_ACTION_MHF 14 0
87 * PMO_SELF_PROTECTED 15 0
88 * PMO_ACTION_WME 17 1
89 * PMO_ACTION_FST 18 1
90 * PMO_ACTION_VHT 21 1
91 * ----------------------------+------+-------+
92 */
93#define ALLOWED_ACTION_FRAMES_BITMAP0 \
94 ((1 << PMO_MAC_ACTION_SPECTRUM_MGMT) | \
95 (1 << PMO_MAC_ACTION_QOS_MGMT) | \
96 (1 << PMO_MAC_ACTION_PUBLIC_USAGE) | \
97 (1 << PMO_MAC_ACTION_RRM) | \
98 (1 << PMO_MAC_ACTION_SA_QUERY) | \
99 (1 << PMO_MAC_ACTION_PROT_DUAL_PUB) | \
100 (1 << PMO_MAC_ACTION_WNM) | \
101 (1 << PMO_MAC_ACTION_WME) | \
102 (1 << PMO_MAC_ACTION_FST) | \
103 (1 << PMO_MAC_ACTION_VHT))
104
105#define ALLOWED_ACTION_FRAMES_BITMAP1 0x0
106#define ALLOWED_ACTION_FRAMES_BITMAP2 0x0
107#define ALLOWED_ACTION_FRAMES_BITMAP3 0x0
108#define ALLOWED_ACTION_FRAMES_BITMAP4 0x0
109#define ALLOWED_ACTION_FRAMES_BITMAP5 0x0
110#define ALLOWED_ACTION_FRAMES_BITMAP6 0x0
111#define ALLOWED_ACTION_FRAMES_BITMAP7 0x0
112
113#define ALLOWED_ACTION_FRAME_MAP_WORDS (PMO_MAC_ACTION_MAX / 32)
114
115
116#define PMO_SUPPORTED_ACTION_CATE 256
117#define PMO_SUPPORTED_ACTION_CATE_ELE_LIST (PMO_SUPPORTED_ACTION_CATE/32)
118
119/**
120 * struct pmo_action_wakeup_set_params - action wakeup set params
121 * @vdev_id: virtual device id
122 * @operation: 0 reset to fw default, 1 set the bits,
123 * 2 add the setting bits, 3 delete the setting bits
124 * @action_category_map: bit mapping.
125 */
126struct pmo_action_wakeup_set_params {
127 uint32_t vdev_id;
128 uint32_t operation;
129 uint32_t action_category_map[PMO_SUPPORTED_ACTION_CATE_ELE_LIST];
130};
131
132/**
133 * enum pmo_wow_action_wakeup_opertion: describe action wakeup operation
134 * @pmo_action_wakeup_reset: reset
135 * @pmo_action_wakeup_set: set
136 * @pmo_action_wakeup_add_set: add and set
137 * @pmo_action_wakeup_del_set: delete and set
138 */
139enum pmo_wow_action_wakeup_opertion {
140 pmo_action_wakeup_reset = 0,
141 pmo_action_wakeup_set,
142 pmo_action_wakeup_add_set,
143 pmo_action_wakeup_del_set,
144};
145
146/**
147 * struct pmo_wow - store wow patterns
148 * @wow_enable: wow enable/disable
149 * @wow_enable_cmd_sent: is wow enable command sent to fw
150 * @is_wow_bus_suspended: true if bus is suspended
151 * @target_suspend: target suspend event
152 * @target_resume: target resume event
153 * @wow_nack: wow negative ack flag
154 * @wow_initial_wake_up: target initial wake up is received
155 * @wow_wake_lock: wow wake lock
156 * @lphb_cache: lphb cache
157 * @lphb_cb_ctx: callback context for lphb, kept as void* as
158 * osif structures are opaque to pmo.
159 * @pmo_lphb_callback: registered os if calllback function
160 *
161 * This structure stores wow patterns and
162 * wow related parameters in host.
163 */
164struct pmo_wow {
165 bool wow_enable;
166 bool wow_enable_cmd_sent;
167 bool is_wow_bus_suspended;
168 qdf_event_t target_suspend;
169 qdf_event_t target_resume;
170 int wow_nack;
171 bool wow_initial_wake_up;
172 qdf_wake_lock_t wow_wake_lock;
173 /*
174 * currently supports only vdev 0.
175 * cache has two entries: one for TCP and one for UDP.
176 */
177 struct pmo_lphb_req lphb_cache[2];
178 void *lphb_cb_ctx;
179 pmo_lphb_callback lphb_cb;
180};
181
182/* WOW related structures */
183/**
184 * struct pmo_wow_add_pattern - wow pattern add structure
185 * @pattern_id: pattern id
186 * @pattern_byte_offset: pattern byte offset from beginning of the 802.11
187 * packet to start of the wake-up pattern
188 * @pattern_size: pattern size
189 * @pattern: pattern byte stream
190 * @pattern_mask_size: pattern mask size
191 * @pattern_mask: pattern mask
192 * @session_id: session id
193 */
194struct pmo_wow_add_pattern {
195 uint8_t pattern_id;
196 uint8_t pattern_byte_offset;
197 uint8_t pattern_size;
198 uint8_t pattern[PMO_WOWL_BCAST_PATTERN_MAX_SIZE];
199 uint8_t pattern_mask_size;
200 uint8_t pattern_mask[PMO_WOWL_BCAST_PATTERN_MAX_SIZE];
201 uint8_t session_id;
202};
203
204/**
205 * struct pmo_wow_add_pattern - wow pattern add structure
206 * @magic_pkt_enable: enables or disables magic packet filtering
207 * @wow_deauth_rcv: This configuration is valid only when magicPktEnable=1,
208 * It requests hardware to wake up when it receives the
209 * Deauthentication Frame.
210 * @pattern_filtering_enable: Enables/disables packet pattern filtering
211 * @wow_bss_conn_loss: wake up host when bss connection lost
212 */
213struct pmo_wow_enter_params {
214 uint8_t magic_pkt_enable;
215 uint8_t wow_deauth_rcv;
216 uint8_t pattern_filtering_enable;
217 uint8_t wow_bss_conn_loss;
218};
219
220/**
221 * struct pmo_wow_cmd_params - wow cmd parameter
222 * @enable: wow enable or disable flag
223 * @can_suspend_link: flag to indicate if link can be suspended
224 * @pause_iface_config: interface config
225 */
226struct pmo_wow_cmd_params {
227 bool enable;
228 bool can_suspend_link;
229 uint8_t pause_iface_config;
230 uint32_t flags;
231};
232
233/**
234 * struct pmo_suspend_params - suspend cmd parameter
235 * @disable_target_intr: disable target interrupt
236 */
237struct pmo_suspend_params {
238 uint8_t disable_target_intr;
239};
240
241#endif /* end of _WLAN_PMO_WOW_PUBLIC_STRUCT_H_ */