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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/arch/arm/mach-mx1ads/irq.c
  3.  *
  4.  *  Copyright (C) 1999 ARM Limited
  5.  *  Copyright (C) 2002 Shane Nay (shane@minirl.com)
  6.  *
  7.  * This program is free software; you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License as published by
  9.  * the Free Software Foundation; either version 2 of the License, or
  10.  * (at your option) any later version.
  11.  *
  12.  * This program is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  * GNU General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this program; if not, write to the Free Software
  19.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20.  */
  21. #include <linux/init.h>
  22. #include <asm/hardware.h>
  23. #include <asm/irq.h>
  24. #include <asm/io.h>
  25. #include <asm/mach/irq.h>
  26. /*
  27.  *
  28.  * We simply use the ENABLE DISABLE registers inside of the MX1
  29.  * to turn on/off specific interrupts.  FIXME- We should
  30.  * also add support for the accelerated interrupt controller
  31.  * by putting offets to irq jump code in the appropriate
  32.  * places.
  33.  *
  34.  */
  35. #define INTENNUM_OFF              0x8
  36. #define INTDISNUM_OFF             0xC
  37. #define VA_AITC_BASE              IO_ADDRESS(MX1ADS_AITC_BASE)
  38. #define MX1ADS_AITC_INTDISNUM     (VA_AITC_BASE + INTDISNUM_OFF)
  39. #define MX1ADS_AITC_INTENNUM      (VA_AITC_BASE + INTENNUM_OFF)
  40. static void
  41. mx1ads_mask_irq(unsigned int irq)
  42. {
  43. __raw_writel(irq, MX1ADS_AITC_INTDISNUM);
  44. }
  45. static void
  46. mx1ads_unmask_irq(unsigned int irq)
  47. {
  48. __raw_writel(irq, MX1ADS_AITC_INTENNUM);
  49. }
  50. void __init
  51. mx1ads_init_irq(void)
  52. {
  53. unsigned int i;
  54. for (i = 0; i < NR_IRQS; i++) {
  55. irq_desc[i].valid = 1;
  56. irq_desc[i].probe_ok = 1;
  57. irq_desc[i].mask_ack = mx1ads_mask_irq;
  58. irq_desc[i].mask = mx1ads_mask_irq;
  59. irq_desc[i].unmask = mx1ads_unmask_irq;
  60. }
  61. /* Disable all interrupts initially. */
  62. /* In MX1 this is done in the bootloader. */
  63. }