irq.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/arch/arm/mach-anakin/irq.c
  3.  *
  4.  *  Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
  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.  *  Changelog:
  11.  *   10-Apr-2001 TTC Created
  12.  */
  13. #include <linux/ptrace.h>
  14. #include <linux/sched.h>
  15. #include <linux/interrupt.h>
  16. #include <linux/init.h>
  17. #include <asm/irq.h>
  18. #include <asm/mach/irq.h>
  19. extern unsigned int anakin_irq_mask, anakin_active_irqs;
  20. extern void do_IRQ(int, struct pt_regs *);
  21. static void
  22. anakin_mask_irq(unsigned int irq)
  23. {
  24. anakin_irq_mask &= ~(1 << irq);
  25. }
  26. static void
  27. anakin_unmask_irq(unsigned int irq)
  28. {
  29. anakin_irq_mask |= (1 << irq);
  30. }
  31. /*
  32.  * This is a faked interrupt to deal with parallel interrupt requests
  33.  * on the Anakin.  Make sure that its interrupt number is not in any
  34.  * way conflicting with the hardware interrupt numbers!  Check
  35.  * IRQ_ANAKIN in linux/include/asm-arm/arch-anakin/irqs.h.
  36.  */
  37. static void
  38. anakin_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  39. {
  40. for (irq = 0; irq < NR_IRQS; irq++)
  41. if (anakin_active_irqs & (1 << irq))
  42. do_IRQ(irq, regs);
  43. }
  44. static struct irqaction anakin_irq = {
  45. name: "Anakin IRQ",
  46. handler: anakin_interrupt,
  47. flags: SA_INTERRUPT
  48. };
  49.  
  50. void __init
  51. irq_init_irq(void)
  52. {
  53. unsigned int irq;
  54. for (irq = 0; irq < NR_IRQS; irq++) {
  55. switch (irq) {
  56. case IRQ_UART0:
  57. case IRQ_UART1:
  58. case IRQ_UART2:
  59. case IRQ_TICK:
  60. case IRQ_CODEC:
  61. case IRQ_UART4:
  62. case IRQ_TOUCHSCREEN:
  63. case IRQ_UART3:
  64. case IRQ_FIFO:
  65. case IRQ_CAN:
  66. case IRQ_COMPACTFLASH:
  67. case IRQ_BOSH:
  68. case IRQ_ANAKIN:
  69. irq_desc[irq].valid = 1;
  70. irq_desc[irq].mask_ack = anakin_mask_irq;
  71. irq_desc[irq].mask = anakin_mask_irq;
  72. irq_desc[irq].unmask = anakin_unmask_irq;
  73. }
  74. }
  75. setup_arm_irq(IRQ_ANAKIN, &anakin_irq);
  76. }