1 #include "p2p_precomp.h"
4 #if CFG_SUPPORT_WFD_COMPOSE_IE
6 APPEND_VAR_ATTRI_ENTRY_T txProbeRspWFDAttributesTable
[] = {
7 {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_DEV_INFO
), NULL
, wfdFuncAppendAttriDevInfo
} /* 0 */
8 , {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_ASSOC_BSSID
), NULL
, wfdFuncAppendAttriAssocBssid
} /* 1 */
9 , {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO
), NULL
, wfdFuncAppendAttriCoupledSinkInfo
} /* 6 */
10 , {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_EXT_CAPABILITY
), NULL
, wfdFuncAppendAttriExtCapability
} /* 7 */
11 , {0, wfdFuncCalculateAttriLenSessionInfo
, wfdFuncAppendAttriSessionInfo
} /* 9 */
14 APPEND_VAR_ATTRI_ENTRY_T txBeaconWFDAttributesTable
[] = {
15 {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_DEV_INFO
), NULL
, wfdFuncAppendAttriDevInfo
} /* 0 */
16 , {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_ASSOC_BSSID
), NULL
, wfdFuncAppendAttriAssocBssid
} /* 1 */
17 , {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO
), NULL
, wfdFuncAppendAttriCoupledSinkInfo
} /* 6 */
20 APPEND_VAR_ATTRI_ENTRY_T txAssocReqWFDAttributesTable
[] = {
21 {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_DEV_INFO
), NULL
, wfdFuncAppendAttriDevInfo
} /* 0 */
22 , {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_ASSOC_BSSID
), NULL
, wfdFuncAppendAttriAssocBssid
} /* 1 */
23 , {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO
), NULL
, wfdFuncAppendAttriCoupledSinkInfo
} /* 6 */
27 APPEND_VAR_ATTRI_ENTRY_T txAssocRspWFDAttributesTable
[] = {
28 {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_DEV_INFO
), NULL
, wfdFuncAppendAttriDevInfo
} /* 0 */
29 , {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_ASSOC_BSSID
), NULL
, wfdFuncAppendAttriAssocBssid
} /* 1 */
30 , {(WFD_ATTRI_HDR_LEN
+ WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO
), NULL
, wfdFuncAppendAttriCoupledSinkInfo
} /* 6 */
31 , {0, wfdFuncCalculateAttriLenSessionInfo
, wfdFuncAppendAttriSessionInfo
} /* 9 */
41 p2pCalculate_IEForAssocReq(IN P_ADAPTER_T prAdapter
,
42 IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex
, IN P_STA_RECORD_T prStaRec
)
44 P_P2P_FSM_INFO_T prP2pFsmInfo
= (P_P2P_FSM_INFO_T
) NULL
;
45 P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo
= (P_P2P_CONNECTION_REQ_INFO_T
) NULL
;
46 UINT_32 u4RetValue
= 0;
49 ASSERT_BREAK((eNetTypeIndex
== NETWORK_TYPE_P2P_INDEX
) && (prAdapter
!= NULL
));
51 prP2pFsmInfo
= prAdapter
->rWifiVar
.prP2pFsmInfo
;
53 prConnReqInfo
= &(prP2pFsmInfo
->rConnReqInfo
);
55 u4RetValue
= prConnReqInfo
->u4BufLength
;
57 /* ADD HT Capability */
58 u4RetValue
+= (ELEM_HDR_LEN
+ ELEM_MAX_LEN_HT_CAP
);
60 /* ADD WMM Information Element */
61 u4RetValue
+= (ELEM_HDR_LEN
+ ELEM_MAX_LEN_WMM_INFO
);
66 } /* p2pCalculate_IEForAssocReq */
70 /*----------------------------------------------------------------------------*/
72 * @brief This function is used to generate P2P IE for Beacon frame.
74 * @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T.
78 /*----------------------------------------------------------------------------*/
79 VOID
p2pGenerate_IEForAssocReq(IN P_ADAPTER_T prAdapter
, IN P_MSDU_INFO_T prMsduInfo
)
81 P_P2P_FSM_INFO_T prP2pFsmInfo
= (P_P2P_FSM_INFO_T
) NULL
;
82 P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo
= (P_P2P_CONNECTION_REQ_INFO_T
) NULL
;
83 PUINT_8 pucIEBuf
= (PUINT_8
) NULL
;
86 ASSERT_BREAK((prAdapter
!= NULL
) && (prMsduInfo
!= NULL
));
88 prP2pFsmInfo
= prAdapter
->rWifiVar
.prP2pFsmInfo
;
90 prConnReqInfo
= &(prP2pFsmInfo
->rConnReqInfo
);
93 (PUINT_8
) ((UINT_32
) prMsduInfo
->prPacket
+
94 (UINT_32
) prMsduInfo
->u2FrameLength
);
96 kalMemCopy(pucIEBuf
, prConnReqInfo
->aucIEBuf
, prConnReqInfo
->u4BufLength
);
98 prMsduInfo
->u2FrameLength
+= prConnReqInfo
->u4BufLength
;
100 rlmReqGenerateHtCapIE(prAdapter
, prMsduInfo
);
101 mqmGenerateWmmInfoIE(prAdapter
, prMsduInfo
);
108 } /* p2pGenerate_IEForAssocReq */
113 wfdFuncAppendAttriDevInfo(IN P_ADAPTER_T prAdapter
,
114 IN BOOLEAN fgIsAssocFrame
,
115 IN PUINT_16 pu2Offset
, IN PUINT_8 pucBuf
, IN UINT_16 u2BufSize
)
117 UINT_32 u4AttriLen
= 0;
118 PUINT_8 pucBuffer
= NULL
;
119 P_WFD_DEVICE_INFORMATION_IE_T prWfdDevInfo
= (P_WFD_DEVICE_INFORMATION_IE_T
) NULL
;
120 P_WFD_CFG_SETTINGS_T prWfdCfgSettings
= (P_WFD_CFG_SETTINGS_T
) NULL
;
123 ASSERT_BREAK((prAdapter
!= NULL
) && (pucBuf
!= NULL
) && (pu2Offset
!= NULL
));
125 prWfdCfgSettings
= &(prAdapter
->rWifiVar
.prP2pFsmInfo
->rWfdConfigureSettings
);
127 ASSERT_BREAK((prWfdCfgSettings
!= NULL
));
129 if ((prWfdCfgSettings
->ucWfdEnable
== 0) ||
130 ((prWfdCfgSettings
->u4WfdFlag
& WFD_FLAGS_DEV_INFO_VALID
) == 0)) {
134 pucBuffer
= (PUINT_8
) ((UINT_32
) pucBuf
+ (UINT_32
) (*pu2Offset
));
136 ASSERT_BREAK(pucBuffer
!= NULL
);
138 prWfdDevInfo
= (P_WFD_DEVICE_INFORMATION_IE_T
) pucBuffer
;
140 prWfdDevInfo
->ucElemID
= WFD_ATTRI_ID_DEV_INFO
;
142 WLAN_SET_FIELD_BE16(&prWfdDevInfo
->u2WfdDevInfo
, prWfdCfgSettings
->u2WfdDevInfo
);
144 WLAN_SET_FIELD_BE16(&prWfdDevInfo
->u2SessionMgmtCtrlPort
,
145 prWfdCfgSettings
->u2WfdControlPort
);
147 WLAN_SET_FIELD_BE16(&prWfdDevInfo
->u2WfdDevMaxSpeed
,
148 prWfdCfgSettings
->u2WfdMaximumTp
);
150 WLAN_SET_FIELD_BE16(&prWfdDevInfo
->u2Length
, WFD_ATTRI_MAX_LEN_DEV_INFO
);
152 u4AttriLen
= WFD_ATTRI_MAX_LEN_DEV_INFO
+ WFD_ATTRI_HDR_LEN
;
156 (*pu2Offset
) += (UINT_16
) u4AttriLen
;
161 /* wfdFuncAppendAttriDevInfo */
164 wfdFuncAppendAttriAssocBssid(IN P_ADAPTER_T prAdapter
,
165 IN BOOLEAN fgIsAssocFrame
,
166 IN PUINT_16 pu2Offset
, IN PUINT_8 pucBuf
, IN UINT_16 u2BufSize
)
168 UINT_32 u4AttriLen
= 0;
169 PUINT_8 pucBuffer
= NULL
;
170 P_WFD_ASSOCIATED_BSSID_IE_T prWfdAssocBssid
= (P_WFD_ASSOCIATED_BSSID_IE_T
) NULL
;
171 P_WFD_CFG_SETTINGS_T prWfdCfgSettings
= (P_WFD_CFG_SETTINGS_T
) NULL
;
172 P_BSS_INFO_T prAisBssInfo
= (P_BSS_INFO_T
) NULL
;
175 ASSERT_BREAK((prAdapter
!= NULL
) && (pucBuf
!= NULL
) && (pu2Offset
!= NULL
));
177 prWfdCfgSettings
= &(prAdapter
->rWifiVar
.prP2pFsmInfo
->rWfdConfigureSettings
);
179 ASSERT_BREAK((prWfdCfgSettings
!= NULL
));
181 if (prWfdCfgSettings
->ucWfdEnable
== 0) {
186 prAisBssInfo
= &(prAdapter
->rWifiVar
.arBssInfo
[NETWORK_TYPE_AIS_INDEX
]);
188 if ((!IS_NET_ACTIVE(prAdapter
, NETWORK_TYPE_AIS_INDEX
)) ||
189 (prAisBssInfo
->eConnectionState
!= PARAM_MEDIA_STATE_CONNECTED
)) {
193 pucBuffer
= (PUINT_8
) ((UINT_32
) pucBuf
+ (UINT_32
) (*pu2Offset
));
195 ASSERT_BREAK(pucBuffer
!= NULL
);
197 prWfdAssocBssid
= (P_WFD_ASSOCIATED_BSSID_IE_T
) pucBuffer
;
199 prWfdAssocBssid
->ucElemID
= WFD_ATTRI_ID_ASSOC_BSSID
;
201 WLAN_SET_FIELD_BE16(&prWfdAssocBssid
->u2Length
, WFD_ATTRI_MAX_LEN_ASSOC_BSSID
);
203 COPY_MAC_ADDR(prWfdAssocBssid
->aucAssocBssid
, prAisBssInfo
->aucBSSID
);
205 u4AttriLen
= WFD_ATTRI_MAX_LEN_ASSOC_BSSID
+ WFD_ATTRI_HDR_LEN
;
209 (*pu2Offset
) += (UINT_16
) u4AttriLen
;
214 /* wfdFuncAppendAttriAssocBssid */
217 wfdFuncAppendAttriCoupledSinkInfo(IN P_ADAPTER_T prAdapter
,
218 IN BOOLEAN fgIsAssocFrame
,
219 IN PUINT_16 pu2Offset
, IN PUINT_8 pucBuf
, IN UINT_16 u2BufSize
)
221 UINT_32 u4AttriLen
= 0;
222 PUINT_8 pucBuffer
= NULL
;
223 P_WFD_COUPLE_SINK_INFORMATION_IE_T prWfdCoupleSinkInfo
=
224 (P_WFD_COUPLE_SINK_INFORMATION_IE_T
) NULL
;
225 P_WFD_CFG_SETTINGS_T prWfdCfgSettings
= (P_WFD_CFG_SETTINGS_T
) NULL
;
228 ASSERT_BREAK((prAdapter
!= NULL
) && (pucBuf
!= NULL
) && (pu2Offset
!= NULL
));
230 prWfdCfgSettings
= &(prAdapter
->rWifiVar
.prP2pFsmInfo
->rWfdConfigureSettings
);
232 ASSERT_BREAK((prWfdCfgSettings
!= NULL
));
234 if ((prWfdCfgSettings
->ucWfdEnable
== 0) ||
235 ((prWfdCfgSettings
->u4WfdFlag
& WFD_FLAGS_SINK_INFO_VALID
) == 0)) {
239 pucBuffer
= (PUINT_8
) ((UINT_32
) pucBuf
+ (UINT_32
) (*pu2Offset
));
241 ASSERT_BREAK(pucBuffer
!= NULL
);
243 prWfdCoupleSinkInfo
= (P_WFD_COUPLE_SINK_INFORMATION_IE_T
) pucBuffer
;
245 prWfdCoupleSinkInfo
->ucElemID
= WFD_ATTRI_ID_COUPLED_SINK_INFO
;
247 WLAN_SET_FIELD_BE16(&prWfdCoupleSinkInfo
->u2Length
,
248 WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO
);
250 COPY_MAC_ADDR(prWfdCoupleSinkInfo
->aucCoupleSinkMac
,
251 prWfdCfgSettings
->aucWfdCoupleSinkAddress
);
253 prWfdCoupleSinkInfo
->ucCoupleSinkStatusBp
= prWfdCfgSettings
->ucWfdCoupleSinkStatus
;
255 u4AttriLen
= WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO
+ WFD_ATTRI_HDR_LEN
;
259 (*pu2Offset
) += (UINT_16
) u4AttriLen
;
264 /* wfdFuncAppendAttriCoupledSinkInfo */
267 wfdFuncAppendAttriExtCapability(IN P_ADAPTER_T prAdapter
,
268 IN BOOLEAN fgIsAssocFrame
,
269 IN PUINT_16 pu2Offset
, IN PUINT_8 pucBuf
, IN UINT_16 u2BufSize
)
271 UINT_32 u4AttriLen
= 0;
272 PUINT_8 pucBuffer
= NULL
;
273 P_WFD_EXTENDED_CAPABILITY_IE_T prWfdExtCapability
= (P_WFD_EXTENDED_CAPABILITY_IE_T
) NULL
;
274 P_WFD_CFG_SETTINGS_T prWfdCfgSettings
= (P_WFD_CFG_SETTINGS_T
) NULL
;
277 ASSERT_BREAK((prAdapter
!= NULL
) && (pucBuf
!= NULL
) && (pu2Offset
!= NULL
));
279 prWfdCfgSettings
= &(prAdapter
->rWifiVar
.prP2pFsmInfo
->rWfdConfigureSettings
);
281 ASSERT_BREAK((prWfdCfgSettings
!= NULL
));
283 if ((prWfdCfgSettings
->ucWfdEnable
== 0) ||
284 ((prWfdCfgSettings
->u4WfdFlag
& WFD_FLAGS_EXT_CAPABILITY_VALID
) == 0)) {
288 pucBuffer
= (PUINT_8
) ((UINT_32
) pucBuf
+ (UINT_32
) (*pu2Offset
));
290 ASSERT_BREAK(pucBuffer
!= NULL
);
292 prWfdExtCapability
= (P_WFD_EXTENDED_CAPABILITY_IE_T
) pucBuffer
;
294 prWfdExtCapability
->ucElemID
= WFD_ATTRI_ID_EXT_CAPABILITY
;
296 WLAN_SET_FIELD_BE16(&prWfdExtCapability
->u2Length
,
297 WFD_ATTRI_MAX_LEN_EXT_CAPABILITY
);
299 WLAN_SET_FIELD_BE16(&prWfdExtCapability
->u2WfdExtCapabilityBp
,
300 prWfdCfgSettings
->u2WfdExtendCap
);
302 u4AttriLen
= WFD_ATTRI_MAX_LEN_EXT_CAPABILITY
+ WFD_ATTRI_HDR_LEN
;
306 (*pu2Offset
) += (UINT_16
) u4AttriLen
;
311 /* wfdFuncAppendAttriExtCapability */
315 /*----------------------------------------------------------------------------*/
317 * @brief This function is used to calculate length of Channel List Attribute
319 * @param[in] prStaRec Pointer to the STA_RECORD_T
321 * @return The length of Attribute added
323 /*----------------------------------------------------------------------------*/
324 UINT_32
wfdFuncCalculateAttriLenSessionInfo(IN P_ADAPTER_T prAdapter
, IN P_STA_RECORD_T prStaRec
)
326 UINT_16 u2AttriLen
= 0;
327 P_WFD_CFG_SETTINGS_T prWfdCfgSettings
= (P_WFD_CFG_SETTINGS_T
) NULL
;
330 ASSERT_BREAK((prAdapter
!= NULL
) && (prStaRec
!= NULL
));
332 prWfdCfgSettings
= &(prAdapter
->rWifiVar
.prP2pFsmInfo
->rWfdConfigureSettings
);
334 if (prWfdCfgSettings
->ucWfdEnable
== 0) {
338 u2AttriLen
= prWfdCfgSettings
->u2WfdSessionInformationIELen
+ WFD_ATTRI_HDR_LEN
;
343 return (UINT_32
) u2AttriLen
;
345 } /* wfdFuncCalculateAttriLenSessionInfo */
349 wfdFuncAppendAttriSessionInfo(IN P_ADAPTER_T prAdapter
,
350 IN BOOLEAN fgIsAssocFrame
,
351 IN PUINT_16 pu2Offset
, IN PUINT_8 pucBuf
, IN UINT_16 u2BufSize
)
353 UINT_32 u4AttriLen
= 0;
354 PUINT_8 pucBuffer
= NULL
;
355 P_WFD_SESSION_INFORMATION_IE_T prWfdSessionInfo
= (P_WFD_SESSION_INFORMATION_IE_T
) NULL
;
356 P_WFD_CFG_SETTINGS_T prWfdCfgSettings
= (P_WFD_CFG_SETTINGS_T
) NULL
;
359 ASSERT_BREAK((prAdapter
!= NULL
) && (pucBuf
!= NULL
) && (pu2Offset
!= NULL
));
361 prWfdCfgSettings
= &(prAdapter
->rWifiVar
.prP2pFsmInfo
->rWfdConfigureSettings
);
363 ASSERT_BREAK((prWfdCfgSettings
!= NULL
));
365 if ((prWfdCfgSettings
->ucWfdEnable
== 0)
366 || (prWfdCfgSettings
->u2WfdSessionInformationIELen
== 0)) {
370 pucBuffer
= (PUINT_8
) ((UINT_32
) pucBuf
+ (UINT_32
) (*pu2Offset
));
372 ASSERT_BREAK(pucBuffer
!= NULL
);
374 prWfdSessionInfo
= (P_WFD_SESSION_INFORMATION_IE_T
) pucBuffer
;
376 prWfdSessionInfo
->ucElemID
= WFD_ATTRI_ID_SESSION_INFO
;
378 /* TODO: Check endian issue? */
379 kalMemCopy(prWfdSessionInfo
->pucWfdDevInfoDesc
,
380 prWfdCfgSettings
->aucWfdSessionInformationIE
,
381 prWfdCfgSettings
->u2WfdSessionInformationIELen
);
383 WLAN_SET_FIELD_16(&prWfdSessionInfo
->u2Length
,
384 prWfdCfgSettings
->u2WfdSessionInformationIELen
);
386 u4AttriLen
= prWfdCfgSettings
->u2WfdSessionInformationIELen
+ WFD_ATTRI_HDR_LEN
;
391 (*pu2Offset
) += (UINT_16
) u4AttriLen
;
396 /* wfdFuncAppendAttriSessionInfo */
400 #if CFG_SUPPORT_WFD_COMPOSE_IE
402 wfdFuncGenerateWfd_IE(IN P_ADAPTER_T prAdapter
,
403 IN BOOLEAN fgIsAssocFrame
,
404 IN PUINT_16 pu2Offset
,
406 IN UINT_16 u2BufSize
,
407 IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable
[], IN UINT_32 u4AttriTableSize
)
411 PUINT_8 pucBuffer
= (PUINT_8
) NULL
;
412 P_IE_WFD_T prIeWFD
= (P_IE_WFD_T
) NULL
;
413 UINT_32 u4OverallAttriLen
;
415 UINT_8 aucWfaOui
[] = VENDOR_OUI_WFA_SPECIFIC
;
416 UINT_8 aucTempBuffer
[P2P_MAXIMUM_ATTRIBUTE_LEN
];
421 ASSERT_BREAK((prAdapter
!= NULL
) && (pucBuf
!= NULL
));
423 pucBuffer
= (PUINT_8
) ((UINT_32
) pucBuf
+ (*pu2Offset
));
425 ASSERT_BREAK(pucBuffer
!= NULL
);
427 /* Check buffer length is still enough. */
428 ASSERT_BREAK((u2BufSize
- (*pu2Offset
)) >= WFD_IE_OUI_HDR
);
430 prIeWFD
= (P_IE_WFD_T
) pucBuffer
;
432 prIeWFD
->ucId
= ELEM_ID_WFD
;
434 prIeWFD
->aucOui
[0] = aucWfaOui
[0];
435 prIeWFD
->aucOui
[1] = aucWfaOui
[1];
436 prIeWFD
->aucOui
[2] = aucWfaOui
[2];
437 prIeWFD
->ucOuiType
= VENDOR_OUI_TYPE_WFD
;
439 (*pu2Offset
) += WFD_IE_OUI_HDR
;
441 /* Overall length of all Attributes */
442 u4OverallAttriLen
= 0;
444 for (i
= 0; i
< u4AttriTableSize
; i
++) {
446 if (arAppendAttriTable
[i
].pfnAppendAttri
) {
448 arAppendAttriTable
[i
].pfnAppendAttri(prAdapter
, fgIsAssocFrame
,
452 u4OverallAttriLen
+= u4AttriLen
;
454 if (u4OverallAttriLen
> P2P_MAXIMUM_ATTRIBUTE_LEN
) {
455 u4OverallAttriLen
-= P2P_MAXIMUM_ATTRIBUTE_LEN
;
458 (VENDOR_OUI_TYPE_LEN
+ P2P_MAXIMUM_ATTRIBUTE_LEN
);
461 (PUINT_8
) ((UINT_32
) prIeWFD
+
463 P2P_MAXIMUM_ATTRIBUTE_LEN
));
466 (P_IE_WFD_T
) ((UINT_32
) prIeWFD
+
468 P2P_MAXIMUM_ATTRIBUTE_LEN
));
470 kalMemCopy(aucTempBuffer
, pucBuffer
, u4OverallAttriLen
);
472 prIeWFD
->ucId
= ELEM_ID_WFD
;
474 prIeWFD
->aucOui
[0] = aucWfaOui
[0];
475 prIeWFD
->aucOui
[1] = aucWfaOui
[1];
476 prIeWFD
->aucOui
[2] = aucWfaOui
[2];
477 prIeWFD
->ucOuiType
= VENDOR_OUI_TYPE_WFD
;
479 kalMemCopy(prIeWFD
->aucWFDAttributes
, aucTempBuffer
,
481 (*pu2Offset
) += WFD_IE_OUI_HDR
;
488 prIeWFD
->ucLength
= (UINT_8
) (VENDOR_OUI_TYPE_LEN
+ u4OverallAttriLen
);
494 } /* wfdFuncGenerateWfd_IE */
496 #endif /* CFG_SUPPORT_WFD_COMPOSE_IE */
502 wfdFuncCalculateWfdIELenForAssocRsp(IN P_ADAPTER_T prAdapter
,
503 IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex
,
504 IN P_STA_RECORD_T prStaRec
)
507 #if CFG_SUPPORT_WFD_COMPOSE_IE
508 P_WFD_CFG_SETTINGS_T prWfdCfgSettings
= (P_WFD_CFG_SETTINGS_T
) NULL
;
510 prWfdCfgSettings
= &(prAdapter
->rWifiVar
.prP2pFsmInfo
->rWfdConfigureSettings
);
512 if (!IS_STA_P2P_TYPE(prStaRec
) || (prWfdCfgSettings
->ucWfdEnable
== 0)) {
516 return p2pFuncCalculateP2P_IELen(prAdapter
,
519 txAssocRspWFDAttributesTable
,
520 sizeof(txAssocRspWFDAttributesTable
) /
521 sizeof(APPEND_VAR_ATTRI_ENTRY_T
));
526 } /* wfdFuncCalculateWfdIELenForAssocRsp */
530 VOID
wfdFuncGenerateWfdIEForAssocRsp(IN P_ADAPTER_T prAdapter
, IN P_MSDU_INFO_T prMsduInfo
)
533 #if CFG_SUPPORT_WFD_COMPOSE_IE
534 P_WFD_CFG_SETTINGS_T prWfdCfgSettings
= (P_WFD_CFG_SETTINGS_T
) NULL
;
535 P_STA_RECORD_T prStaRec
;
538 ASSERT_BREAK((prMsduInfo
!= NULL
) && (prAdapter
!= NULL
));
540 prWfdCfgSettings
= &(prAdapter
->rWifiVar
.prP2pFsmInfo
->rWfdConfigureSettings
);
541 prStaRec
= cnmGetStaRecByIndex(prAdapter
, prMsduInfo
->ucStaRecIndex
);
543 if (IS_STA_P2P_TYPE(prStaRec
)) {
545 if (prWfdCfgSettings
->ucWfdEnable
== 0) {
548 if ((prWfdCfgSettings
->u4WfdFlag
& WFD_FLAGS_DEV_INFO_VALID
) == 0) {
552 wfdFuncGenerateWfd_IE(prAdapter
,
554 &prMsduInfo
->u2FrameLength
,
555 prMsduInfo
->prPacket
,
557 txAssocRspWFDAttributesTable
,
558 sizeof(txAssocRspWFDAttributesTable
) /
559 sizeof(APPEND_VAR_ATTRI_ENTRY_T
));
568 } /* wfdFuncGenerateWfdIEForAssocRsp */