i8259.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #ifndef _ASM_X86_I8259_H
  2. #define _ASM_X86_I8259_H
  3. #include <linux/delay.h>
  4. extern unsigned int cached_irq_mask;
  5. #define __byte(x, y) (((unsigned char *)&(y))[x])
  6. #define cached_master_mask (__byte(0, cached_irq_mask))
  7. #define cached_slave_mask (__byte(1, cached_irq_mask))
  8. /* i8259A PIC registers */
  9. #define PIC_MASTER_CMD 0x20
  10. #define PIC_MASTER_IMR 0x21
  11. #define PIC_MASTER_ISR PIC_MASTER_CMD
  12. #define PIC_MASTER_POLL PIC_MASTER_ISR
  13. #define PIC_MASTER_OCW3 PIC_MASTER_ISR
  14. #define PIC_SLAVE_CMD 0xa0
  15. #define PIC_SLAVE_IMR 0xa1
  16. /* i8259A PIC related value */
  17. #define PIC_CASCADE_IR 2
  18. #define MASTER_ICW4_DEFAULT 0x01
  19. #define SLAVE_ICW4_DEFAULT 0x01
  20. #define PIC_ICW4_AEOI 2
  21. extern raw_spinlock_t i8259A_lock;
  22. /* the PIC may need a careful delay on some platforms, hence specific calls */
  23. static inline unsigned char inb_pic(unsigned int port)
  24. {
  25. unsigned char value = inb(port);
  26. /*
  27. * delay for some accesses to PIC on motherboard or in chipset
  28. * must be at least one microsecond, so be safe here:
  29. */
  30. udelay(2);
  31. return value;
  32. }
  33. static inline void outb_pic(unsigned char value, unsigned int port)
  34. {
  35. outb(value, port);
  36. /*
  37. * delay for some accesses to PIC on motherboard or in chipset
  38. * must be at least one microsecond, so be safe here:
  39. */
  40. udelay(2);
  41. }
  42. extern struct irq_chip i8259A_chip;
  43. struct legacy_pic {
  44. int nr_legacy_irqs;
  45. struct irq_chip *chip;
  46. void (*mask)(unsigned int irq);
  47. void (*unmask)(unsigned int irq);
  48. void (*mask_all)(void);
  49. void (*restore_mask)(void);
  50. void (*init)(int auto_eoi);
  51. int (*irq_pending)(unsigned int irq);
  52. void (*make_irq)(unsigned int irq);
  53. };
  54. extern struct legacy_pic *legacy_pic;
  55. extern struct legacy_pic null_legacy_pic;
  56. #endif /* _ASM_X86_I8259_H */