/*----------------------------------------------------------------------------*/ VOID hs20FillProreqExtCapIE(IN P_ADAPTER_T prAdapter, OUT PUINT_8 pucIE) { P_HS20_EXT_CAP_T prExtCap; ASSERT(prAdapter); /* Add Extended Capabilities IE */ prExtCap = (P_HS20_EXT_CAP_T) pucIE; prExtCap->ucId = ELEM_ID_EXTENDED_CAP; if (prAdapter->prGlueInfo->fgConnectHS20AP == TRUE) prExtCap->ucLength = ELEM_MAX_LEN_EXT_CAP; else prExtCap->ucLength = 3 - ELEM_HDR_LEN; kalMemZero(prExtCap->aucCapabilities, prExtCap->ucLength); prExtCap->aucCapabilities[0] = ELEM_EXT_CAP_DEFAULT_VAL; if (prAdapter->prGlueInfo->fgConnectHS20AP == TRUE) { SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_BSS_TRANSITION_BIT); SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_UTC_TSF_OFFSET_BIT); SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_INTERWORKING_BIT); /* For R2 WNM-Notification */ SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_WNM_NOTIFICATION_BIT); } }
/*----------------------------------------------------------------------------*/ VOID hs20FillProreqExtCapIE( IN P_ADAPTER_T prAdapter, OUT PUINT_8 pucIE ) { P_EXT_CAP_T prExtCap; ASSERT(prAdapter); /* Add Extended Capabilities IE */ prExtCap = (P_EXT_CAP_T)pucIE; prExtCap->ucId = ELEM_ID_EXTENDED_CAP; prExtCap->ucLength = ELEM_MAX_LEN_EXT_CAP; kalMemZero(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP); prExtCap->aucCapabilities[0] = ELEM_EXT_CAP_DEFAULT_VAL; SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_BSS_TRANSITION_BIT); SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_UTC_TSF_OFFSET_BIT); SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_INTERWORKING_BIT); // For R2 WNM-Notification SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_WNM_NOTIFICATION_BIT); }
VOID hs20FillExtCapIE ( P_ADAPTER_T prAdapter, P_BSS_INFO_T prBssInfo, P_MSDU_INFO_T prMsduInfo ) { P_EXT_CAP_T prExtCap; ASSERT(prAdapter); ASSERT(prMsduInfo); /* Add Extended Capabilities IE */ prExtCap = (P_EXT_CAP_T) (((PUINT_8) prMsduInfo->prPacket) + prMsduInfo->u2FrameLength); prExtCap->ucId = ELEM_ID_EXTENDED_CAP; if (prAdapter->prGlueInfo->fgConnectHS20AP == TRUE) prExtCap->ucLength = ELEM_MAX_LEN_EXT_CAP; else prExtCap->ucLength = 3 - ELEM_HDR_LEN; kalMemZero(prExtCap->aucCapabilities, prExtCap->ucLength); prExtCap->aucCapabilities[0] = ELEM_EXT_CAP_DEFAULT_VAL; if (prBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE) { prExtCap->aucCapabilities[0] &= ~ELEM_EXT_CAP_PSMP_CAP; } if (prAdapter->prGlueInfo->fgConnectHS20AP == TRUE) { SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_BSS_TRANSITION_BIT); SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_UTC_TSF_OFFSET_BIT); SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_INTERWORKING_BIT); /* For R2 WNM-Notification*/ SET_EXT_CAP(prExtCap->aucCapabilities, ELEM_MAX_LEN_EXT_CAP, ELEM_EXT_CAP_WNM_NOTIFICATION_BIT); } printk("IE_SIZE(prExtCap) = %d, %d %d\n", IE_SIZE(prExtCap), ELEM_HDR_LEN, ELEM_MAX_LEN_EXT_CAP); ASSERT(IE_SIZE(prExtCap) <= (ELEM_HDR_LEN + ELEM_MAX_LEN_EXT_CAP)); prMsduInfo->u2FrameLength += IE_SIZE(prExtCap); }