static void hfi_process_event_notify( msm_vidc_callback callback, u32 device_id, struct hfi_msg_event_notify_packet *pkt, struct list_head *sessions, struct mutex *session_lock) { struct hal_session *sess = NULL; dprintk(VIDC_DBG, "RECVD:EVENT_NOTIFY"); if (!callback || !pkt || pkt->size < sizeof(struct hfi_msg_event_notify_packet)) { dprintk(VIDC_ERR, "Invalid Params"); return; } sess = (struct hal_session *)pkt->session_id; switch (pkt->event_id) { case HFI_EVENT_SYS_ERROR: dprintk(VIDC_ERR, "HFI_EVENT_SYS_ERROR: %d, 0x%x\n", pkt->event_data1, pkt->event_data2); hfi_process_sys_error(callback, device_id); break; case HFI_EVENT_SESSION_ERROR: dprintk(VIDC_INFO, "HFI_EVENT_SESSION_ERROR[%u]\n", pkt->session_id); if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_error(callback, device_id, pkt); break; case HFI_EVENT_SESSION_SEQUENCE_CHANGED: dprintk(VIDC_INFO, "HFI_EVENT_SESSION_SEQUENCE_CHANGED[%u]\n", pkt->session_id); if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_sess_evt_seq_changed(callback, device_id, pkt); break; case HFI_EVENT_SESSION_PROPERTY_CHANGED: dprintk(VIDC_INFO, "HFI_EVENT_SESSION_PROPERTY_CHANGED[%u]\n", pkt->session_id); break; case HFI_EVENT_RELEASE_BUFFER_REFERENCE: dprintk(VIDC_INFO, "HFI_EVENT_RELEASE_BUFFER_REFERENCE[%u]\n", pkt->session_id); if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_evt_release_buffer_ref(callback, device_id, pkt); break; default: dprintk(VIDC_WARN, "hal_process_event_notify: unknown_event_id[%u]\n", pkt->session_id); break; } }
u32 hfi_process_msg_packet( msm_vidc_callback callback, u32 device_id, struct vidc_hal_msg_pkt_hdr *msg_hdr, struct list_head *sessions, struct mutex *session_lock) { u32 rc = 0; struct hal_session *sess = NULL; if (!callback || !msg_hdr || msg_hdr->size < VIDC_IFACEQ_MIN_PKT_SIZE) { dprintk(VIDC_ERR, "hal_process_msg_packet:bad" "packet/packet size: %d", msg_hdr->size); rc = -EINVAL; return rc; } dprintk(VIDC_INFO, "Received: 0x%x in ", msg_hdr->packet); rc = (u32) msg_hdr->packet; sess = (struct hal_session *)((struct vidc_hal_session_cmd_pkt*) msg_hdr)->session_id; switch (msg_hdr->packet) { case HFI_MSG_EVENT_NOTIFY: hfi_process_event_notify(callback, device_id, (struct hfi_msg_event_notify_packet *) msg_hdr, sessions, session_lock); break; case HFI_MSG_SYS_INIT_DONE: hfi_process_sys_init_done(callback, device_id, (struct hfi_msg_sys_init_done_packet *) msg_hdr); break; case HFI_MSG_SYS_IDLE: case HFI_MSG_SYS_PC_PREP_DONE: break; case HFI_MSG_SYS_SESSION_INIT_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_init_done(callback, device_id, (struct hfi_msg_sys_session_init_done_packet *) msg_hdr); break; case HFI_MSG_SYS_PROPERTY_INFO: hfi_process_sys_property_info( (struct hfi_msg_sys_property_info_packet *) msg_hdr); break; case HFI_MSG_SYS_SESSION_END_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_end_done(callback, device_id, (struct hfi_msg_sys_session_end_done_packet *) msg_hdr); break; case HFI_MSG_SESSION_LOAD_RESOURCES_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_load_res_done(callback, device_id, (struct hfi_msg_session_load_resources_done_packet *) msg_hdr); break; case HFI_MSG_SESSION_START_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_start_done(callback, device_id, (struct hfi_msg_session_start_done_packet *) msg_hdr); break; case HFI_MSG_SESSION_STOP_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_stop_done(callback, device_id, (struct hfi_msg_session_stop_done_packet *) msg_hdr); break; case HFI_MSG_SESSION_EMPTY_BUFFER_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_etb_done(callback, device_id, (struct hfi_msg_session_empty_buffer_done_packet *) msg_hdr); break; case HFI_MSG_SESSION_FILL_BUFFER_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_ftb_done(callback, device_id, msg_hdr); break; case HFI_MSG_SESSION_FLUSH_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_flush_done(callback, device_id, (struct hfi_msg_session_flush_done_packet *) msg_hdr); break; case HFI_MSG_SESSION_PROPERTY_INFO: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_prop_info(callback, device_id, (struct hfi_msg_session_property_info_packet *) msg_hdr); break; case HFI_MSG_SESSION_RELEASE_RESOURCES_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_rel_res_done(callback, device_id, (struct hfi_msg_session_release_resources_done_packet *) msg_hdr); break; case HFI_MSG_SYS_RELEASE_RESOURCE: hfi_process_sys_rel_resource_done(callback, device_id, (struct hfi_msg_sys_release_resource_done_packet *) msg_hdr); break; case HFI_MSG_SESSION_GET_SEQUENCE_HEADER_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_get_seq_hdr_done( callback, device_id, (struct hfi_msg_session_get_sequence_header_done_packet*) msg_hdr); break; case HFI_MSG_SESSION_RELEASE_BUFFERS_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_rel_buf_done(callback, device_id, (struct hfi_msg_session_release_buffers_done_packet *) msg_hdr); break; case HFI_MSG_SYS_SESSION_ABORT_DONE: if (!validate_session_pkt(sessions, sess, session_lock)) hfi_process_session_abort_done(callback, device_id, (struct hfi_msg_sys_session_abort_done_packet *) msg_hdr); break; default: dprintk(VIDC_DBG, "UNKNOWN_MSG_TYPE : %d", msg_hdr->packet); break; } return rc; }