Exemplo n.º 1
0
void vcd_handle_device_init_failed(struct vcd_drv_ctxt *drv_ctxt,
		u32 status)
{
	struct vcd_clnt_ctxt *client;
	struct vcd_clnt_ctxt *tmp_client;

	VCD_MSG_ERROR("Device init failed. status = %d", status);

	client = drv_ctxt->dev_ctxt.cctxt_list_head;
	while (client) {
		client->callback(VCD_EVT_RESP_OPEN,
				   status, NULL, 0, 0, client->client_data);

		tmp_client = client;
		client = client->next;

		vcd_destroy_client_context(tmp_client);
	}
	if (ddl_device_release(NULL))
		VCD_MSG_ERROR("Failed: ddl_device_release");

	vcd_sched_destroy(&drv_ctxt->dev_ctxt.sched_clnt_list);
	if (vcd_power_event(&drv_ctxt->dev_ctxt,
		NULL, VCD_EVT_PWR_DEV_INIT_FAIL))
		VCD_MSG_ERROR("VCD_EVT_PWR_DEV_INIT_FAIL failed");

	vcd_do_device_state_transition(drv_ctxt,
		VCD_DEVICE_STATE_NOT_INIT,
		DEVICE_STATE_EVENT_NUMBER(dev_cb));
}
Exemplo n.º 2
0
u32 vcd_deinit_device_context(struct vcd_drv_ctxt *drv_ctxt,
		u32 ev_code)
{
	struct vcd_dev_ctxt *dev_ctxt = &drv_ctxt->dev_ctxt;
	u32 rc = VCD_S_SUCCESS;

	VCD_MSG_LOW("vcd_deinit_device_context:");

	rc = vcd_power_event(&drv_ctxt->dev_ctxt, NULL,
				 VCD_EVT_PWR_DEV_TERM_BEGIN);

	VCD_FAILED_RETURN(rc, "VCD_EVT_PWR_DEV_TERM_BEGIN failed");

	rc = ddl_device_release(NULL);

	if (VCD_FAILED(rc)) {
		VCD_MSG_ERROR("rc = 0x%x. Failed: ddl_device_release", rc);

		(void)vcd_power_event(dev_ctxt, NULL,
					  VCD_EVT_PWR_DEV_TERM_FAIL);
	} else {
		vcd_sched_destroy(&dev_ctxt->sched_clnt_list);
		(void) vcd_power_event(dev_ctxt, NULL,
			VCD_EVT_PWR_DEV_TERM_END);

		vcd_do_device_state_transition(drv_ctxt,
			VCD_DEVICE_STATE_NOT_INIT, ev_code);
	}
	return rc;
}
void vcd_handle_device_init_failed(struct vcd_drv_ctxt_type_t *p_drv_ctxt,
                                   u32 status)
{
    struct vcd_clnt_ctxt_type_t *p_client;
    struct vcd_clnt_ctxt_type_t *p_tmp_client;

    VCD_MSG_ERROR("Device init failed. status = %d", status);

    p_client = p_drv_ctxt->dev_ctxt.p_cctxt_list_head;
    while (p_client) {
        p_client->callback(VCD_EVT_RESP_OPEN,
                           status, NULL, 0, 0, p_client->p_client_data);

        p_tmp_client = p_client;
        p_client = p_client->p_next;

        vcd_destroy_client_context(p_tmp_client);
    }
    if (ddl_device_release(NULL))
        VCD_MSG_ERROR("Failed: ddl_device_release");

    (void)sched_destroy(p_drv_ctxt->dev_ctxt.sched_hdl);
    p_drv_ctxt->dev_ctxt.sched_hdl = NULL;

    if (vcd_power_event(&p_drv_ctxt->dev_ctxt,
                        NULL, VCD_EVT_PWR_DEV_INIT_FAIL))
        VCD_MSG_ERROR("VCD_EVT_PWR_DEV_INIT_FAIL failed");

    vcd_do_device_state_transition(p_drv_ctxt,
                                   VCD_DEVICE_STATE_NOT_INIT,
                                   DEVICE_STATE_EVENT_NUMBER(pf_dev_cb));
}