• Ido Yariv's avatar
    wl12xx: Handle platforms without level trigger interrupts · 341b7cde
    Ido Yariv authored
    Some platforms are incapable of triggering on level interrupts. Add a
    platform quirks member in the platform data structure, as well as an
    edge interrupt quirk which can be set on such platforms.
    
    When the interrupt is requested with IRQF_TRIGGER_RISING, IRQF_ONESHOT
    cannot be used, as we might miss interrupts that occur after the FW
    status is cleared and before the threaded interrupt handler exits.
    
    Moreover, when IRQF_ONESHOT is not set, iterating more than once in the
    threaded interrupt handler introduces a few race conditions between this
    handler and the hardirq handler. Currently this is worked around by
    limiting the loop to one iteration only. This workaround has an impact
    on performance. To remove to this restriction, the race conditions will
    need to be addressed.
    Signed-off-by: default avatarIdo Yariv <ido@wizery.com>
    Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
    341b7cde
wl12xx.h 14.6 KB