PACKET_BufHandle_t RPC_PACKET_AllocateBufferCacheAlign(PACKET_InterfaceType_t interfaceType, UInt32 requiredSize, UInt8 channel, UInt32 waitTime, UInt8 cacheAlign) { PACKET_BufHandle_t pkt; pkt = RPC_PACKET_AllocateBufferEx(interfaceType, (requiredSize + cacheAlign), channel, waitTime); if (pkt && cacheAlign > 0) { UInt32 alignSize; void *data = IPC_BufferDataPointer((IPC_Buffer) pkt); alignSize = (UInt32)data & (cacheAlign - 1); if (alignSize) { IPC_IncrementBufferDataPointer((IPC_Buffer) pkt, (cacheAlign - alignSize)); } } return pkt; }
int brcm_ipc_aud_control_send(const void * const buff, UInt32 len) { IPC_Buffer buffer; buffer = IPC_AllocateBuffer(brcm_ApAudioPool); if (buffer) { if (0 == (IPC_BufferSetDataSize(buffer, len))) { return 1; } memcpy(IPC_BufferDataPointer(buffer), buff, len); IPC_SendBuffer(buffer, IPC_PRIORITY_DEFAULT); } else { pr_info(__AUD"IPC_AudioControlSend: Pool Empty\n"); return 1; } return 0; }
//************************************************** void AudioControlAp_DeliveryFunction (IPC_Buffer Buffer) { char * Response = IPC_BufferDataPointer (Buffer); U32 ResponseLength = IPC_BufferDataSize (Buffer); char dd[256]; //(void) dprintf(5, "\n\nAudioControlCp_DeliveryFunction: Length %d. First 16 bytes...\n\n", ResponseLength); memcpy(dd, Response, ResponseLength); #if 0 { int i=0; Log_DebugPrintf(LOGID_AUDIO,"\n%02X %02X %02X %02X %02X %02X %02X %02X\n", dd[i], dd[i+1], dd[i+2], dd[i+3], dd[i+4], dd[i+5], dd[i+6], dd[i+7]); i=8; Log_DebugPrintf(LOGID_AUDIO,"\n%02X %02X %02X %02X %02X %02X %02X %02X\n", dd[i], dd[i+1], dd[i+2], dd[i+3], dd[i+4], dd[i+5], dd[i+6], dd[i+7]); i=16; } #endif IPC_process_dsp_interrupt(dd, ResponseLength); IPC_FreeBuffer (Buffer); }
void IPC_BufferDump(IPC_Buffer Buffer) { IPC_Buffer_T *BufferPtr = IPC_BufferToPtr(Buffer); /** * DataPtr is used to dump the contents of the first 4 U32s * of the memory location * * coverity[returned_pointer] */ IPC_U32 *DataPtr = IPC_BufferDataPointer(Buffer); IPC_BufferPool_T *PoolPtr = IPC_PoolToPtr(BufferPtr->Pool); if (BufferPtr == 0) { IPC_TRACE(IPC_Channel_General, "IPC_BufferDump", "Invalid Buffer %08X", Buffer, 0, 0, 0); return; } IPC_TRACE(IPC_Channel_General, "IPC_BufferDump", "Id %d, Pool %08X, Next %08X, Prev %08X", BufferPtr->BufferId, BufferPtr->Pool, BufferPtr->Q.Next, BufferPtr->Q.Previous); IPC_TRACE(IPC_Channel_General, " ", "Buffer %08X, DataOffset %08X, DataSize %d, HeaderSize %d", BufferPtr->DataBufferStart, BufferPtr->DataOffset, BufferPtr->DataSize, BufferPtr->HeaderSize); if (BufferPtr->StatusCode == IPC_BUFFER_STATUS_FREE) { IPC_TRACE(IPC_Channel_General, " ", "Free FreeTime %d, prevAllocTime %d, prevSendTime %d", BufferPtr->TimeStampFree, BufferPtr->TimeStampAlloc, BufferPtr->TimeStampSend, 0); } else if (BufferPtr->StatusCode == IPC_BUFFER_STATUS_ALLOC) { IPC_TRACE(IPC_Channel_General, " ", "Alloc AllocTime %d, prevSendTime %d, prevFreeTime %d", BufferPtr->TimeStampAlloc, BufferPtr->TimeStampSend, BufferPtr->TimeStampFree, 0); } else if (BufferPtr->StatusCode == IPC_BUFFER_STATUS_SENT) { IPC_TRACE(IPC_Channel_General, " ", "Sent SendTime %d, AllocTime %d, prevFreeTime %d", BufferPtr->TimeStampSend, BufferPtr->TimeStampAlloc, BufferPtr->TimeStampFree, 0); } else { IPC_TRACE(IPC_Channel_General, " ", "Invalid Status", 0, 0, 0, 0); } IPC_TRACE(IPC_Channel_General, " ", "Data 0..3 %08X %08X %08X %08X", DataPtr[0], DataPtr[1], DataPtr[2], DataPtr[3]); IPC_TRACE(IPC_Channel_General, " ", "Data 4..7 %08X %08X %08X %08X", DataPtr[4], DataPtr[5], DataPtr[6], DataPtr[7]); /* Print RPC message ID located at byte 18-19 of IPC buffer */ if (PoolPtr->SourceEndpointId == IPC_EP_Capi2Cp || PoolPtr->DestinationEndpointId == IPC_EP_Capi2Cp) { UInt8 *rpcDataPtr = (UInt8 *)DataPtr; UInt32 rpcMsgId; rpcMsgId = ((UInt32)(rpcDataPtr[19])) | ((UInt32)(rpcDataPtr[18]) << 8); IPC_TRACE(IPC_Channel_General, " ", "RPC message ID %08X", rpcMsgId, 0, 0, 0); } }
static void AudioControlAp_DeliveryFunction (IPC_Buffer buf) { brcm_dsp_interrupt_hisr(IPC_BufferDataPointer(buf), IPC_BufferDataSize(buf)); IPC_FreeBuffer(buf); }
void ipcs_cplog_bd(IPC_Buffer ipc_buffer) { BCMLOG_HandleCpLogMsg( (const char*)IPC_BufferDataPointer(ipc_buffer), IPC_BufferDataSize(ipc_buffer) ) ; IPC_FreeBuffer(ipc_buffer); }
void *RPC_PACKET_GetBufferData(PACKET_BufHandle_t dataBufHandle) { return IPC_BufferDataPointer((IPC_Buffer) dataBufHandle); }