linux/include/linux/irqchip/chained_irq.h
<<
>>
Prefs
   1/*
   2 * Chained IRQ handlers support.
   3 *
   4 * Copyright (C) 2011 ARM Ltd.
   5 *
   6 * This program is free software: you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  17 */
  18#ifndef __IRQCHIP_CHAINED_IRQ_H
  19#define __IRQCHIP_CHAINED_IRQ_H
  20
  21#include <linux/irq.h>
  22
  23/*
  24 * Entry/exit functions for chained handlers where the primary IRQ chip
  25 * may implement either fasteoi or level-trigger flow control.
  26 */
  27static inline void chained_irq_enter(struct irq_chip *chip,
  28                                     struct irq_desc *desc)
  29{
  30        /* FastEOI controllers require no action on entry. */
  31        if (chip->irq_eoi)
  32                return;
  33
  34        if (chip->irq_mask_ack) {
  35                chip->irq_mask_ack(&desc->irq_data);
  36        } else {
  37                chip->irq_mask(&desc->irq_data);
  38                if (chip->irq_ack)
  39                        chip->irq_ack(&desc->irq_data);
  40        }
  41}
  42
  43static inline void chained_irq_exit(struct irq_chip *chip,
  44                                    struct irq_desc *desc)
  45{
  46        if (chip->irq_eoi)
  47                chip->irq_eoi(&desc->irq_data);
  48        else
  49                chip->irq_unmask(&desc->irq_data);
  50}
  51
  52#endif /* __IRQCHIP_CHAINED_IRQ_H */
  53