root/arch/m68k/sun3/sun3ints.c

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

DEFINITIONS

This source file includes following definitions.
  1. sun3_disable_interrupts
  2. sun3_enable_interrupts
  3. sun3_enable_irq
  4. sun3_disable_irq
  5. sun3_int7
  6. sun3_int5
  7. sun3_vec255
  8. sun3_init_IRQ

   1  /*
   2  * linux/arch/m68k/sun3/sun3ints.c -- Sun-3(x) Linux interrupt handling code
   3  *
   4  * This file is subject to the terms and conditions of the GNU General Public
   5  * License.  See the file COPYING in the main directory of this archive
   6  * for more details.
   7  */
   8 
   9 #include <linux/types.h>
  10 #include <linux/kernel.h>
  11 #include <linux/sched.h>
  12 #include <linux/kernel_stat.h>
  13 #include <linux/interrupt.h>
  14 #include <asm/segment.h>
  15 #include <asm/intersil.h>
  16 #include <asm/oplib.h>
  17 #include <asm/sun3ints.h>
  18 #include <asm/irq_regs.h>
  19 #include <linux/seq_file.h>
  20 
  21 extern void sun3_leds (unsigned char);
  22 
  23 void sun3_disable_interrupts(void)
  24 {
  25         sun3_disable_irq(0);
  26 }
  27 
  28 void sun3_enable_interrupts(void)
  29 {
  30         sun3_enable_irq(0);
  31 }
  32 
  33 static int led_pattern[8] = {
  34        ~(0x80), ~(0x01),
  35        ~(0x40), ~(0x02),
  36        ~(0x20), ~(0x04),
  37        ~(0x10), ~(0x08)
  38 };
  39 
  40 volatile unsigned char* sun3_intreg;
  41 
  42 void sun3_enable_irq(unsigned int irq)
  43 {
  44         *sun3_intreg |=  (1 << irq);
  45 }
  46 
  47 void sun3_disable_irq(unsigned int irq)
  48 {
  49         *sun3_intreg &= ~(1 << irq);
  50 }
  51 
  52 static irqreturn_t sun3_int7(int irq, void *dev_id)
  53 {
  54         unsigned int cnt;
  55 
  56         cnt = kstat_irqs_cpu(irq, 0);
  57         if (!(cnt % 2000))
  58                 sun3_leds(led_pattern[cnt % 16000 / 2000]);
  59         return IRQ_HANDLED;
  60 }
  61 
  62 static irqreturn_t sun3_int5(int irq, void *dev_id)
  63 {
  64         unsigned long flags;
  65         unsigned int cnt;
  66 
  67         local_irq_save(flags);
  68 #ifdef CONFIG_SUN3
  69         intersil_clear();
  70 #endif
  71         sun3_disable_irq(5);
  72         sun3_enable_irq(5);
  73 #ifdef CONFIG_SUN3
  74         intersil_clear();
  75 #endif
  76         xtime_update(1);
  77         update_process_times(user_mode(get_irq_regs()));
  78         cnt = kstat_irqs_cpu(irq, 0);
  79         if (!(cnt % 20))
  80                 sun3_leds(led_pattern[cnt % 160 / 20]);
  81         local_irq_restore(flags);
  82         return IRQ_HANDLED;
  83 }
  84 
  85 static irqreturn_t sun3_vec255(int irq, void *dev_id)
  86 {
  87         return IRQ_HANDLED;
  88 }
  89 
  90 void __init sun3_init_IRQ(void)
  91 {
  92         *sun3_intreg = 1;
  93 
  94         m68k_setup_user_interrupt(VEC_USER, 128);
  95 
  96         if (request_irq(IRQ_AUTO_5, sun3_int5, 0, "clock", NULL))
  97                 pr_err("Couldn't register %s interrupt\n", "int5");
  98         if (request_irq(IRQ_AUTO_7, sun3_int7, 0, "nmi", NULL))
  99                 pr_err("Couldn't register %s interrupt\n", "int7");
 100         if (request_irq(IRQ_USER+127, sun3_vec255, 0, "vec255", NULL))
 101                 pr_err("Couldn't register %s interrupt\n", "vec255");
 102 }

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