/*--------------------------------------------------------------------------- wpalUnlockPacket – Unmap the data buffer from dma so that cpu can regain ownership on it Param: pPacket – pointer to a wpt_packet Return: eWLAN_PAL_STATUS_SUCCESS - success ---------------------------------------------------------------------------*/ wpt_status wpalUnlockPacket( wpt_packet *pPacket) { wpt_iterator_info* pInfo; // Validate the parameter pointers if (unlikely(NULL == pPacket)) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s : NULL input pointer pPacket", __func__); return eWLAN_PAL_STATUS_E_INVAL; } pInfo = (wpt_iterator_info*)pPacket->pInternalData; // Validate pInfo if (unlikely(NULL == pInfo)) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_FATAL, "%s : NULL input pointer pInfo", __func__); return eWLAN_PAL_STATUS_E_INVAL; } switch(WPAL_PACKET_GET_TYPE(pPacket)) { /* For management frames, BD is allocated by WDI, header is in raw buffer, rest of the frame is also in raw buffer */ case eWLAN_PAL_PKT_TYPE_TX_802_11_MGMT: { /*TX Packets need to be DMA-ed to the device, perform DMA mapping accordingly */ itReturnOSPktAddrForDevice(pPacket, pInfo->pPhyAddr, pInfo->uLen); } break; /* Data packets - BD (allocated by WDI), header (in VOSS header), rest of the packet (DSM items) */ case eWLAN_PAL_PKT_TYPE_TX_802_11_DATA: case eWLAN_PAL_PKT_TYPE_TX_802_3_DATA: { /*TX Packets need to be DMA-ed to the device, perform DMA mapping accordingly */ itReturnOSPktAddrForDevice(pPacket, pInfo->pPhyAddr, pInfo->uLen); } break; /* For Raw RX, BD + header + rest of the packet is all contained in the raw buffer */ case eWLAN_PAL_PKT_TYPE_RX_RAW: { /*RX Packets need to be DMA-ed from the device, perform DMA mapping accordingly */ if(NULL == pInfo->pPhyAddr) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " WLAN_PAL: %s: RX frame was not locked properly", __func__); } else { itReturnOSPktAddrFromDevice(pPacket, pInfo->pPhyAddr, pInfo->uLen); } } break; default: { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " WLAN_PAL: %s: Invalid packet type %d!", __func__, WPAL_PACKET_GET_TYPE(pPacket) ); WPAL_ASSERT(0); return eWLAN_PAL_STATUS_E_FAILURE; } } wpalMemoryFree(pInfo); pPacket->pInternalData = NULL; return eWLAN_PAL_STATUS_SUCCESS; }/*wpalUnlockPacket*/
wpt_status wpalUnlockPacket( wpt_packet *pPacket) { wpt_iterator_info* pInfo; // if (unlikely(NULL == pPacket)) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s : NULL input pointer pPacket", __func__); return eWLAN_PAL_STATUS_E_INVAL; } pInfo = (wpt_iterator_info*)pPacket->pInternalData; // if (unlikely(NULL == pInfo)) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_FATAL, "%s : NULL input pointer pInfo", __func__); return eWLAN_PAL_STATUS_E_INVAL; } switch(WPAL_PACKET_GET_TYPE(pPacket)) { /* */ case eWLAN_PAL_PKT_TYPE_TX_802_11_MGMT: { /* */ itReturnOSPktAddrForDevice(pPacket, pInfo->pPhyAddr, pInfo->uLen); } break; /* */ case eWLAN_PAL_PKT_TYPE_TX_802_11_DATA: case eWLAN_PAL_PKT_TYPE_TX_802_3_DATA: { /* */ itReturnOSPktAddrForDevice(pPacket, pInfo->pPhyAddr, pInfo->uLen); } break; /* */ case eWLAN_PAL_PKT_TYPE_RX_RAW: { /* */ if(NULL == pInfo->pPhyAddr) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " WLAN_PAL: %s: RX frame was not locked properly", __func__); } else { itReturnOSPktAddrFromDevice(pPacket, pInfo->pPhyAddr, pInfo->uLen); } } break; default: { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " WLAN_PAL: %s: Invalid packet type %d!", __func__, WPAL_PACKET_GET_TYPE(pPacket) ); WPAL_ASSERT(0); return eWLAN_PAL_STATUS_E_FAILURE; } } wpalMemoryFree(pInfo); pPacket->pInternalData = NULL; return eWLAN_PAL_STATUS_SUCCESS; }/* */