static void cmd_crash_exit_handler(struct dpram_link_device *dpld) { struct link_device *ld = &dpld->ld; u32 size = dpld->dpctl->dp_size; char *dpram_buff = NULL; ld->mode = LINK_MODE_ULOAD; if (!wake_lock_active(&dpld->wlock)) wake_lock(&dpld->wlock); mif_err("%s: Recv 0xC9 (CRASH_EXIT)\n", ld->name); if (dpld->dp_type == CP_IDPRAM) dpram_wake_up(dpld); dpram_buff = kzalloc(size + (MAX_MIF_SEPA_SIZE * 2), GFP_ATOMIC); if (!dpram_buff) { mif_err("DPRAM dump failed!!\n"); } else { memset(dpram_buff, 0, size + (MAX_MIF_SEPA_SIZE * 2)); memcpy(dpram_buff, MIF_SEPARATOR_DPRAM, MAX_MIF_SEPA_SIZE); memcpy(dpram_buff + MAX_MIF_SEPA_SIZE, &size, sizeof(u32)); dpram_buff += (MAX_MIF_SEPA_SIZE * 2); dpram_dump_memory(ld, dpram_buff); } del_timer(&dpld->crash_ack_timer); if (dpld->ext_op && dpld->ext_op->crash_log) dpld->ext_op->crash_log(dpld); handle_cp_crash(dpld); }
static void handle_no_crash_ack(unsigned long arg) { struct dpram_link_device *dpld = (struct dpram_link_device *)arg; struct link_device *ld = &dpld->ld; mif_err("%s: ERR! No CRASH_EXIT ACK from CP\n", ld->mc->name); if (!wake_lock_active(&dpld->wlock)) wake_lock(&dpld->wlock); handle_cp_crash(dpld); }
static void cmd_crash_exit_handler(struct dpram_link_device *dpld) { struct link_device *ld = &dpld->ld; ld->mode = LINK_MODE_ULOAD; if (!wake_lock_active(&dpld->wlock)) wake_lock(&dpld->wlock); mif_err("%s: Recv 0xC9 (CRASH_EXIT)\n", ld->name); dpram_wake_up(dpld); del_timer(&dpld->crash_ack_timer); if (dpld->ext_op && dpld->ext_op->crash_log) dpld->ext_op->crash_log(dpld); handle_cp_crash(dpld); }