diff options
author | peter <peter@FreeBSD.org> | 1999-01-01 08:32:05 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1999-01-01 08:32:05 +0000 |
commit | 56b4a2fa96ef823c0127976937ca06734834be4d (patch) | |
tree | 2e2ebb5a12755a56d0f7467c343a4635c7d69d5c /usr.sbin/pcvt/set2061/compiler.h | |
parent | c93aa8139afbfc351323f822353fefee494a1278 (diff) | |
download | FreeBSD-src-56b4a2fa96ef823c0127976937ca06734834be4d.zip FreeBSD-src-56b4a2fa96ef823c0127976937ca06734834be4d.tar.gz |
Part 4 of pcvt/voxware revival: pcvt userland
Reviewed by: core
Diffstat (limited to 'usr.sbin/pcvt/set2061/compiler.h')
-rw-r--r-- | usr.sbin/pcvt/set2061/compiler.h | 341 |
1 files changed, 341 insertions, 0 deletions
diff --git a/usr.sbin/pcvt/set2061/compiler.h b/usr.sbin/pcvt/set2061/compiler.h new file mode 100644 index 0000000..4ff14bd --- /dev/null +++ b/usr.sbin/pcvt/set2061/compiler.h @@ -0,0 +1,341 @@ +/* $XFree86: mit/server/ddx/x386/common/compiler.h,v 2.3 1993/10/03 14:55:28 dawes Exp $ */ +/* + * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Thomas Roell not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Thomas Roell makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THOMAS ROELL BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + * + * $Header: /home/ncvs/src/usr.sbin/pcvt/set2061/Attic/compiler.h,v 1.2 1995/05/30 03:49:45 rgrimes Exp $ + */ + + +#ifndef _COMPILER_H +#define _COMPILER_H + +#ifndef __STDC__ +# ifdef signed +# undef signed +# endif +# ifdef volatile +# undef volatile +# endif +# ifdef const +# undef const +# endif +# define signed /**/ +# ifdef __GNUC__ +# define volatile __volatile__ +# define const __const__ +# else +# define const /**/ +# endif /* __GNUC__ */ +#endif /* !__STDC__ */ + +#ifdef NO_INLINE + +extern void outb(); +extern void outw(); +extern unsigned int inb(); +extern unsigned int inw(); +#if NeedFunctionPrototypes +extern unsigned char rdinx(unsigned short, unsigned char); +extern void wrinx(unsigned short, unsigned char, unsigned char); +extern void modinx(unsigned short, unsigned char, unsigned char, unsigned char); +extern int testrg(unsigned short, unsigned char); +extern int textinx2(unsigned short, unsigned char, unsigned char); +extern int textinx(unsigned short, unsigned char); +#else /* NeedFunctionProtoypes */ +extern unsigned char rdinx(); +extern void wrinx(); +extern void modinx(); +extern int testrg(); +extern int textinx2(); +extern int textinx(); +#endif /* NeedFunctionProtoypes */ + +#else /* NO_INLINE */ + +#ifdef __GNUC__ + +#ifndef FAKEIT +#ifdef GCCUSESGAS + +/* + * If gcc uses gas rather than the native assembler, the syntax of these + * inlines has to be different. DHD + */ + +static __inline__ void +outb(port, val) +short port; +char val; +{ + __asm__ __volatile__("outb %0,%1" : :"a" (val), "d" (port)); +} + + +static __inline__ void +outw(port, val) +short port; +short val; +{ + __asm__ __volatile__("outw %0,%1" : :"a" (val), "d" (port)); +} + +static __inline__ unsigned int +inb(port) +short port; +{ + unsigned char ret; + __asm__ __volatile__("inb %1,%0" : + "=a" (ret) : + "d" (port)); + return ret; +} + +static __inline__ unsigned int +inw(port) +short port; +{ + unsigned short ret; + __asm__ __volatile__("inw %1,%0" : + "=a" (ret) : + "d" (port)); + return ret; +} + +#else /* GCCUSESGAS */ + +static __inline__ void +outb(port, val) + short port; + char val; +{ + __asm__ __volatile__("out%B0 (%1)" : :"a" (val), "d" (port)); +} + +static __inline__ void +outw(port, val) + short port; + short val; +{ + __asm__ __volatile__("out%W0 (%1)" : :"a" (val), "d" (port)); +} + +static __inline__ unsigned int +inb(port) + short port; +{ + unsigned char ret; + __asm__ __volatile__("in%B0 (%1)" : + "=a" (ret) : + "d" (port)); + return ret; +} + +static __inline__ unsigned int +inw(port) + short port; +{ + unsigned short ret; + __asm__ __volatile__("in%W0 (%1)" : + "=a" (ret) : + "d" (port)); + return ret; +} + +#endif /* GCCUSESGAS */ + +#else /* FAKEIT */ + +static __inline__ void +outb(port, val) + short port; + char val; +{ +} + +static __inline__ void +outw(port, val) + short port; + short val; +{ +} + +static __inline__ unsigned int +inb(port) + short port; +{ + return 0; +} + +static __inline__ unsigned int +inw(port) + short port; +{ + return 0; +} + +#endif /* FAKEIT */ + +#else /* __GNUC__ */ +#if !defined(AMOEBA) && !defined(_MINIX) +# if defined(__STDC__) && (__STDC__ == 1) +# define asm __asm +# endif +# ifdef SVR4 +# include <sys/types.h> +# ifndef __USLC__ +# define __USLC__ +# endif +# endif +# include <sys/inline.h> +#endif +#endif + +/* + *----------------------------------------------------------------------- + * Port manipulation convenience functions + *----------------------------------------------------------------------- + */ + +#ifndef __GNUC__ +#define __inline__ /**/ +#endif + +/* + * rdinx - read the indexed byte port 'port', index 'ind', and return its value + */ +static __inline__ unsigned char +#ifdef __STDC__ +rdinx(unsigned short port, unsigned char ind) +#else +rdinx(port, ind) +unsigned short port; +unsigned char ind; +#endif +{ + if (port == 0x3C0) /* reset attribute flip-flop */ + (void) inb(0x3DA); + outb(port, ind); + return(inb(port+1)); +} + +/* + * wrinx - write 'val' to port 'port', index 'ind' + */ +static __inline__ void +#ifdef __STDC__ +wrinx(unsigned short port, unsigned char ind, unsigned char val) +#else +wrinx(port, ind, val) +unsigned short port; +unsigned char ind, val; +#endif +{ + outb(port, ind); + outb(port+1, val); +} + +/* + * modinx - in register 'port', index 'ind', set the bits in 'mask' as in 'new'; + * the other bits are unchanged. + */ +static __inline__ void +#ifdef __STDC__ +modinx(unsigned short port, unsigned char ind, + unsigned char mask, unsigned char new) +#else +modinx(port, ind, mask, new) +unsigned short port; +unsigned char ind, mask, new; +#endif +{ + unsigned char tmp; + + tmp = (rdinx(port, ind) & ~mask) | (new & mask); + wrinx(port, ind, tmp); +} + +/* + * tstrg - returns true iff the bits in 'mask' of register 'port' are + * readable & writable. + */ + +static __inline__ int +#ifdef __STDC__ +testrg(unsigned short port, unsigned char mask) +#else +tstrg(port, mask) +unsigned short port; +unsigned char mask; +#endif +{ + unsigned char old, new1, new2; + + old = inb(port); + outb(port, old & ~mask); + new1 = inb(port) & mask; + outb(port, old | mask); + new2 = inb(port) & mask; + outb(port, old); + return((new1 == 0) && (new2 == mask)); +} + +/* + * testinx2 - returns true iff the bits in 'mask' of register 'port', index + * 'ind' are readable & writable. + */ +static __inline__ int +#ifdef __STDC__ +testinx2(unsigned short port, unsigned char ind, unsigned char mask) +#else +testinx2(port, ind, mask) +unsigned short port; +unsigned char ind, mask; +#endif +{ + unsigned char old, new1, new2; + + old = rdinx(port, ind); + wrinx(port, ind, old & ~mask); + new1 = rdinx(port, ind) & mask; + wrinx(port, ind, old | mask); + new2 = rdinx(port, ind) & mask; + wrinx(port, ind, old); + return((new1 == 0) && (new2 == mask)); +} + +/* + * testinx - returns true iff all bits of register 'port', index 'ind' are + * readable & writable. + */ +static __inline__ int +#ifdef __STDC__ +testinx(unsigned short port, unsigned char ind) +#else +testinx(port, ind, mask) +unsigned short port; +unsigned char ind; +#endif +{ + return(testinx2(port, ind, 0xFF)); +} + +#endif /* NO_INLINE */ +#endif /* _COMPILER_H */ |