static void hfi_process_session_init_done(
		msm_vidc_callback callback, u32 device_id,
		struct hfi_msg_sys_session_init_done_packet *pkt)
{
	struct msm_vidc_cb_cmd_done cmd_done;
	struct vidc_hal_session_init_done session_init_done;

	dprintk(VIDC_DBG, "RECEIVED:SESSION_INIT_DONE");
	if (sizeof(struct hfi_msg_sys_session_init_done_packet)
		> pkt->size) {
		dprintk(VIDC_ERR, "hal_process_session_init_done:bad_pkt_size");
		return;
	}

	memset(&cmd_done, 0, sizeof(struct msm_vidc_cb_cmd_done));
	memset(&session_init_done, 0, sizeof(struct
				vidc_hal_session_init_done));

	cmd_done.device_id = device_id;
	cmd_done.session_id =
		((struct hal_session *) pkt->session_id)->session_id;
	cmd_done.status = hfi_map_err_status((u32)pkt->error_type);
	cmd_done.data = &session_init_done;
	if (!cmd_done.status) {
		cmd_done.status = hfi_process_sess_init_done_prop_read(
			pkt, &cmd_done);
	}
	cmd_done.size = sizeof(struct vidc_hal_session_init_done);
	callback(SESSION_INIT_DONE, &cmd_done);
}
static void hfi_process_session_init_done(
		msm_vidc_callback callback, u32 device_id,
		struct hal_session *session,
		struct hfi_msg_sys_session_init_done_packet *pkt)
{
	struct msm_vidc_cb_cmd_done cmd_done = {0};
	struct vidc_hal_session_init_done session_init_done;

	memset(&session_init_done, 0, sizeof(struct
				vidc_hal_session_init_done));
	dprintk(VIDC_DBG, "RECEIVED: SESSION_INIT_DONE[%p]\n", session);

	if (sizeof(struct hfi_msg_sys_session_init_done_packet)
		> pkt->size) {
		dprintk(VIDC_ERR,
				"hal_process_session_init_done: bad_pkt_size\n");
		return;
	}

	cmd_done.device_id = device_id;
	cmd_done.session_id = session->session_id;
	cmd_done.status = hfi_map_err_status(pkt->error_type);
	cmd_done.data = &session_init_done;
	if (!cmd_done.status) {
		cmd_done.status = hfi_process_sess_init_done_prop_read(
			pkt, &session_init_done);
	} else if (session) {
		dprintk(VIDC_WARN,
			"Sess init failed: 0x%p, 0x%p\n",
			session->session_id, session);
	}
	cmd_done.size = sizeof(struct vidc_hal_session_init_done);
	callback(SESSION_INIT_DONE, &cmd_done);
}
static void hfi_process_session_init_done(
		msm_vidc_callback callback, u32 device_id,
		struct hfi_msg_sys_session_init_done_packet *pkt)
{
	struct msm_vidc_cb_cmd_done cmd_done;
	struct vidc_hal_session_init_done session_init_done;
	struct hal_session *sess_close = NULL;
        dprintk(VIDC_DBG, "RECEIVED: SESSION_INIT_DONE[%u]\n",
                pkt->session_id);
	if (sizeof(struct hfi_msg_sys_session_init_done_packet)
		> pkt->size) {
		dprintk(VIDC_ERR, "hal_process_session_init_done:bad_pkt_size");
		return;
	}

	memset(&cmd_done, 0, sizeof(struct msm_vidc_cb_cmd_done));
	memset(&session_init_done, 0, sizeof(struct
				vidc_hal_session_init_done));

	cmd_done.device_id = device_id;
	cmd_done.session_id =
		((struct hal_session *) pkt->session_id)->session_id;
	cmd_done.status = hfi_map_err_status((u32)pkt->error_type);
	cmd_done.data = &session_init_done;
	if (!cmd_done.status) {
		cmd_done.status = hfi_process_sess_init_done_prop_read(
			pkt, &session_init_done);
	} else {
		sess_close = (struct hal_session *)pkt->session_id;
		if (sess_close) {
			dprintk(VIDC_INFO,
				"Sess init failed: Deleting session: 0x%x 0x%p",
				sess_close->session_id, sess_close);
			list_del(&sess_close->list);
			kfree(sess_close);
			sess_close = NULL;
		}
	}
	cmd_done.size = sizeof(struct vidc_hal_session_init_done);
	callback(SESSION_INIT_DONE, &cmd_done);
}