| 
									
										
										
										
											2008-10-22 22:26:29 -07:00
										 |  |  | #ifndef _ASM_X86_I8259_H
 | 
					
						
							|  |  |  | #define _ASM_X86_I8259_H
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-18 13:58:34 -05:00
										 |  |  | #include <linux/delay.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | extern unsigned int cached_irq_mask; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-23 01:02:19 -07:00
										 |  |  | #define __byte(x, y)		(((unsigned char *)&(y))[x])
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #define cached_master_mask	(__byte(0, cached_irq_mask))
 | 
					
						
							|  |  |  | #define cached_slave_mask	(__byte(1, cached_irq_mask))
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:30:29 +01:00
										 |  |  | /* i8259A PIC registers */ | 
					
						
							|  |  |  | #define PIC_MASTER_CMD		0x20
 | 
					
						
							|  |  |  | #define PIC_MASTER_IMR		0x21
 | 
					
						
							|  |  |  | #define PIC_MASTER_ISR		PIC_MASTER_CMD
 | 
					
						
							|  |  |  | #define PIC_MASTER_POLL		PIC_MASTER_ISR
 | 
					
						
							|  |  |  | #define PIC_MASTER_OCW3		PIC_MASTER_ISR
 | 
					
						
							|  |  |  | #define PIC_SLAVE_CMD		0xa0
 | 
					
						
							|  |  |  | #define PIC_SLAVE_IMR		0xa1
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* i8259A PIC related value */ | 
					
						
							|  |  |  | #define PIC_CASCADE_IR		2
 | 
					
						
							|  |  |  | #define MASTER_ICW4_DEFAULT	0x01
 | 
					
						
							|  |  |  | #define SLAVE_ICW4_DEFAULT	0x01
 | 
					
						
							|  |  |  | #define PIC_ICW4_AEOI		2
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-25 18:35:11 +02:00
										 |  |  | extern raw_spinlock_t i8259A_lock; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-18 13:58:34 -05:00
										 |  |  | /* the PIC may need a careful delay on some platforms, hence specific calls */ | 
					
						
							|  |  |  | static inline unsigned char inb_pic(unsigned int port) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	unsigned char value = inb(port); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*
 | 
					
						
							|  |  |  | 	 * delay for some accesses to PIC on motherboard or in chipset | 
					
						
							|  |  |  | 	 * must be at least one microsecond, so be safe here: | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	udelay(2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return value; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void outb_pic(unsigned char value, unsigned int port) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	outb(value, port); | 
					
						
							|  |  |  | 	/*
 | 
					
						
							|  |  |  | 	 * delay for some accesses to PIC on motherboard or in chipset | 
					
						
							|  |  |  | 	 * must be at least one microsecond, so be safe here: | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	udelay(2); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2008-01-30 13:33:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-21 11:44:02 +02:00
										 |  |  | extern struct irq_chip i8259A_chip; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-09 11:24:14 -08:00
										 |  |  | struct legacy_pic { | 
					
						
							|  |  |  | 	int nr_legacy_irqs; | 
					
						
							|  |  |  | 	struct irq_chip *chip; | 
					
						
							| 
									
										
										
										
											2010-09-28 15:01:33 +02:00
										 |  |  | 	void (*mask)(unsigned int irq); | 
					
						
							|  |  |  | 	void (*unmask)(unsigned int irq); | 
					
						
							| 
									
										
										
										
											2009-11-09 11:24:14 -08:00
										 |  |  | 	void (*mask_all)(void); | 
					
						
							|  |  |  | 	void (*restore_mask)(void); | 
					
						
							|  |  |  | 	void (*init)(int auto_eoi); | 
					
						
							|  |  |  | 	int (*irq_pending)(unsigned int irq); | 
					
						
							|  |  |  | 	void (*make_irq)(unsigned int irq); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern struct legacy_pic *legacy_pic; | 
					
						
							|  |  |  | extern struct legacy_pic null_legacy_pic; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-22 22:26:29 -07:00
										 |  |  | #endif /* _ASM_X86_I8259_H */
 |