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
,
12 } ENUM_BUFFER_TYPE_T
, *P_ENUM_BUFFER_TYPE_T
;
14 typedef enum _ENUM_HIDDEN_SSID_TYPE_T
{
15 ENUM_HIDDEN_SSID_NONE
,
17 ENUM_HIDDEN_SSID_ZERO_CONTENT
,
19 } ENUM_HIDDEN_SSID_TYPE_T
, *P_ENUM_HIDDEN_SSID_TYPE_T
;
22 typedef struct _P2P_BEACON_UPDATE_INFO_T
{
27 } P2P_BEACON_UPDATE_INFO_T
, *P_P2P_BEACON_UPDATE_INFO_T
;
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
;
33 typedef struct _P2P_ASSOC_RSP_UPDATE_INFO_T
{
34 PUINT_8 pucAssocRspExtIE
;
36 } P2P_ASSOC_RSP_UPDATE_INFO_T
, *P_P2P_ASSOC_RSP_UPDATE_INFO_T
;
39 typedef struct _AP_CRYPTO_SETTINGS_T
{
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
;
51 /* ////////////////////////////////// Message //////////////////////////////////////////////////// */
53 typedef struct _MSG_P2P_BEACON_UPDATE_T
{
60 UINT_8 aucBuffer
[1]; /* Header & Body are put here. */
61 } MSG_P2P_BEACON_UPDATE_T
, *P_MSG_P2P_BEACON_UPDATE_T
;
63 typedef struct _MSG_P2P_MGMT_FRAME_UPDATE_T
{
65 ENUM_BUFFER_TYPE_T eBufferType
;
68 } MSG_P2P_MGMT_FRAME_UPDATE_T
, *P_MSG_P2P_MGMT_FRAME_UPDATE_T
;
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
;
75 } MSG_P2P_SWITCH_OP_MODE_T
, *P_MSG_P2P_SWITCH_OP_MODE_T
;
77 typedef struct _MSG_P2P_MGMT_FRAME_REGISTER_T
{
78 MSG_HDR_T rMsgHdr
;/* Must be the first member */
81 } MSG_P2P_MGMT_FRAME_REGISTER_T
, *P_MSG_P2P_MGMT_FRAME_REGISTER_T
;
83 typedef struct _MSG_P2P_CHNL_ABORT_T
{
84 MSG_HDR_T rMsgHdr
;/* Must be the first member */
86 } MSG_P2P_CHNL_ABORT_T
, *P_MSG_P2P_CHNL_ABORT_T
;
89 typedef struct _MSG_P2P_CONNECTION_REQUEST_T
{
90 MSG_HDR_T rMsgHdr
;/* Must be the first member */
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
;
98 /* TODO: Auth Type, OPEN, SHARED, FT, EAP... */
99 } MSG_P2P_CONNECTION_REQUEST_T
, *P_MSG_P2P_CONNECTION_REQUEST_T
;
102 typedef struct _MSG_P2P_CONNECTION_ABORT_T
{
103 MSG_HDR_T rMsgHdr
;/* Must be the first member. */
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
;
111 typedef struct _MSG_P2P_START_AP_T
{
113 UINT_32 u4DtimPeriod
;
114 UINT_32 u4BcnInterval
;
117 UINT_8 ucHiddenSsidType
;
120 AP_CRYPTO_SETTINGS_T rEncryptionSettings
;
121 INT_32 i4InactiveTimeout
;
122 } MSG_P2P_START_AP_T
, *P_MSG_P2P_START_AP_T
;
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
;
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
);
139 typedef UINT_32 (*PFN_CALCULATE_VAR_ATTRI_LEN_FUNC
) (P_ADAPTER_T
, P_STA_RECORD_T
);
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
;
148 /* //////////////////////////////////////////////////////////////// */
151 typedef enum _ENUM_P2P_ROLE_STATE_T
{
152 P2P_ROLE_STATE_IDLE
= 0,
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
,
158 } ENUM_P2P_ROLE_STATE_T
, *P_ENUM_P2P_ROLE_STATE_T
;
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
;
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
;
176 UINT_8 aucIEBuf
[MAX_IE_LENGTH
];
177 } P2P_JOIN_INFO_T
, *P_P2P_JOIN_INFO_T
;
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
];
185 /* AP preferred channel. */
186 RF_CHANNEL_INFO_T rChannelInfo
;
187 ENUM_CHNL_EXT_T eChnlExt
;
191 UINT_8 aucIEBuf
[MAX_IE_LENGTH
];
192 } P2P_CONNECTION_REQ_INFO_T
, *P_P2P_CONNECTION_REQ_INFO_T
;
195 #define P2P_ROLE_INDEX_2_ROLE_FSM_INFO(_prAdapter, _RoleIndex) \
196 ((_prAdapter)->rWifiVar.aprP2pRoleFsmInfo[_RoleIndex])
198 struct _P2P_ROLE_FSM_INFO_T
{
204 ENUM_P2P_ROLE_STATE_T eCurrentState
;
206 /* Channel related. */
207 P2P_CHNL_REQ_INFO_T rChnlReqInfo
;
210 P2P_SCAN_REQ_INFO_T rScanReqInfo
;
213 TIMER_T rP2pRoleFsmTimeoutTimer
;
215 /* Packet filter for P2P module. */
216 UINT_32 u4P2pPacketFilter
;
218 /* GC Join related. */
219 P2P_JOIN_INFO_T rJoinInfo
;
221 /* Connection related. */
222 P2P_CONNECTION_REQ_INFO_T rConnReqInfo
;
224 /* Beacon Information. */
225 P2P_BEACON_UPDATE_INFO_T rBeaconUpdateInfo
;
228 /*========================= Initial ============================*/
231 UINT_8
p2pRoleFsmInit(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucRoleIdx
);
234 VOID
p2pRoleFsmUninit(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucRoleIdx
);
236 /*================== Message Event ==================*/
238 VOID
p2pRoleFsmRunEventAbort(IN P_ADAPTER_T prAdapter
, IN P_P2P_ROLE_FSM_INFO_T prP2pRoleFsmInfo
);
241 VOID
p2pRoleFsmRunEventStartAP(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
);
244 VOID
p2pRoleFsmRunEventStopAP(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
);
246 VOID
p2pRoleFsmRunEventScanRequest(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
);
250 p2pRoleFsmRunEventScanDone(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
, IN P_P2P_ROLE_FSM_INFO_T
255 VOID
p2pRoleFsmRunEventJoinComplete(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
);
257 VOID
p2pRoleFsmRunEventTimeout(IN P_ADAPTER_T prAdapter
, IN ULONG ulParamPtr
);
261 VOID
p2pRoleFsmRunEventBeaconTimeout(IN P_ADAPTER_T prAdapter
, IN P_BSS_INFO_T prP2pBssInfo
);
264 p2pRoleFsmRunEventAAAComplete(IN P_ADAPTER_T prAdapter
, IN P_STA_RECORD_T prStaRec
, IN P_BSS_INFO_T prP2pBssInfo
);
268 p2pRoleFsmRunEventAAASuccess(IN P_ADAPTER_T prAdapter
, IN P_STA_RECORD_T prStaRec
, IN P_BSS_INFO_T prP2pBssInfo
);
271 p2pRoleFsmRunEventAAATxFail(IN P_ADAPTER_T prAdapter
, IN P_STA_RECORD_T prStaRec
, IN P_BSS_INFO_T prP2pBssInfo
);
273 VOID
p2pRoleFsmRunEventConnectionRequest(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
);
275 VOID
p2pRoleFsmRunEventConnectionAbort(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
);
279 p2pRoleFsmRunEventChnlGrant(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
, IN P_P2P_ROLE_FSM_INFO_T
283 p2pRoleFsmRunEventDeauthTxDone(IN P_ADAPTER_T prAdapter
, IN P_MSDU_INFO_T prMsduInfo
, IN ENUM_TX_RESULT_CODE_T
288 p2pRoleFsmRunEventRxDeauthentication(IN P_ADAPTER_T prAdapter
, IN P_STA_RECORD_T prStaRec
, IN P_SW_RFB_T prSwRfb
);
291 p2pRoleFsmRunEventRxDisassociation(IN P_ADAPTER_T prAdapter
, IN P_STA_RECORD_T prStaRec
, IN P_SW_RFB_T prSwRfb
);
293 /* //////////////////////// TO BE REFINE ///////////////////// */
294 VOID
p2pRoleFsmRunEventSwitchOPMode(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
);
296 VOID
p2pFsmRunEventBeaconUpdate(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
);
298 VOID
p2pRoleFsmRunEventDissolve(IN P_ADAPTER_T prAdapter
, IN P_MSG_HDR_T prMsgHdr
);
302 p2pProcessEvent_UpdateNOAParam(IN P_ADAPTER_T prAdapter
, IN UINT_8 ucBssIdx
, IN P_EVENT_UPDATE_NOA_PARAMS_T
303 prEventUpdateNoaParam
);