2008-10-23 09:26:29 +04:00
# ifndef _ASM_X86_I8259_H
# define _ASM_X86_I8259_H
2005-04-17 02:20:36 +04:00
2008-02-18 21:58:34 +03:00
# include <linux/delay.h>
2005-04-17 02:20:36 +04:00
extern unsigned int cached_irq_mask ;
2008-03-23 11:02:19 +03:00
# define __byte(x, y) (((unsigned char *)&(y))[x])
2005-04-17 02:20:36 +04:00
# define cached_master_mask (__byte(0, cached_irq_mask))
# define cached_slave_mask (__byte(1, cached_irq_mask))
2008-01-30 15:30:29 +03: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 20:35:11 +04:00
extern raw_spinlock_t i8259A_lock ;
2005-04-17 02:20:36 +04:00
2008-02-18 21:58:34 +03: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 15:33:14 +03:00
2008-05-21 13:44:02 +04:00
extern struct irq_chip i8259A_chip ;
2009-11-09 22:24:14 +03:00
struct legacy_pic {
int nr_legacy_irqs ;
struct irq_chip * chip ;
2010-09-28 17:01:33 +04:00
void ( * mask ) ( unsigned int irq ) ;
void ( * unmask ) ( unsigned int irq ) ;
2009-11-09 22:24:14 +03: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-23 09:26:29 +04:00
# endif /* _ASM_X86_I8259_H */