ints_h8300h.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * linux/arch/h8300/platform/h8300h/ints_h8300h.c
  3. * Interrupt handling CPU variants
  4. *
  5. * Yoshinori Sato <ysato@users.sourceforge.jp>
  6. *
  7. */
  8. #include <linux/config.h>
  9. #include <linux/init.h>
  10. #include <linux/errno.h>
  11. #include <asm/ptrace.h>
  12. #include <asm/traps.h>
  13. #include <asm/irq.h>
  14. #include <asm/io.h>
  15. #include <asm/gpio.h>
  16. #include <asm/regs306x.h>
  17. /* saved vector list */
  18. const int __initdata h8300_saved_vectors[]={
  19. #if defined(CONFIG_GDB_DEBUG)
  20. TRAP3_VEC,
  21. #endif
  22. -1
  23. };
  24. /* trap entry table */
  25. const unsigned long __initdata h8300_trap_table[NR_TRAPS]={
  26. 0,0,0,0,0,0,0,0,
  27. (unsigned long)system_call, /* TRAPA #0 */
  28. 0,0,
  29. (unsigned long)trace_break, /* TRAPA #3 */
  30. };
  31. int h8300_enable_irq_pin(unsigned int irq)
  32. {
  33. int bitmask;
  34. if (irq < EXT_IRQ0 || irq > EXT_IRQ5)
  35. return 0;
  36. /* initialize IRQ pin */
  37. bitmask = 1 << (irq - EXT_IRQ0);
  38. switch(irq) {
  39. case EXT_IRQ0:
  40. case EXT_IRQ1:
  41. case EXT_IRQ2:
  42. case EXT_IRQ3:
  43. if (H8300_GPIO_RESERVE(H8300_GPIO_P8, bitmask) == 0)
  44. return -EBUSY;
  45. H8300_GPIO_DDR(H8300_GPIO_P8, bitmask, H8300_GPIO_INPUT);
  46. break;
  47. case EXT_IRQ4:
  48. case EXT_IRQ5:
  49. if (H8300_GPIO_RESERVE(H8300_GPIO_P9, bitmask) == 0)
  50. return -EBUSY;
  51. H8300_GPIO_DDR(H8300_GPIO_P9, bitmask, H8300_GPIO_INPUT);
  52. break;
  53. }
  54. return 0;
  55. }
  56. void h8300_disable_irq_pin(unsigned int irq)
  57. {
  58. int bitmask;
  59. if (irq < EXT_IRQ0 || irq > EXT_IRQ5)
  60. return;
  61. /* disable interrupt & release IRQ pin */
  62. bitmask = 1 << (irq - EXT_IRQ0);
  63. switch(irq) {
  64. case EXT_IRQ0:
  65. case EXT_IRQ1:
  66. case EXT_IRQ2:
  67. case EXT_IRQ3:
  68. *(volatile unsigned char *)IER &= ~bitmask;
  69. H8300_GPIO_FREE(H8300_GPIO_P8, bitmask);
  70. break ;
  71. case EXT_IRQ4:
  72. case EXT_IRQ5:
  73. *(volatile unsigned char *)IER &= ~bitmask;
  74. H8300_GPIO_FREE(H8300_GPIO_P9, bitmask);
  75. break;
  76. }
  77. }