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