ints_h8300h.c 1.7 KB

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