root/arch/m68k/apollo/dn_ints.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. apollo_irq_startup
  2. apollo_irq_shutdown
  3. apollo_irq_eoi
  4. dn_init_IRQ

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <linux/interrupt.h>
   3 #include <linux/irq.h>
   4 
   5 #include <asm/traps.h>
   6 #include <asm/apollohw.h>
   7 
   8 unsigned int apollo_irq_startup(struct irq_data *data)
   9 {
  10         unsigned int irq = data->irq;
  11 
  12         if (irq < 8)
  13                 *(volatile unsigned char *)(pica+1) &= ~(1 << irq);
  14         else
  15                 *(volatile unsigned char *)(picb+1) &= ~(1 << (irq - 8));
  16         return 0;
  17 }
  18 
  19 void apollo_irq_shutdown(struct irq_data *data)
  20 {
  21         unsigned int irq = data->irq;
  22 
  23         if (irq < 8)
  24                 *(volatile unsigned char *)(pica+1) |= (1 << irq);
  25         else
  26                 *(volatile unsigned char *)(picb+1) |= (1 << (irq - 8));
  27 }
  28 
  29 void apollo_irq_eoi(struct irq_data *data)
  30 {
  31         *(volatile unsigned char *)(pica) = 0x20;
  32         *(volatile unsigned char *)(picb) = 0x20;
  33 }
  34 
  35 static struct irq_chip apollo_irq_chip = {
  36         .name           = "apollo",
  37         .irq_startup    = apollo_irq_startup,
  38         .irq_shutdown   = apollo_irq_shutdown,
  39         .irq_eoi        = apollo_irq_eoi,
  40 };
  41 
  42 
  43 void __init dn_init_IRQ(void)
  44 {
  45         m68k_setup_user_interrupt(VEC_USER + 96, 16);
  46         m68k_setup_irq_controller(&apollo_irq_chip, handle_fasteoi_irq,
  47                                   IRQ_APOLLO, 16);
  48 }

/* [<][>][^][v][top][bottom][index][help] */