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