static void wcnss_wdog_bite_work_hdlr(struct work_struct *wcnss_work) { struct pronto_data *drv = container_of(wcnss_work, struct pronto_data, wcnss_wdog_bite_work); wcnss_log_debug_regs_on_bite(); restart_wcnss(drv); }
static irqreturn_t wcnss_err_fatal_intr_handler(int irq, void *dev_id) { struct pronto_data *drv = dev_id; pr_err("Fatal error on the wcnss.\n"); drv->crash = true; if (drv->restart_inprogress) { pr_err("wcnss: Ignoring error fatal, restart in progress\n"); return IRQ_HANDLED; } drv->restart_inprogress = true; restart_wcnss(drv); return IRQ_HANDLED; }
static irqreturn_t wcnss_wdog_bite_irq_hdlr(int irq, void *dev_id) { struct pronto_data *drv = dev_id; drv->crash = true; disable_irq_nosync(drv->irq); if (drv->restart_inprogress) { pr_err("Ignoring wcnss bite irq, restart in progress\n"); return IRQ_HANDLED; } wcnss_pronto_log_debug_regs(); drv->restart_inprogress = true; restart_wcnss(drv); return IRQ_HANDLED; }
static irqreturn_t wcnss_err_fatal_intr_handler(int irq, void *dev_id) { struct pronto_data *drv = subsys_to_drv(dev_id); pr_err("Fatal error on the wcnss.\n"); drv->crash = true; if (drv->restart_inprogress) { pr_err("wcnss: Ignoring error fatal, restart in progress\n"); return IRQ_HANDLED; } drv->restart_inprogress = true; restart_wcnss(drv); //S [VY52/VY55][bug_1807] Frank_Chan add schedule_delayed_work(&drv->subsys_crash_work, msecs_to_jiffies(5000)); //E [VY52/VY55][bug_1807] Frank_Chan add return IRQ_HANDLED; }