x86: define outb_pic and inb_pic to stop using outb_p and inb_p
[sfrench/cifs-2.6.git] / include / asm-x86 / i8259.h
index 29d8f9a6b3fcc60a85528ce03b2edd5990129e99..e2650f21ca8d30892c94747a4438921c27c65eae 100644 (file)
@@ -1,12 +1,29 @@
 #ifndef __ASM_I8259_H__
 #define __ASM_I8259_H__
 
+#include <linux/delay.h>
+
 extern unsigned int cached_irq_mask;
 
-#define __byte(x,y)            (((unsigned char *) &(y))[x])
+#define __byte(x,y)            (((unsigned char *) &(y))[x])
 #define cached_master_mask     (__byte(0, cached_irq_mask))
 #define cached_slave_mask      (__byte(1, cached_irq_mask))
 
+/* 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
+
 extern spinlock_t i8259A_lock;
 
 extern void init_8259A(int auto_eoi);
@@ -14,4 +31,28 @@ extern void enable_8259A_irq(unsigned int irq);
 extern void disable_8259A_irq(unsigned int irq);
 extern unsigned int startup_8259A_irq(unsigned int irq);
 
+/* 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);
+}
+
 #endif /* __ASM_I8259_H__ */