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;
}