irq.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * include/asm-arm/arch-l7200/irq.h
  3.  *
  4.  * Copyright (C) 2000 Rob Scott (rscott@mtrob.fdns.ne
  5.  *                    Steve Hill (sjhill@cotw.com)
  6.  *
  7.  * Changelog:
  8.  *   01-02-2000 RS Created l7200 version, derived from ebsa110 code
  9.  *   04-15-2000 RS      Made dependent on hardware.h
  10.  *   05-05-2000 SJH     Complete rewrite
  11.  */
  12. #include <asm/arch/hardware.h>
  13. /*
  14.  * IRQ base register
  15.  */
  16. #define IRQ_BASE (IO_BASE_2 + 0x1000)
  17. /* 
  18.  * Normal IRQ registers
  19.  */
  20. #define IRQ_STATUS (*(volatile unsigned long *) (IRQ_BASE + 0x000))
  21. #define IRQ_RAWSTATUS (*(volatile unsigned long *) (IRQ_BASE + 0x004))
  22. #define IRQ_ENABLE (*(volatile unsigned long *) (IRQ_BASE + 0x008))
  23. #define IRQ_ENABLECLEAR (*(volatile unsigned long *) (IRQ_BASE + 0x00c))
  24. #define IRQ_SOFT (*(volatile unsigned long *) (IRQ_BASE + 0x010))
  25. #define IRQ_SOURCESEL (*(volatile unsigned long *) (IRQ_BASE + 0x018))
  26. /* 
  27.  * Fast IRQ registers
  28.  */
  29. #define FIQ_STATUS (*(volatile unsigned long *) (IRQ_BASE + 0x100))
  30. #define FIQ_RAWSTATUS (*(volatile unsigned long *) (IRQ_BASE + 0x104))
  31. #define FIQ_ENABLE (*(volatile unsigned long *) (IRQ_BASE + 0x108))
  32. #define FIQ_ENABLECLEAR (*(volatile unsigned long *) (IRQ_BASE + 0x10c))
  33. #define FIQ_SOFT (*(volatile unsigned long *) (IRQ_BASE + 0x110))
  34. #define FIQ_SOURCESEL (*(volatile unsigned long *) (IRQ_BASE + 0x118))
  35. #define fixup_irq(x) (x)
  36. static void l7200_mask_irq(unsigned int irq)
  37. {
  38. IRQ_ENABLECLEAR = 1 << irq;
  39. }
  40. static void l7200_unmask_irq(unsigned int irq)
  41. {
  42. IRQ_ENABLE = 1 << irq;
  43. }
  44.  
  45. static __inline__ void irq_init_irq(void)
  46. {
  47. int irq;
  48. IRQ_ENABLECLEAR = 0xffffffff; /* clear all interrupt enables */
  49. FIQ_ENABLECLEAR = 0xffffffff; /* clear all fast interrupt enables */
  50. for (irq = 0; irq < NR_IRQS; irq++) {
  51. irq_desc[irq].valid = 1;
  52. irq_desc[irq].probe_ok = 1;
  53. irq_desc[irq].mask_ack = l7200_mask_irq;
  54. irq_desc[irq].mask = l7200_mask_irq;
  55. irq_desc[irq].unmask = l7200_unmask_irq;
  56. }
  57. init_FIQ();
  58. }