Example #1
0
void brcm_dsp_interrupt_hisr(void * buffer, UInt32 length)
{
        StatQ_t * status_msg;
 	  VPStatQ_t vp_status_msg;

	if(length == sizeof(vp_status_msg))
	{
		memcpy(&vp_status_msg, buffer, sizeof(vp_status_msg));
//		printk("\n brcm_dsp_interrupt_hisr VPU : msg = 0x%x,arg0 = %d,arg1 = %d,arg2 = %d,arg3 = %d\n", vp_status_msg.status, vp_status_msg.arg0, vp_status_msg.arg1, vp_status_msg.arg2,vp_status_msg.arg3);		
		AP_Process_VPU_Status(vp_status_msg);
		return;
	}


        if (length != sizeof(StatQ_t))
                return;

        status_msg = (StatQ_t *)buffer;
//printk("\n brcm_dsp_interrupt_hisr : msg = 0x%x,arg0 = %04x,arg1 = %04xd,arg2 = %04x\n", status_msg->status, status_msg->arg0, status_msg->arg1, status_msg->arg2);		
		switch ( status_msg->status )
		{
			case STATUS_NEWAUDFIFO_CANCELPLAY:
			case STATUS_NEWAUDFIFO_DONEPLAY:
				pr_info("\n brcm_dsp_interrupt_hisr : msg = 0x%x,arg0 = %d,arg1 = %d,arg2 = %d\n", status_msg->status, status_msg->arg0, status_msg->arg1, status_msg->arg2);		
			case STATUS_NEWAUDFIFO_SW_FIFO_LOW:
			case STATUS_NEWAUDFIFO_SW_FIFO_EMPTY:
				audvoc_isr_handler(*status_msg);
				break;
			case STATUS_MAIN_AMR_DONE:
               VPU_ProcessStatusMainAMRDone(*status_msg);
			     break;
				 
			case STATUS_TEST_PDMA:
			case STATUS_PRAM_CODEC_INPUT_LOW:
			case STATUS_PRAM_CODEC_INPUT_EMPTY:
			case STATUS_PRAM_CODEC_OUTPUT_LOW:
			case STATUS_PRAM_CODEC_OUTPUT_FULL:
			case STATUS_PRAM_CODEC_DONEPLAY:
			case STATUS_PRAM_CODEC_CANCELPLAY:
			case STATUS_PRAM_CODEC_DONE_RECORD:
				DspCodecMsgHandler(status_msg);
				break;
			case STATUS_READ_STATUS:
				{
				//printk("\nDSP read:[0x%04x]=0x%04x\n", status_msg->arg0, status_msg->arg2);
				if (status_msg->arg1 == 0x99)
					{
					   AudHalShutdownRespReceived = TRUE;
                       wake_up(&audHalShutdown);
					}
				 }
				break;
	
			case STATUS_AUDIO_STREAM_DATA_READY:
            	process_Log_Channel(*status_msg);		
		default:
				break;
		}

}
Example #2
0
//******************************************************************************
// Function Name:	AP_VPU_ProcessStatus
//
// Description:		This function is called by audio driver at AP
//                  to handles VP status queue
//******************************************************************************
void AP_VPU_ProcessStatus( void )	// Process  VP status queue
{
	VPStatQ_t status_msg;

	while ( VPSHAREDMEM_ReadStatusQ( &status_msg ) )
	{    
		MSG_LOGV("VPU_VPSHAREDMEM_ReadStatusQ= %d \r\n", status_msg.status);

#if defined(_ATHENA_)
		// In athena, we want to separate the vpu playback and record
		switch (status_msg.status)
		{
			case VP_STATUS_RECORDING_DATA_READY:
				Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call VPU_Capture_Request\n");
				VPU_Capture_Request (status_msg);
				break;

			case VP_STATUS_PLAYBACK_DATA_EMPTY:
				Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call VPU_Render_Request\n");
				VPU_Render_Request (status_msg);
				break;
			// move to AP VPU status
			case VP_STATUS_PRAM_CODEC_INPUT_EMPTY:
			case VP_STATUS_PRAM_CODEC_INPUT_LOW:
//			case VP_STATUS_PRAM_CODEC_CANCELPLAY: //not supported by DSP since Athena
			case VP_STATUS_PRAM_CODEC_DONEPLAY:
			{
				Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call AMRWB_Render_Request, status = %d\n", status_msg.status);
				AMRWB_Render_Request(status_msg);
				break;
			}

			case VP_STATUS_USB_HEADSET_BUFFER:
			{
				Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call AUDDRV_USB_HandleDSPInt arg0=%x, arg1=%x, arg2=%x,\n",status_msg.arg0, status_msg.arg1, status_msg.arg2);
				AUDDRV_USB_HandleDSPInt(status_msg.arg0, status_msg.arg1, status_msg.arg2);
				break;
			}

			case VP_STATUS_BT_NB_BUFFER_DONE:
			{
				Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call BTTapNB_Capture_Request\n");
				BTTapNB_Capture_Request(status_msg);
				break;
			}


			case VP_STATUS_VOIF_BUFFER_READY:
			{
				Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call VOIF_ISR_Handler\n");
				VOIF_ISR_Handler (status_msg.arg0, status_msg.arg1);
				break;
			}

			case VP_STATUS_ARM2SP_EMPTY:
			{
				Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call ARM2SP_Render_Request\n");
				ARM2SP_Render_Request(status_msg);
				break;
			}

			case VP_STATUS_ARM2SP2_EMPTY:
			{
				Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call ARM2SP2_Render_Request\n");
				ARM2SP2_Render_Request(status_msg);
				break;
			}
			
			// move to AP VPU status
			case VP_STATUS_PRAM_CODEC_DONE_RECORD:
			{
				Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call AMRWB_Capture_Request\n");
				AMRWB_Capture_Request(status_msg);
				break;
			}

			case VP_STATUS_MAIN_AMR_DONE:
			{
				StatQ_t msg;

				msg.status = STATUS_MAIN_AMR_DONE;
				msg.arg0 = status_msg.arg0;
				msg.arg1 = status_msg.arg1;
				msg.arg2 = status_msg.arg2;

				//Log_DebugPrintf(LOGID_AUDIO, "AP_VPU_ProcessStatus  to call VPU_ProcessStatusMainAMRDone\n");
				VPU_ProcessStatusMainAMRDone(msg);
				break;
			}

#if defined(ENABLE_SPKPROT)

		case VP_STATUS_SP:
		{
			AUDDRV_User_HandleDSPInt((UInt32)status_msg.arg0, (UInt32)status_msg.arg1, (UInt32)status_msg.arg2);
			break;
		}
#endif

			default:
				break;

		}
#else
		Log_DebugPrintf(LOGID_AUDIO, "IPC_process_dsp_interrupt  to call AP_Process_VPU_Status\n");

		//now this is not called.
		//audio_ipc_ap.c and ripisr_audio.c can consolidate.
		AP_Process_VPU_Status(status_msg);
#endif // #if defined(_ATHENA_)


	}
}