p2p_ie.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #include "precomp.h"
  2. UINT_32 p2pCalculate_IEForAssocReq(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIndex, IN P_STA_RECORD_T prStaRec)
  3. {
  4. P_P2P_ROLE_FSM_INFO_T prP2pRoleFsmInfo = (P_P2P_ROLE_FSM_INFO_T) NULL;
  5. P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T) NULL;
  6. P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T) NULL;
  7. UINT_32 u4RetValue = 0;
  8. do {
  9. ASSERT_BREAK((prStaRec != NULL) && (prAdapter != NULL));
  10. prP2pBssInfo = GET_BSS_INFO_BY_INDEX(prAdapter, ucBssIndex);
  11. prP2pRoleFsmInfo = P2P_ROLE_INDEX_2_ROLE_FSM_INFO(prAdapter, (UINT_8) prP2pBssInfo->u4PrivateData);
  12. prConnReqInfo = &(prP2pRoleFsmInfo->rConnReqInfo);
  13. u4RetValue = prConnReqInfo->u4BufLength;
  14. /* ADD WMM Information Element */
  15. u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_INFO);
  16. /* ADD HT Capability */
  17. if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11N) &&
  18. (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11N)) {
  19. u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP);
  20. }
  21. #if CFG_SUPPORT_802_11AC
  22. /* ADD VHT Capability */
  23. if ((prAdapter->rWifiVar.ucAvailablePhyTypeSet & PHY_TYPE_SET_802_11AC) &&
  24. (prStaRec->ucPhyTypeSet & PHY_TYPE_SET_802_11AC)) {
  25. u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_VHT_CAP);
  26. }
  27. #endif
  28. } while (FALSE);
  29. return u4RetValue;
  30. } /* p2pCalculate_IEForAssocReq */
  31. /*----------------------------------------------------------------------------*/
  32. /*!
  33. * @brief This function is used to generate P2P IE for Beacon frame.
  34. *
  35. * @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T.
  36. *
  37. * @return none
  38. */
  39. /*----------------------------------------------------------------------------*/
  40. VOID p2pGenerate_IEForAssocReq(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo)
  41. {
  42. P_BSS_INFO_T prBssInfo = (P_BSS_INFO_T) NULL;
  43. P_P2P_ROLE_FSM_INFO_T prP2pRoleFsmInfo = (P_P2P_ROLE_FSM_INFO_T) NULL;
  44. P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T) NULL;
  45. PUINT_8 pucIEBuf = (PUINT_8) NULL;
  46. do {
  47. ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL));
  48. prBssInfo = GET_BSS_INFO_BY_INDEX(prAdapter, prMsduInfo->ucBssIndex);
  49. prP2pRoleFsmInfo = P2P_ROLE_INDEX_2_ROLE_FSM_INFO(prAdapter, (UINT_8) prBssInfo->u4PrivateData);
  50. prConnReqInfo = &(prP2pRoleFsmInfo->rConnReqInfo);
  51. pucIEBuf = (PUINT_8) ((ULONG) prMsduInfo->prPacket + (ULONG) prMsduInfo->u2FrameLength);
  52. kalMemCopy(pucIEBuf, prConnReqInfo->aucIEBuf, prConnReqInfo->u4BufLength);
  53. prMsduInfo->u2FrameLength += prConnReqInfo->u4BufLength;
  54. /* Add WMM IE */
  55. mqmGenerateWmmInfoIE(prAdapter, prMsduInfo);
  56. /* Add HT IE */
  57. rlmReqGenerateHtCapIE(prAdapter, prMsduInfo);
  58. #if CFG_SUPPORT_802_11AC
  59. /* Add VHT IE */
  60. rlmReqGenerateVhtCapIE(prAdapter, prMsduInfo);
  61. #endif
  62. } while (FALSE);
  63. return;
  64. } /* p2pGenerate_IEForAssocReq */
  65. UINT_32
  66. wfdFuncAppendAttriDevInfo(IN P_ADAPTER_T prAdapter,
  67. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize)
  68. {
  69. UINT_32 u4AttriLen = 0;
  70. PUINT_8 pucBuffer = NULL;
  71. P_WFD_DEVICE_INFORMATION_IE_T prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T) NULL;
  72. P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T) NULL;
  73. do {
  74. ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL));
  75. prWfdCfgSettings = &(prAdapter->rWifiVar.rWfdConfigureSettings);
  76. ASSERT_BREAK((prWfdCfgSettings != NULL));
  77. if ((prWfdCfgSettings->ucWfdEnable == 0) ||
  78. ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) == 0)) {
  79. break;
  80. }
  81. pucBuffer = (PUINT_8) ((ULONG) pucBuf + (ULONG) (*pu2Offset));
  82. ASSERT_BREAK(pucBuffer != NULL);
  83. prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T) pucBuffer;
  84. prWfdDevInfo->ucElemID = WFD_ATTRI_ID_DEV_INFO;
  85. WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevInfo, prWfdCfgSettings->u2WfdDevInfo);
  86. WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2SessionMgmtCtrlPort, prWfdCfgSettings->u2WfdControlPort);
  87. WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevMaxSpeed, prWfdCfgSettings->u2WfdMaximumTp);
  88. WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2Length, WFD_ATTRI_MAX_LEN_DEV_INFO);
  89. u4AttriLen = WFD_ATTRI_MAX_LEN_DEV_INFO + WFD_ATTRI_HDR_LEN;
  90. } while (FALSE);
  91. (*pu2Offset) += (UINT_16) u4AttriLen;
  92. return u4AttriLen;
  93. }
  94. /* wfdFuncAppendAttriDevInfo */