p2p_role.h 8.7 KB

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