| H. Peter Anvin | 1965aae | 2008-10-22 22:26:29 -0700 | [diff] [blame] | 1 | #ifndef _ASM_X86_I8259_H | 
 | 2 | #define _ASM_X86_I8259_H | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 3 |  | 
| David P. Reed | bc0a733 | 2008-02-18 13:58:34 -0500 | [diff] [blame] | 4 | #include <linux/delay.h> | 
 | 5 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 6 | extern unsigned int cached_irq_mask; | 
 | 7 |  | 
| Joe Perches | ace4fdb | 2008-03-23 01:02:19 -0700 | [diff] [blame] | 8 | #define __byte(x, y)		(((unsigned char *)&(y))[x]) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 9 | #define cached_master_mask	(__byte(0, cached_irq_mask)) | 
 | 10 | #define cached_slave_mask	(__byte(1, cached_irq_mask)) | 
 | 11 |  | 
| Thomas Gleixner | f20ebee | 2008-01-30 13:30:29 +0100 | [diff] [blame] | 12 | /* i8259A PIC registers */ | 
 | 13 | #define PIC_MASTER_CMD		0x20 | 
 | 14 | #define PIC_MASTER_IMR		0x21 | 
 | 15 | #define PIC_MASTER_ISR		PIC_MASTER_CMD | 
 | 16 | #define PIC_MASTER_POLL		PIC_MASTER_ISR | 
 | 17 | #define PIC_MASTER_OCW3		PIC_MASTER_ISR | 
 | 18 | #define PIC_SLAVE_CMD		0xa0 | 
 | 19 | #define PIC_SLAVE_IMR		0xa1 | 
 | 20 |  | 
 | 21 | /* i8259A PIC related value */ | 
 | 22 | #define PIC_CASCADE_IR		2 | 
 | 23 | #define MASTER_ICW4_DEFAULT	0x01 | 
 | 24 | #define SLAVE_ICW4_DEFAULT	0x01 | 
 | 25 | #define PIC_ICW4_AEOI		2 | 
 | 26 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 27 | extern spinlock_t i8259A_lock; | 
 | 28 |  | 
 | 29 | extern void init_8259A(int auto_eoi); | 
 | 30 | extern void enable_8259A_irq(unsigned int irq); | 
 | 31 | extern void disable_8259A_irq(unsigned int irq); | 
 | 32 | extern unsigned int startup_8259A_irq(unsigned int irq); | 
 | 33 |  | 
| David P. Reed | bc0a733 | 2008-02-18 13:58:34 -0500 | [diff] [blame] | 34 | /* the PIC may need a careful delay on some platforms, hence specific calls */ | 
 | 35 | static inline unsigned char inb_pic(unsigned int port) | 
 | 36 | { | 
 | 37 | 	unsigned char value = inb(port); | 
 | 38 |  | 
 | 39 | 	/* | 
 | 40 | 	 * delay for some accesses to PIC on motherboard or in chipset | 
 | 41 | 	 * must be at least one microsecond, so be safe here: | 
 | 42 | 	 */ | 
 | 43 | 	udelay(2); | 
 | 44 |  | 
 | 45 | 	return value; | 
 | 46 | } | 
 | 47 |  | 
 | 48 | static inline void outb_pic(unsigned char value, unsigned int port) | 
 | 49 | { | 
 | 50 | 	outb(value, port); | 
 | 51 | 	/* | 
 | 52 | 	 * delay for some accesses to PIC on motherboard or in chipset | 
 | 53 | 	 * must be at least one microsecond, so be safe here: | 
 | 54 | 	 */ | 
 | 55 | 	udelay(2); | 
 | 56 | } | 
| Alan Cox | 466eed2 | 2008-01-30 13:33:14 +0100 | [diff] [blame] | 57 |  | 
| Pavel Machek | 40bd217 | 2008-05-21 11:44:02 +0200 | [diff] [blame] | 58 | extern struct irq_chip i8259A_chip; | 
 | 59 |  | 
| Suresh Siddha | d94d93c | 2008-07-10 11:16:46 -0700 | [diff] [blame] | 60 | extern void mask_8259A(void); | 
 | 61 | extern void unmask_8259A(void); | 
 | 62 |  | 
| H. Peter Anvin | 1965aae | 2008-10-22 22:26:29 -0700 | [diff] [blame] | 63 | #endif /* _ASM_X86_I8259_H */ |