linux/include/asm-arm26/irqchip.h
<<
>>
Prefs
   1/*
   2 *  linux/include/asm-arm/mach/irq.h
   3 *
   4 *  Copyright (C) 1995-2000 Russell King.
   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#ifndef __ASM_ARM_MACH_IRQ_H
  11#define __ASM_ARM_MACH_IRQ_H
  12
  13struct irqdesc;
  14struct pt_regs;
  15struct seq_file;
  16
  17typedef void (*irq_handler_t)(unsigned int, struct irqdesc *, struct pt_regs *);
  18typedef void (*irq_control_t)(unsigned int);
  19
  20struct irqchip {
  21        /*
  22         * Acknowledge the IRQ.
  23         * If this is a level-based IRQ, then it is expected to mask the IRQ
  24         * as well.
  25         */
  26        void (*ack)(unsigned int);
  27        /*
  28         * Mask the IRQ in hardware.
  29         */
  30        void (*mask)(unsigned int);
  31        /*
  32         * Unmask the IRQ in hardware.
  33         */
  34        void (*unmask)(unsigned int);
  35        /*
  36         * Re-run the IRQ
  37         */
  38        void (*rerun)(unsigned int);
  39        /*
  40         * Set the type of the IRQ.
  41         */
  42        int (*type)(unsigned int, unsigned int);
  43};
  44
  45struct irqdesc {
  46        irq_handler_t   handle;
  47        struct irqchip  *chip;
  48        struct irqaction *action;
  49
  50        unsigned int    enabled  : 1;           /* IRQ is currently enabled   */
  51        unsigned int    triggered: 1;           /* IRQ has occurred           */
  52        unsigned int    running  : 1;           /* IRQ is running             */
  53        unsigned int    pending  : 1;           /* IRQ is pending             */
  54        unsigned int    probing  : 1;           /* IRQ in use for a probe     */
  55        unsigned int    probe_ok : 1;           /* IRQ can be used for probe  */
  56        unsigned int    valid    : 1;           /* IRQ claimable              */
  57        unsigned int    noautoenable : 1;       /* don't automatically enable IRQ */
  58        unsigned int    unused   :23;
  59        unsigned int    depth;                  /* disable depth              */
  60
  61        /*
  62         * IRQ lock detection
  63         */
  64        unsigned int    lck_cnt;
  65        unsigned int    lck_pc;
  66        unsigned int    lck_jif;
  67};
  68
  69extern struct irqdesc irq_desc[];
  70
  71/*
  72 * This is internal.  Do not use it.
  73 */
  74extern void (*init_arch_irq)(void);
  75extern void init_FIQ(void);
  76extern int show_fiq_list(struct seq_file *, void *);
  77void __set_irq_handler(unsigned int irq, irq_handler_t, int);
  78
  79/*
  80 * External stuff.
  81 */
  82#define set_irq_handler(irq,handler)            __set_irq_handler(irq,handler,0)
  83#define set_irq_chained_handler(irq,handler)    __set_irq_handler(irq,handler,1)
  84
  85void set_irq_chip(unsigned int irq, struct irqchip *);
  86void set_irq_flags(unsigned int irq, unsigned int flags);
  87
  88#define IRQF_VALID      (1 << 0)
  89#define IRQF_PROBE      (1 << 1)
  90#define IRQF_NOAUTOEN   (1 << 2)
  91
  92/*
  93 * Built-in IRQ handlers.
  94 */
  95void do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs);
  96void do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs);
  97void do_simple_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs);
  98void do_bad_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs);
  99void dummy_mask_unmask_irq(unsigned int irq);
 100
 101#endif
 102
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.