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; } }
//****************************************************************************** // 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_) } }