linux/arch/m68k/apollo/dn_ints.c
<<
>>
Prefs
   1#include <linux/interrupt.h>
   2#include <linux/irq.h>
   3
   4#include <asm/traps.h>
   5#include <asm/apollohw.h>
   6
   7unsigned int apollo_irq_startup(struct irq_data *data)
   8{
   9        unsigned int irq = data->irq;
  10
  11        if (irq < 8)
  12                *(volatile unsigned char *)(pica+1) &= ~(1 << irq);
  13        else
  14                *(volatile unsigned char *)(picb+1) &= ~(1 << (irq - 8));
  15        return 0;
  16}
  17
  18void apollo_irq_shutdown(struct irq_data *data)
  19{
  20        unsigned int irq = data->irq;
  21
  22        if (irq < 8)
  23                *(volatile unsigned char *)(pica+1) |= (1 << irq);
  24        else
  25                *(volatile unsigned char *)(picb+1) |= (1 << (irq - 8));
  26}
  27
  28void apollo_irq_eoi(struct irq_data *data)
  29{
  30        *(volatile unsigned char *)(pica) = 0x20;
  31        *(volatile unsigned char *)(picb) = 0x20;
  32}
  33
  34static struct irq_chip apollo_irq_chip = {
  35        .name           = "apollo",
  36        .irq_startup    = apollo_irq_startup,
  37        .irq_shutdown   = apollo_irq_shutdown,
  38        .irq_eoi        = apollo_irq_eoi,
  39};
  40
  41
  42void __init dn_init_IRQ(void)
  43{
  44        m68k_setup_user_interrupt(VEC_USER + 96, 16);
  45        m68k_setup_irq_controller(&apollo_irq_chip, handle_fasteoi_irq,
  46                                  IRQ_APOLLO, 16);
  47}
  48
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.