i8259.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* i8259.h - Intel 8259a PIC (Programmable Interrupt Controller) */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01h,23apr02,hdn  added prototypes for new BOI/EOI rtn (spr 76411)
  7. 01g,08mar02,hdn  added prototype i8259Init() for HTT (spr 73738)
  8. 01f,28may97,hdn  copied i8259a.h to i8259.h for APIC support.
  9. 01e,17mar97,hdn  added function declarations.
  10. 01d,03jan95,vin  added PIC_ISR_MASK, PIC_IRR_MASK, OCW3
  11. 01c,16aug93,hdn  deleted PIC_BASE_ADRS macros.
  12. 01b,16jun93,hdn  updated to 5.1.
  13. 01a,15may92,hdn  written.
  14. */
  15. #ifndef __INCi8259h
  16. #define __INCi8259h
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. /*
  21.  * The macro PIC_REG_ADDR_INTERVAL must be defined
  22.  * when including this header.
  23.  */
  24. /* default definitions */
  25. #define CAST
  26. #define PIC_ADRS(base,reg)   (CAST (base+(reg*PIC_REG_ADDR_INTERVAL)))
  27. /* register definitions */
  28. #define PIC_port1(base) PIC_ADRS(base,0x00) /* port 1. */
  29. #define PIC_port2(base) PIC_ADRS(base,0x01) /* port 2. */
  30. /* alias */
  31. #define PIC_IMASK(base) PIC_port2(base) /* Interrupt mask. */
  32. #define PIC_IACK(base) PIC_port1(base) /* Interrupt acknowledge. */
  33. #define PIC_ISR_MASK(base) PIC_port1(base) /* in-service register mask */
  34. #define PIC_IRR_MASK(base) PIC_port1(base)  /* interrupt request reg */
  35. #define OCW3_DEF 0x08 /* 3rd default control word */
  36. #define OCW3_PCB 0x04 /* Polling Control Bit */
  37. #define OCW3_ISR 0x03 /* Read in-service reg */
  38. #define OCW3_IRR 0x02 /* Read inter request reg */
  39. #define I8259_EOI 0x20 /* EOI bit in OCW2 */
  40. #ifndef _ASMLANGUAGE
  41. #if defined(__STDC__) || defined(__cplusplus)
  42. IMPORT VOID i8259Init (void);
  43. IMPORT int sysIntLevel (int arg);
  44. IMPORT VOID sysIntLock (void);
  45. IMPORT VOID sysIntUnlock (void);
  46. IMPORT VOID  i8259IntBoi  (int irqNo);
  47. IMPORT VOID  i8259IntBoiEem (int irqNo);
  48. IMPORT VOID  i8259IntBoiSmm (int irqNo);
  49. IMPORT VOID  i8259IntEoiSmm (int irqNo);
  50. IMPORT VOID  i8259IntEoiMaster (int irqNo);
  51. IMPORT VOID  i8259IntEoiSlave (int irqNo);
  52. IMPORT VOID  i8259IntEoiSlaveNfnm (int irqNo);
  53. IMPORT VOID  i8259IntEoiSlaveSfnm (int irqNo);
  54. #else
  55. IMPORT VOID i8259Init ();
  56. IMPORT int sysIntLevel ();
  57. IMPORT VOID sysIntLock ();
  58. IMPORT VOID sysIntUnlock ();
  59. IMPORT VOID  i8259IntBoi  ();
  60. IMPORT VOID  i8259IntBoiEem ();
  61. IMPORT VOID  i8259IntBoiSmm ();
  62. IMPORT VOID  i8259IntEoiSmm ();
  63. IMPORT VOID  i8259IntEoiMaster ();
  64. IMPORT VOID  i8259IntEoiSlave ();
  65. IMPORT VOID  i8259IntEoiSlaveNfnm ();
  66. IMPORT VOID  i8259IntEoiSlaveSfnm ();
  67. #endif  /* __STDC__ */
  68. #endif /* _ASMLANGUAGE */
  69. #ifdef __cplusplus
  70. }
  71. #endif
  72. #endif /* __INCi8259h */