Exemplo n.º 1
0
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);
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 7
0
void *RPC_PACKET_GetBufferData(PACKET_BufHandle_t dataBufHandle)
{
	return IPC_BufferDataPointer((IPC_Buffer) dataBufHandle);
}