static int msm_gic_set_irq_wake(struct irq_data *d, unsigned int on) { uint32_t mask; int smsm_irq = msm_gic_irq_to_smsm[d->irq]; if (smsm_irq == 0) { pr_err("bad wake up irq %d\n", d->irq); return -EINVAL; } /* check whether irq to be bypassed are not */ if (msm_mpm_bypass_apps_irq(d->irq)) return 0; if (smsm_irq == SMSM_FAKE_IRQ) return 0; mask = GIC_IRQ_MASK(smsm_irq - 1); if (on) msm_gic_irq_smsm_wake_enable[1] |= mask; else msm_gic_irq_smsm_wake_enable[1] &= ~mask; return 0; }
static void msm_gic_unmask_irq(struct irq_data *d) { unsigned int index = GIC_IRQ_INDEX(d->irq); uint32_t mask; int smsm_irq = msm_gic_irq_to_smsm[d->irq]; mask = GIC_IRQ_MASK(d->irq); /* check whether irq to be bypassed are not */ if (msm_mpm_bypass_apps_irq(d->irq)) return; if (smsm_irq == 0) { msm_gic_irq_idle_disable[index] |= mask; } else { mask = GIC_IRQ_MASK(smsm_irq - 1); msm_gic_irq_smsm_wake_enable[0] |= mask; } }
static void msm_gic_mask_irq(struct irq_data *d) { unsigned int index = GIC_IRQ_INDEX(d->irq); uint32_t mask; int smsm_irq = msm_gic_irq_to_smsm[d->irq]; mask = GIC_IRQ_MASK(d->irq); if (msm_mpm_bypass_apps_irq(d->irq)) return; if (smsm_irq == 0) { msm_gic_irq_idle_disable[index] &= ~mask; } else { mask = GIC_IRQ_MASK(smsm_irq - 1); msm_gic_irq_smsm_wake_enable[0] &= ~mask; } }