u32 ddl_process_core_response(void) { struct ddl_context_type *p_ddl_context; u32 b_return_status = TRUE; p_ddl_context = ddl_get_context(); if (!p_ddl_context->p_core_virtual_base_addr) { VIDC_LOGERR_STRING("UNKWN_INTR"); return FALSE; } if (p_ddl_context->intr_status == DDL_INVALID_INTR_STATUS) { VIDC_LOGERR_STRING("INTERRUPT_NOT_READ"); return FALSE; } if (!ddl_handle_core_errors(p_ddl_context)) { b_return_status = ddl_process_intr_status(p_ddl_context, p_ddl_context->intr_status); } if (p_ddl_context->pf_interrupt_clr) (*p_ddl_context->pf_interrupt_clr)(); p_ddl_context->intr_status = DDL_INVALID_INTR_STATUS; return b_return_status; }
static u32 ddl_process_intr_status(struct ddl_context *ddl_context, u32 intr_status) { u32 return_status = true; switch (intr_status) { case VIDC_1080P_RISC2HOST_CMD_OPEN_CH_RET: return_status = ddl_channel_set_callback(ddl_context, ddl_context->response_cmd_ch_id); break; case VIDC_1080P_RISC2HOST_CMD_CLOSE_CH_RET: ddl_channel_end_callback(ddl_context); break; case VIDC_1080P_RISC2HOST_CMD_SEQ_DONE_RET: return_status = ddl_sequence_done_callback(ddl_context); break; case VIDC_1080P_RISC2HOST_CMD_FRAME_DONE_RET: return_status = ddl_frame_run_callback(ddl_context); break; case VIDC_1080P_RISC2HOST_CMD_SYS_INIT_RET: ddl_sys_init_done_callback(ddl_context, ddl_context->response_cmd_ch_id); break; case VIDC_1080P_RISC2HOST_CMD_FW_STATUS_RET: ddl_fw_status_done_callback(ddl_context); break; case VIDC_1080P_RISC2HOST_CMD_EDFU_INT_RET: ddl_edfu_callback(ddl_context); break; case VIDC_1080P_RISC2HOST_CMD_ENC_COMPLETE_RET: ddl_encoder_eos_done(ddl_context); break; case VIDC_1080P_RISC2HOST_CMD_ERROR_RET: DDL_MSG_ERROR("CMD_ERROR_INTR"); return_status = ddl_handle_core_errors(ddl_context); break; case VIDC_1080P_RISC2HOST_CMD_INIT_BUFFERS_RET: return_status = ddl_dpb_buffers_set_done_callback(ddl_context); break; default: DDL_MSG_LOW("UNKWN_INTR"); break; } return return_status; }
u32 ddl_process_core_response(void) { struct ddl_context *ddl_context; u32 return_status = true; ddl_context = ddl_get_context(); if (!ddl_context->core_virtual_base_addr) { VIDC_LOGERR_STRING("UNKWN_INTR"); return false; } if (!ddl_handle_core_errors(ddl_context)) { return_status = ddl_process_intr_status(ddl_context, ddl_context->intr_status); } if (ddl_context->interrupt_clr) (*ddl_context->interrupt_clr)(); return return_status; }