p2p_dev.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. typedef enum _ENUM_P2P_DEV_STATE_T {
  2. P2P_DEV_STATE_IDLE = 0,
  3. P2P_DEV_STATE_SCAN,
  4. P2P_DEV_STATE_REQING_CHANNEL,
  5. P2P_DEV_STATE_CHNL_ON_HAND,
  6. P2P_DEV_STATE_OFF_CHNL_TX, /* Requesting Channel to Send Specific Frame. */
  7. P2P_DEV_STATE_NUM
  8. } ENUM_P2P_DEV_STATE_T, *P_ENUM_P2P_DEV_STATE_T;
  9. enum _ENUM_P2P_DEV_EXT_LISTEN_T {
  10. P2P_DEV_NOT_EXT_LISTEN,
  11. P2P_DEV_EXT_LISTEN_ING,
  12. P2P_DEV_EXT_LISTEN_WAITFOR_TIMEOUT,
  13. P2P_DEV_EXT_LISTEN_NUM
  14. };
  15. /*-------------------- EVENT MESSAGE ---------------------*/
  16. typedef struct _MSG_P2P_SCAN_REQUEST_T {
  17. MSG_HDR_T rMsgHdr; /* Must be the first member */
  18. UINT_8 ucBssIdx;
  19. ENUM_SCAN_TYPE_T eScanType;
  20. P_P2P_SSID_STRUCT_T prSSID;
  21. INT_32 i4SsidNum;
  22. UINT_32 u4NumChannel;
  23. PUINT_8 pucIEBuf;
  24. UINT_32 u4IELen;
  25. BOOLEAN fgIsAbort;
  26. RF_CHANNEL_INFO_T arChannelListInfo[1];
  27. } MSG_P2P_SCAN_REQUEST_T, *P_MSG_P2P_SCAN_REQUEST_T;
  28. typedef struct _MSG_P2P_CHNL_REQUEST_T {
  29. MSG_HDR_T rMsgHdr; /* Must be the first member */
  30. UINT_64 u8Cookie;
  31. UINT_32 u4Duration;
  32. ENUM_CHNL_EXT_T eChnlSco;
  33. RF_CHANNEL_INFO_T rChannelInfo;
  34. ENUM_CH_REQ_TYPE_T eChnlReqType;
  35. } MSG_P2P_CHNL_REQUEST_T, *P_MSG_P2P_CHNL_REQUEST_T;
  36. typedef struct _MSG_P2P_MGMT_TX_REQUEST_T {
  37. MSG_HDR_T rMsgHdr;
  38. UINT_8 ucBssIdx;
  39. P_MSDU_INFO_T prMgmtMsduInfo;
  40. UINT_64 u8Cookie; /* For indication. */
  41. BOOLEAN fgNoneCckRate;
  42. BOOLEAN fgIsOffChannel;
  43. RF_CHANNEL_INFO_T rChannelInfo; /* Off channel TX. */
  44. ENUM_CHNL_EXT_T eChnlExt;
  45. BOOLEAN fgIsWaitRsp;
  46. } MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T;
  47. struct _MSG_P2P_EXTEND_LISTEN_INTERVAL_T {
  48. MSG_HDR_T rMsgHdr;
  49. UINT_32 wait; /* interval supplicant expected to stay in listen interval */
  50. };
  51. #if CFG_SUPPORT_WFD
  52. #define WFD_FLAGS_DEV_INFO_VALID BIT(0) /* 1. WFD_DEV_INFO, 2. WFD_CTRL_PORT, 3. WFD_MAT_TP. */
  53. #define WFD_FLAGS_SINK_INFO_VALID BIT(1) /* 1. WFD_SINK_STATUS, 2. WFD_SINK_MAC. */
  54. #define WFD_FLAGS_ASSOC_MAC_VALID BIT(2) /* 1. WFD_ASSOC_MAC. */
  55. #define WFD_FLAGS_EXT_CAPABILITY_VALID BIT(3) /* 1. WFD_EXTEND_CAPABILITY. */
  56. struct _WFD_CFG_SETTINGS_T {
  57. UINT_32 u4WfdCmdType;
  58. UINT_8 ucWfdEnable;
  59. UINT_8 ucWfdCoupleSinkStatus;
  60. UINT_8 ucWfdSessionAvailable; /* 0: NA 1:Set 2:Clear */
  61. UINT_8 ucWfdSigmaMode;
  62. UINT_16 u2WfdDevInfo;
  63. UINT_16 u2WfdControlPort;
  64. UINT_16 u2WfdMaximumTp;
  65. UINT_16 u2WfdExtendCap;
  66. UINT_8 aucWfdCoupleSinkAddress[MAC_ADDR_LEN];
  67. UINT_8 aucWfdAssociatedBssid[MAC_ADDR_LEN];
  68. UINT_8 aucWfdVideoIp[4];
  69. UINT_8 aucWfdAudioIp[4];
  70. UINT_16 u2WfdVideoPort;
  71. UINT_16 u2WfdAudioPort;
  72. UINT_32 u4WfdFlag;
  73. UINT_32 u4WfdPolicy;
  74. UINT_32 u4WfdState;
  75. UINT_8 aucWfdSessionInformationIE[24 * 8];
  76. UINT_16 u2WfdSessionInformationIELen;
  77. UINT_8 aucReserved1[2];
  78. UINT_8 aucWfdPrimarySinkMac[MAC_ADDR_LEN];
  79. UINT_8 aucWfdSecondarySinkMac[MAC_ADDR_LEN];
  80. UINT_32 u4WfdAdvancedFlag;
  81. /* Group 1 64 bytes */
  82. UINT_8 aucWfdLocalIp[4];
  83. UINT_16 u2WfdLifetimeAc2; /* Unit is 2 TU */
  84. UINT_16 u2WfdLifetimeAc3; /* Unit is 2 TU */
  85. UINT_16 u2WfdCounterThreshold; /* Unit is ms */
  86. UINT_8 aucReverved2[54];
  87. /* Group 2 64 bytes */
  88. UINT_8 aucReverved3[64];
  89. /* Group 3 64 bytes */
  90. UINT_8 aucReverved4[64];
  91. };
  92. #endif
  93. /*-------------------- P2P FSM ACTION STRUCT ---------------------*/
  94. typedef struct _P2P_OFF_CHNL_TX_REQ_INFO_T {
  95. LINK_ENTRY_T rLinkEntry;
  96. P_MSDU_INFO_T prMgmtTxMsdu;
  97. BOOLEAN fgNoneCckRate;
  98. RF_CHANNEL_INFO_T rChannelInfo; /* Off channel TX. */
  99. ENUM_CHNL_EXT_T eChnlExt;
  100. BOOLEAN fgIsWaitRsp; /* See if driver should keep at the same channel. */
  101. } P2P_OFF_CHNL_TX_REQ_INFO_T, *P_P2P_OFF_CHNL_TX_REQ_INFO_T;
  102. typedef struct _P2P_MGMT_TX_REQ_INFO_T {
  103. LINK_T rP2pTxReqLink;
  104. P_MSDU_INFO_T prMgmtTxMsdu;
  105. BOOLEAN fgIsWaitRsp;
  106. } P2P_MGMT_TX_REQ_INFO_T, *P_P2P_MGMT_TX_REQ_INFO_T;
  107. struct _P2P_DEV_FSM_INFO_T {
  108. UINT_8 ucBssIndex;
  109. /* State related. */
  110. ENUM_P2P_DEV_STATE_T eCurrentState;
  111. /* Channel related. */
  112. P2P_CHNL_REQ_INFO_T rChnlReqInfo;
  113. /* Scan related. */
  114. P2P_SCAN_REQ_INFO_T rScanReqInfo;
  115. /* Mgmt tx related. */
  116. P2P_MGMT_TX_REQ_INFO_T rMgmtTxInfo;
  117. /* FSM Timer */
  118. TIMER_T rP2pFsmTimeoutTimer;
  119. /* Packet filter for P2P module. */
  120. UINT_32 u4P2pPacketFilter;
  121. enum _ENUM_P2P_DEV_EXT_LISTEN_T eListenExted;
  122. };
  123. typedef struct _MSG_P2P_NETDEV_REGISTER_T {
  124. MSG_HDR_T rMsgHdr; /* Must be the first member */
  125. BOOLEAN fgIsEnable;
  126. UINT_8 ucMode;
  127. } MSG_P2P_NETDEV_REGISTER_T, *P_MSG_P2P_NETDEV_REGISTER_T;
  128. #if CFG_SUPPORT_WFD
  129. typedef struct _MSG_WFD_CONFIG_SETTINGS_CHANGED_T {
  130. MSG_HDR_T rMsgHdr; /* Must be the first member */
  131. P_WFD_CFG_SETTINGS_T prWfdCfgSettings;
  132. } MSG_WFD_CONFIG_SETTINGS_CHANGED_T, *P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T;
  133. #endif
  134. /*========================= Initial ============================*/
  135. UINT_8 p2pDevFsmInit(IN P_ADAPTER_T prAdapter);
  136. VOID p2pDevFsmUninit(IN P_ADAPTER_T prAdapter);
  137. /*========================= FUNCTIONs ============================*/
  138. VOID
  139. p2pDevFsmStateTransition(IN P_ADAPTER_T prAdapter, IN P_P2P_DEV_FSM_INFO_T prP2pDevFsmInfo, IN ENUM_P2P_DEV_STATE_T
  140. eNextState);
  141. VOID p2pDevFsmRunEventAbort(IN P_ADAPTER_T prAdapter, IN P_P2P_DEV_FSM_INFO_T prP2pDevFsmInfo);
  142. VOID p2pDevFsmRunEventTimeout(IN P_ADAPTER_T prAdapter, IN ULONG ulParamPtr);
  143. /*================ Message Event =================*/
  144. VOID p2pDevFsmRunEventScanRequest(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  145. VOID
  146. p2pDevFsmRunEventScanDone(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr, IN P_P2P_DEV_FSM_INFO_T prP2pDevFsmInfo);
  147. VOID p2pDevFsmRunEventChannelRequest(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  148. VOID p2pDevFsmRunEventChannelAbort(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  149. VOID
  150. p2pDevFsmRunEventChnlGrant(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr, IN P_P2P_DEV_FSM_INFO_T prP2pDevFsmInfo);
  151. VOID p2pDevFsmRunEventMgmtTx(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  152. WLAN_STATUS
  153. p2pDevFsmRunEventMgmtFrameTxDone(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T
  154. rTxDoneStatus);
  155. VOID p2pDevFsmRunEventMgmtFrameRegister(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  156. /* /////////////////////////////// */
  157. VOID p2pFsmRunEventScanRequest(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  158. VOID p2pFsmRunEventScanDone(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  159. VOID p2pFsmRunEventChGrant(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  160. VOID p2pFsmRunEventNetDeviceRegister(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  161. VOID p2pFsmRunEventUpdateMgmtFrame(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  162. VOID p2pFsmRunEventExtendListen(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  163. #if CFG_SUPPORT_WFD
  164. VOID p2pFsmRunEventWfdSettingUpdate(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  165. #endif