xref: /csrg-svn/sys/i386/isa/isa.h (revision 41051)
1*41051Swilliam /*-
2*41051Swilliam  * Copyright (c) 1990 The Regents of the University of California.
3*41051Swilliam  * All rights reserved.
4*41051Swilliam  *
5*41051Swilliam  * This code is derived from software contributed to Berkeley by
6*41051Swilliam  * William Jolitz.
7*41051Swilliam  *
8*41051Swilliam  * %sccs.include.noredist.c%
9*41051Swilliam  *
10*41051Swilliam  *	@(#)isa.h	5.1 (Berkeley) 04/24/90
11*41051Swilliam  */
12*41051Swilliam 
13*41051Swilliam /*
14*41051Swilliam  * AT bus specific definitions.
15*41051Swilliam  */
16*41051Swilliam 
17*41051Swilliam #define Rd(s) ({u_char rtn; u_short ioa; \
18*41051Swilliam 	ioa = (s); \
19*41051Swilliam 	asm volatile ("movw %1,%%dx; nop ; in %%dx,%%al ; nop ; movb %%al,%0" \
20*41051Swilliam 		: "=g" (rtn) \
21*41051Swilliam 		: "g" (ioa) \
22*41051Swilliam 		: "ax", "dx"); \
23*41051Swilliam 	rtn; \
24*41051Swilliam })
25*41051Swilliam 
26*41051Swilliam #define Wr(s,n) ({u_char val; u_short ioa; \
27*41051Swilliam 	ioa = (s); \
28*41051Swilliam 	val = (n); \
29*41051Swilliam 	asm volatile ("movb %1,%%al; movw %0,%%dx; nop; out %%al,%%dx ; nop" \
30*41051Swilliam 		: /* nothing returned */ \
31*41051Swilliam 		: "g" (ioa), "g" (val) \
32*41051Swilliam 		: "ax", "dx"); \
33*41051Swilliam })
34*41051Swilliam 
35*41051Swilliam 
36*41051Swilliam #define rdw(s) ({u_short rtn; u_short ioa; \
37*41051Swilliam 	ioa = (s); \
38*41051Swilliam 	asm volatile ("movw %1,%%dx; nop ; in %%dx,%%ax ; nop ; movw %%ax,%0" \
39*41051Swilliam 		: "=g" (rtn) \
40*41051Swilliam 		: "g" (ioa) \
41*41051Swilliam 		: "ax", "dx"); \
42*41051Swilliam 	rtn; \
43*41051Swilliam })
44*41051Swilliam 
45*41051Swilliam #define wrw(s,n) ({u_short val; u_short ioa; \
46*41051Swilliam 	ioa = (s); \
47*41051Swilliam 	val = (n); \
48*41051Swilliam 	asm volatile ("movw %1,%%ax; movw %0,%%dx; nop;  out %%ax,%%dx; nop" \
49*41051Swilliam 		: /* nothing returned */ \
50*41051Swilliam 		: "g" (ioa), "g" (val) \
51*41051Swilliam 		: "ax", "dx"); \
52*41051Swilliam })
53*41051Swilliam 
54*41051Swilliam #define Outsw(s,a, n) ({short *addr; u_short ioa; int cnt,rtn; \
55*41051Swilliam 	ioa = (s); \
56*41051Swilliam 	addr = (a); \
57*41051Swilliam 	cnt = (n); \
58*41051Swilliam 	asm volatile ("movw %1,%%dx; movl %2,%%esi; movl %3,%%ecx; cld; nop; .byte 0x66,0xf2,0x6f; nop ; movl %%esi,%0" \
59*41051Swilliam 		: "=g" (rtn) \
60*41051Swilliam 		: "g" (ioa), "g" (addr), "g" (cnt) \
61*41051Swilliam 		: "si", "dx", "cx"); \
62*41051Swilliam 	rtn; \
63*41051Swilliam })
64*41051Swilliam #define Insw(s,a, n) ({short  *addr; u_short ioa; int cnt,rtn; \
65*41051Swilliam 	ioa = (s); \
66*41051Swilliam 	addr = (a); \
67*41051Swilliam 	cnt = (n); \
68*41051Swilliam 	asm volatile ("movw %1,%%dx; movl %2,%%edi; movl %3,%%ecx; cld; nop; .byte 0x66,0xf2,0x6d; nop ; movl %%edi,%0" \
69*41051Swilliam 		: "=g" (rtn) \
70*41051Swilliam 		: "g" (ioa), "g" (addr), "g" (cnt)  \
71*41051Swilliam 		: "di", "dx", "cx"); \
72*41051Swilliam 	rtn; \
73*41051Swilliam })
74*41051Swilliam 
75*41051Swilliam unsigned char inb() ;
76*41051Swilliam extern outb();
77*41051Swilliam 
78*41051Swilliam #define IO_KBD1	0x60		/* keyboard */
79*41051Swilliam 
80*41051Swilliam #define IO_WD0	0x1f0			/* primary base i/o address */
81*41051Swilliam #define IO_WD1	0x170			/* secondary base i/o address */
82