linux/include/asm-m68k/irq.h
<<
>>
Prefs
   1#ifndef _M68K_IRQ_H_
   2#define _M68K_IRQ_H_
   3
   4#include <linux/linkage.h>
   5#include <linux/hardirq.h>
   6#include <linux/spinlock_types.h>
   7
   8/*
   9 * This should be the same as the max(NUM_X_SOURCES) for all the
  10 * different m68k hosts compiled into the kernel.
  11 * Currently the Atari has 72 and the Amiga 24, but if both are
  12 * supported in the kernel it is better to make room for 72.
  13 */
  14#if defined(CONFIG_VME) || defined(CONFIG_SUN3) || defined(CONFIG_SUN3X)
  15#define NR_IRQS 200
  16#elif defined(CONFIG_ATARI) || defined(CONFIG_MAC)
  17#define NR_IRQS 72
  18#elif defined(CONFIG_Q40)
  19#define NR_IRQS 43
  20#elif defined(CONFIG_AMIGA)
  21#define NR_IRQS 32
  22#elif defined(CONFIG_APOLLO)
  23#define NR_IRQS 24
  24#elif defined(CONFIG_HP300)
  25#define NR_IRQS 8
  26#else
  27#define NR_IRQS 0
  28#endif
  29
  30/*
  31 * The hardirq mask has to be large enough to have
  32 * space for potentially all IRQ sources in the system
  33 * nesting on a single CPU:
  34 */
  35#if (1 << HARDIRQ_BITS) < NR_IRQS
  36# error HARDIRQ_BITS is too low!
  37#endif
  38
  39/*
  40 * Interrupt source definitions
  41 * General interrupt sources are the level 1-7.
  42 * Adding an interrupt service routine for one of these sources
  43 * results in the addition of that routine to a chain of routines.
  44 * Each one is called in succession.  Each individual interrupt
  45 * service routine should determine if the device associated with
  46 * that routine requires service.
  47 */
  48
  49#define IRQ_SPURIOUS    0
  50
  51#define IRQ_AUTO_1      1       /* level 1 interrupt */
  52#define IRQ_AUTO_2      2       /* level 2 interrupt */
  53#define IRQ_AUTO_3      3       /* level 3 interrupt */
  54#define IRQ_AUTO_4      4       /* level 4 interrupt */
  55#define IRQ_AUTO_5      5       /* level 5 interrupt */
  56#define IRQ_AUTO_6      6       /* level 6 interrupt */
  57#define IRQ_AUTO_7      7       /* level 7 interrupt (non-maskable) */
  58
  59#define IRQ_USER        8
  60
  61extern unsigned int irq_canonicalize(unsigned int irq);
  62
  63struct pt_regs;
  64
  65/*
  66 * various flags for request_irq() - the Amiga now uses the standard
  67 * mechanism like all other architectures - IRQF_DISABLED and
  68 * IRQF_SHARED are your friends.
  69 */
  70#ifndef MACH_AMIGA_ONLY
  71#define IRQ_FLG_LOCK    (0x0001)        /* handler is not replaceable   */
  72#define IRQ_FLG_REPLACE (0x0002)        /* replace existing handler     */
  73#define IRQ_FLG_FAST    (0x0004)
  74#define IRQ_FLG_SLOW    (0x0008)
  75#define IRQ_FLG_STD     (0x8000)        /* internally used              */
  76#endif
  77
  78/*
  79 * This structure is used to chain together the ISRs for a particular
  80 * interrupt source (if it supports chaining).
  81 */
  82typedef struct irq_node {
  83        int             (*handler)(int, void *);
  84        void            *dev_id;
  85        struct irq_node *next;
  86        unsigned long   flags;
  87        const char      *devname;
  88} irq_node_t;
  89
  90/*
  91 * This structure has only 4 elements for speed reasons
  92 */
  93struct irq_handler {
  94        int             (*handler)(int, void *);
  95        unsigned long   flags;
  96        void            *dev_id;
  97        const char      *devname;
  98};
  99
 100struct irq_controller {
 101        const char *name;
 102        spinlock_t lock;
 103        int (*startup)(unsigned int irq);
 104        void (*shutdown)(unsigned int irq);
 105        void (*enable)(unsigned int irq);
 106        void (*disable)(unsigned int irq);
 107};
 108
 109extern int m68k_irq_startup(unsigned int);
 110extern void m68k_irq_shutdown(unsigned int);
 111
 112/*
 113 * This function returns a new irq_node_t
 114 */
 115extern irq_node_t *new_irq_node(void);
 116
 117extern void m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *));
 118extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt,
 119                                      void (*handler)(unsigned int, struct pt_regs *));
 120extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int);
 121
 122asmlinkage void m68k_handle_int(unsigned int);
 123asmlinkage void __m68k_handle_int(unsigned int, struct pt_regs *);
 124
 125#endif /* _M68K_IRQ_H_ */
 126
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.