import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / misc / mediatek / connectivity / combo / drv_wlan / mt6630 / wlan / include / mgmt / p2p_role.h
1 #ifndef _P2P_ROLE_H
2 #define _P2P_ROLE_H
3
4
5 typedef enum _ENUM_BUFFER_TYPE_T {
6 ENUM_FRAME_TYPE_EXTRA_IE_BEACON,
7 ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP,
8 ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP,
9 ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE,
10 ENUM_FRAME_TYPE_BEACON_TEMPLATE,
11 ENUM_FRAME_IE_NUM
12 } ENUM_BUFFER_TYPE_T, *P_ENUM_BUFFER_TYPE_T;
13
14 typedef enum _ENUM_HIDDEN_SSID_TYPE_T {
15 ENUM_HIDDEN_SSID_NONE,
16 ENUM_HIDDEN_SSID_LEN,
17 ENUM_HIDDEN_SSID_ZERO_CONTENT,
18 ENUM_HIDDEN_SSID_NUM
19 } ENUM_HIDDEN_SSID_TYPE_T, *P_ENUM_HIDDEN_SSID_TYPE_T;
20
21
22 typedef struct _P2P_BEACON_UPDATE_INFO_T {
23 PUINT_8 pucBcnHdr;
24 UINT_32 u4BcnHdrLen;
25 PUINT_8 pucBcnBody;
26 UINT_32 u4BcnBodyLen;
27 } P2P_BEACON_UPDATE_INFO_T, *P_P2P_BEACON_UPDATE_INFO_T;
28
29 typedef struct _P2P_PROBE_RSP_UPDATE_INFO_T {
30 P_MSDU_INFO_T prProbeRspMsduTemplate;
31 } P2P_PROBE_RSP_UPDATE_INFO_T, *P_P2P_PROBE_RSP_UPDATE_INFO_T;
32
33 typedef struct _P2P_ASSOC_RSP_UPDATE_INFO_T {
34 PUINT_8 pucAssocRspExtIE;
35 UINT_16 u2AssocIELen;
36 } P2P_ASSOC_RSP_UPDATE_INFO_T, *P_P2P_ASSOC_RSP_UPDATE_INFO_T;
37
38
39 typedef struct _AP_CRYPTO_SETTINGS_T {
40 UINT_32 u4WpaVersion;
41 UINT_32 u4CipherGroup;
42 INT_32 i4NumOfCiphers;
43 UINT_32 aucCiphersPairwise[5];
44 INT_32 i4NumOfAkmSuites;
45 UINT_32 aucAkmSuites[2];
46 BOOLEAN fgIsControlPort;
47 UINT_16 u2ControlPortBE;
48 BOOLEAN fgIsControlPortEncrypt;
49 } AP_CRYPTO_SETTINGS_T, *P_AP_CRYPTO_SETTINGS_T;
50
51 /* ////////////////////////////////// Message //////////////////////////////////////////////////// */
52
53 typedef struct _MSG_P2P_BEACON_UPDATE_T {
54 MSG_HDR_T rMsgHdr;
55 UINT_8 ucRoleIndex;
56 UINT_32 u4BcnHdrLen;
57 UINT_32 u4BcnBodyLen;
58 PUINT_8 pucBcnHdr;
59 PUINT_8 pucBcnBody;
60 UINT_8 aucBuffer[1]; /* Header & Body are put here. */
61 } MSG_P2P_BEACON_UPDATE_T, *P_MSG_P2P_BEACON_UPDATE_T;
62
63 typedef struct _MSG_P2P_MGMT_FRAME_UPDATE_T {
64 MSG_HDR_T rMsgHdr;
65 ENUM_BUFFER_TYPE_T eBufferType;
66 UINT_32 u4BufferLen;
67 UINT_8 aucBuffer[1];
68 } MSG_P2P_MGMT_FRAME_UPDATE_T, *P_MSG_P2P_MGMT_FRAME_UPDATE_T;
69
70
71 typedef struct _MSG_P2P_SWITCH_OP_MODE_T {
72 MSG_HDR_T rMsgHdr;/* Must be the first member */
73 ENUM_OP_MODE_T eOpMode;
74 UINT_8 ucRoleIdx;
75 } MSG_P2P_SWITCH_OP_MODE_T, *P_MSG_P2P_SWITCH_OP_MODE_T;
76
77 typedef struct _MSG_P2P_MGMT_FRAME_REGISTER_T {
78 MSG_HDR_T rMsgHdr;/* Must be the first member */
79 UINT_16 u2FrameType;
80 BOOLEAN fgIsRegister;
81 } MSG_P2P_MGMT_FRAME_REGISTER_T, *P_MSG_P2P_MGMT_FRAME_REGISTER_T;
82
83 typedef struct _MSG_P2P_CHNL_ABORT_T {
84 MSG_HDR_T rMsgHdr;/* Must be the first member */
85 UINT_64 u8Cookie;
86 } MSG_P2P_CHNL_ABORT_T, *P_MSG_P2P_CHNL_ABORT_T;
87
88
89 typedef struct _MSG_P2P_CONNECTION_REQUEST_T {
90 MSG_HDR_T rMsgHdr;/* Must be the first member */
91 UINT_8 ucRoleIdx;
92 P2P_SSID_STRUCT_T rSsid;
93 UINT_8 aucBssid[MAC_ADDR_LEN];
94 ENUM_CHNL_EXT_T eChnlSco;
95 RF_CHANNEL_INFO_T rChannelInfo;
96 UINT_32 u4IELen;
97 UINT_8 aucIEBuf[1];
98 /* TODO: Auth Type, OPEN, SHARED, FT, EAP... */
99 } MSG_P2P_CONNECTION_REQUEST_T, *P_MSG_P2P_CONNECTION_REQUEST_T;
100
101
102 typedef struct _MSG_P2P_CONNECTION_ABORT_T {
103 MSG_HDR_T rMsgHdr;/* Must be the first member. */
104 UINT_8 ucRoleIdx;
105 UINT_8 aucTargetID[MAC_ADDR_LEN];
106 UINT_16 u2ReasonCode;
107 BOOLEAN fgSendDeauth;
108 } MSG_P2P_CONNECTION_ABORT_T, *P_MSG_P2P_CONNECTION_ABORT_T;
109
110
111 typedef struct _MSG_P2P_START_AP_T {
112 MSG_HDR_T rMsgHdr;
113 UINT_32 u4DtimPeriod;
114 UINT_32 u4BcnInterval;
115 UINT_8 aucSsid[32];
116 UINT_16 u2SsidLen;
117 UINT_8 ucHiddenSsidType;
118 BOOLEAN fgIsPrivacy;
119 UINT_8 ucRoleIdx;
120 AP_CRYPTO_SETTINGS_T rEncryptionSettings;
121 INT_32 i4InactiveTimeout;
122 } MSG_P2P_START_AP_T, *P_MSG_P2P_START_AP_T;
123
124
125 typedef struct _P2P_STATION_INFO_T {
126 UINT_32 u4InactiveTime;
127 UINT_32 u4RxBytes; /* TODO: */
128 UINT_32 u4TxBytes; /* TODO: */
129 UINT_32 u4RxPackets; /* TODO: */
130 UINT_32 u4TxPackets; /* TODO: */
131 /* TODO: Add more for requirement. */
132 } P2P_STATION_INFO_T, *P_P2P_STATION_INFO_T;
133
134
135
136 /* 3 --------------- WFA P2P Attributes Handler prototype --------------- */
137 typedef UINT_32 (*PFN_APPEND_ATTRI_FUNC) (P_ADAPTER_T, BOOLEAN, PUINT_16, PUINT_8, UINT_16);
138
139 typedef UINT_32 (*PFN_CALCULATE_VAR_ATTRI_LEN_FUNC) (P_ADAPTER_T, P_STA_RECORD_T);
140
141
142 typedef struct _APPEND_VAR_ATTRI_ENTRY_T {
143 UINT_16 u2EstimatedFixedAttriLen; /* For fixed length */
144 PFN_CALCULATE_VAR_ATTRI_LEN_FUNC pfnCalculateVariableAttriLen;
145 PFN_APPEND_ATTRI_FUNC pfnAppendAttri;
146 } APPEND_VAR_ATTRI_ENTRY_T, *P_APPEND_VAR_ATTRI_ENTRY_T;
147
148 /* //////////////////////////////////////////////////////////////// */
149
150
151 typedef enum _ENUM_P2P_ROLE_STATE_T {
152 P2P_ROLE_STATE_IDLE = 0,
153 P2P_ROLE_STATE_SCAN,
154 P2P_ROLE_STATE_REQING_CHANNEL,
155 P2P_ROLE_STATE_AP_CHNL_DETECTION, /* Requesting Channel to Send Specific Frame. */
156 P2P_ROLE_STATE_GC_JOIN,
157 P2P_ROLE_STATE_NUM
158 } ENUM_P2P_ROLE_STATE_T, *P_ENUM_P2P_ROLE_STATE_T;
159
160 typedef enum _ENUM_P2P_CONNECTION_TYPE_T {
161 P2P_CONNECTION_TYPE_IDLE = 0,
162 P2P_CONNECTION_TYPE_GO,
163 P2P_CONNECTION_TYPE_GC,
164 P2P_CONNECTION_TYPE_PURE_AP,
165 P2P_CONNECTION_TYPE_NUM
166 } ENUM_P2P_CONNECTION_TYPE_T, *P_ENUM_P2P_CONNECTION_TYPE_T;
167
168 typedef struct _P2P_JOIN_INFO_T {
169 UINT_32 ucSeqNumOfReqMsg;
170 UINT_8 ucAvailableAuthTypes;
171 P_STA_RECORD_T prTargetStaRec;
172 P_BSS_DESC_T prTargetBssDesc;
173 BOOLEAN fgIsJoinComplete;
174 /* For ASSOC Rsp. */
175 UINT_32 u4BufLength;
176 UINT_8 aucIEBuf[MAX_IE_LENGTH];
177 } P2P_JOIN_INFO_T, *P_P2P_JOIN_INFO_T;
178
179 /* For STA & AP mode. */
180 typedef struct _P2P_CONNECTION_REQ_INFO_T {
181 ENUM_P2P_CONNECTION_TYPE_T eConnRequest;
182 P2P_SSID_STRUCT_T rSsidStruct;
183 UINT_8 aucBssid[MAC_ADDR_LEN];
184
185 /* AP preferred channel. */
186 RF_CHANNEL_INFO_T rChannelInfo;
187 ENUM_CHNL_EXT_T eChnlExt;
188
189 /* For ASSOC Req. */
190 UINT_32 u4BufLength;
191 UINT_8 aucIEBuf[MAX_IE_LENGTH];
192 } P2P_CONNECTION_REQ_INFO_T, *P_P2P_CONNECTION_REQ_INFO_T;
193
194
195 #define P2P_ROLE_INDEX_2_ROLE_FSM_INFO(_prAdapter, _RoleIndex) \
196 ((_prAdapter)->rWifiVar.aprP2pRoleFsmInfo[_RoleIndex])
197
198 struct _P2P_ROLE_FSM_INFO_T {
199 UINT_8 ucRoleIndex;
200
201 UINT_8 ucBssIndex;
202
203 /* State related. */
204 ENUM_P2P_ROLE_STATE_T eCurrentState;
205
206 /* Channel related. */
207 P2P_CHNL_REQ_INFO_T rChnlReqInfo;
208
209 /* Scan related. */
210 P2P_SCAN_REQ_INFO_T rScanReqInfo;
211
212 /* FSM Timer */
213 TIMER_T rP2pRoleFsmTimeoutTimer;
214
215 /* Packet filter for P2P module. */
216 UINT_32 u4P2pPacketFilter;
217
218 /* GC Join related. */
219 P2P_JOIN_INFO_T rJoinInfo;
220
221 /* Connection related. */
222 P2P_CONNECTION_REQ_INFO_T rConnReqInfo;
223
224 /* Beacon Information. */
225 P2P_BEACON_UPDATE_INFO_T rBeaconUpdateInfo;
226 };
227
228 /*========================= Initial ============================*/
229
230
231 UINT_8 p2pRoleFsmInit(IN P_ADAPTER_T prAdapter, IN UINT_8 ucRoleIdx);
232
233
234 VOID p2pRoleFsmUninit(IN P_ADAPTER_T prAdapter, IN UINT_8 ucRoleIdx);
235
236 /*================== Message Event ==================*/
237
238 VOID p2pRoleFsmRunEventAbort(IN P_ADAPTER_T prAdapter, IN P_P2P_ROLE_FSM_INFO_T prP2pRoleFsmInfo);
239
240
241 VOID p2pRoleFsmRunEventStartAP(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
242
243
244 VOID p2pRoleFsmRunEventStopAP(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
245
246 VOID p2pRoleFsmRunEventScanRequest(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
247
248
249 VOID
250 p2pRoleFsmRunEventScanDone(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr, IN P_P2P_ROLE_FSM_INFO_T
251 prP2pRoleFsmInfo);
252
253
254
255 VOID p2pRoleFsmRunEventJoinComplete(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
256
257 VOID p2pRoleFsmRunEventTimeout(IN P_ADAPTER_T prAdapter, IN ULONG ulParamPtr);
258
259
260
261 VOID p2pRoleFsmRunEventBeaconTimeout(IN P_ADAPTER_T prAdapter, IN P_BSS_INFO_T prP2pBssInfo);
262
263 WLAN_STATUS
264 p2pRoleFsmRunEventAAAComplete(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec, IN P_BSS_INFO_T prP2pBssInfo);
265
266
267 WLAN_STATUS
268 p2pRoleFsmRunEventAAASuccess(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec, IN P_BSS_INFO_T prP2pBssInfo);
269
270 VOID
271 p2pRoleFsmRunEventAAATxFail(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec, IN P_BSS_INFO_T prP2pBssInfo);
272
273 VOID p2pRoleFsmRunEventConnectionRequest(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
274
275 VOID p2pRoleFsmRunEventConnectionAbort(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
276
277
278 VOID
279 p2pRoleFsmRunEventChnlGrant(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr, IN P_P2P_ROLE_FSM_INFO_T
280 prP2pRoleFsmInfo);
281
282 WLAN_STATUS
283 p2pRoleFsmRunEventDeauthTxDone(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T
284 rTxDoneStatus);
285
286
287 VOID
288 p2pRoleFsmRunEventRxDeauthentication(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec, IN P_SW_RFB_T prSwRfb);
289
290 VOID
291 p2pRoleFsmRunEventRxDisassociation(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec, IN P_SW_RFB_T prSwRfb);
292
293 /* //////////////////////// TO BE REFINE ///////////////////// */
294 VOID p2pRoleFsmRunEventSwitchOPMode(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
295
296 VOID p2pFsmRunEventBeaconUpdate(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
297
298 VOID p2pRoleFsmRunEventDissolve(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
299
300
301 VOID
302 p2pProcessEvent_UpdateNOAParam(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIdx, IN P_EVENT_UPDATE_NOA_PARAMS_T
303 prEventUpdateNoaParam);
304
305
306 #endif