/*========================================================================== FUNCTION WDA_DS_GetFrameTypeSubType DESCRIPTION Get typeSubtype from the packet. The BD header should have this. But some reason, Libra/Volans read it from 802.11 header and save it back to BD header. So for NON integrated SOC, this function does the same. For integrated SOC, WDI does the same, not TL. It does return typeSubtype from RX meta info for integrated SOC. DEPENDENCIES PARAMETERS IN pvosGCtx VOS context vosDataBuff vos data buffer pRxHeader RX meta info or BD header pointer OUT ucTypeSubtype typeSubtype RETURN VALUE VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS ============================================================================*/ VOS_STATUS WDA_DS_GetFrameTypeSubType ( v_PVOID_t pvosGCtx, vos_pkt_t *vosDataBuff, v_PVOID_t pRxHeader, v_U8_t *ucTypeSubtype ) { #if defined( FEATURE_WLAN_INTEGRATED_SOC ) /*------------------------------------------------------------------------ Sanity check ------------------------------------------------------------------------*/ if ( NULL == pRxHeader ) { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "WDA:Invalid parameter sent on WDA_DS_GetFrameTypeSubType" ); return VOS_STATUS_E_FAULT; } *ucTypeSubtype = ( WDA_GET_RX_TYPE( pRxHeader ) << 4 ) | WDA_GET_RX_SUBTYPE( pRxHeader ); return VOS_STATUS_SUCCESS; #else /* FEATURE_WLAN_INTEGRATED_SOC */ v_PVOID_t pvBDHeader = pRxHeader; v_U16_t usFrmCtrl = 0; v_U8_t ucFrmType; v_SIZE_t usFrmCtrlSize = sizeof(usFrmCtrl); VOS_STATUS vosStatus; /*--------------------------------------------------------------------- Extract frame control field from 802.11 header if present (frame translation not done) ---------------------------------------------------------------------*/ vosStatus = vos_pkt_extract_data( vosDataBuff, ( 0 == WLANHAL_RX_BD_GET_FT(pvBDHeader) ) ? WLANHAL_RX_BD_GET_MPDU_H_OFFSET(pvBDHeader): WLANHAL_RX_BD_HEADER_SIZE, &usFrmCtrl, &usFrmCtrlSize ); if (( VOS_STATUS_SUCCESS != vosStatus ) || ( sizeof(usFrmCtrl) != usFrmCtrlSize )) { VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WLAN TL: Cannot extract Frame Control Field" ); return VOS_STATUS_E_FAILURE; } ucFrmType = (v_U8_t)WLANHAL_RxBD_GetFrameTypeSubType( pvBDHeader, usFrmCtrl); WLANHAL_RX_BD_SET_TYPE_SUBTYPE(pvBDHeader, ucFrmType); *ucTypeSubtype = ucFrmType; return VOS_STATUS_SUCCESS; #endif /* FEATURE_WLAN_INTEGRATED_SOC */ }
/*========================================================================== FUNCTION WDA_DS_GetFrameTypeSubType DESCRIPTION Get typeSubtype from the packet. The BD header should have this. But some reason, Libra/Volans read it from 802.11 header and save it back to BD header. So for NON integrated SOC, this function does the same. For integrated SOC, WDI does the same, not TL. It does return typeSubtype from RX meta info for integrated SOC. DEPENDENCIES PARAMETERS IN pvosGCtx VOS context vosDataBuff vos data buffer pRxHeader RX meta info or BD header pointer OUT ucTypeSubtype typeSubtype RETURN VALUE VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS ============================================================================*/ VOS_STATUS WDA_DS_GetFrameTypeSubType ( v_PVOID_t pvosGCtx, vos_pkt_t *vosDataBuff, v_PVOID_t pRxHeader, v_U8_t *ucTypeSubtype ) { /*------------------------------------------------------------------------ Sanity check ------------------------------------------------------------------------*/ if ( NULL == pRxHeader ) { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "WDA:Invalid parameter sent on WDA_DS_GetFrameTypeSubType" ); return VOS_STATUS_E_FAULT; } *ucTypeSubtype = ( WDA_GET_RX_TYPE( pRxHeader ) << 4 ) | WDA_GET_RX_SUBTYPE( pRxHeader ); return VOS_STATUS_SUCCESS; }