From f4092abdf94af6a99aff944d6264bc1284e8bdd4 Mon Sep 17 00:00:00 2001 From: Reinhard Tartler Date: Mon, 10 Oct 2011 17:43:39 +0200 Subject: Imported nx-X11-3.1.0-1.tar.gz Summary: Imported nx-X11-3.1.0-1.tar.gz Keywords: Imported nx-X11-3.1.0-1.tar.gz into Git repository --- .../Xserver/hw/xfree86/os-support/pmax/pmax_ppc.c | 251 +++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 nx-X11/programs/Xserver/hw/xfree86/os-support/pmax/pmax_ppc.c (limited to 'nx-X11/programs/Xserver/hw/xfree86/os-support/pmax/pmax_ppc.c') diff --git a/nx-X11/programs/Xserver/hw/xfree86/os-support/pmax/pmax_ppc.c b/nx-X11/programs/Xserver/hw/xfree86/os-support/pmax/pmax_ppc.c new file mode 100644 index 000000000..aa286d4ac --- /dev/null +++ b/nx-X11/programs/Xserver/hw/xfree86/os-support/pmax/pmax_ppc.c @@ -0,0 +1,251 @@ +/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/pmax/pmax_ppc.c,v 1.3 1998/07/25 16:56:56 dawes Exp $ */ +/* + * Copyright 1998 by Concurrent Computer Corporation + * + * 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 Concurrent Computer + * Corporation not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Concurrent Computer Corporation makes no representations + * about the suitability of this software for any purpose. It is + * provided "as is" without express or implied warranty. + * + * CONCURRENT COMPUTER CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CONCURRENT COMPUTER CORPORATION 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. + * + * Copyright 1998 by Metro Link Incorporated + * + * 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 Metro Link + * Incorporated not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Metro Link Incorporated makes no representations + * about the suitability of this software for any purpose. It is + * provided "as is" without express or implied warranty. + * + * METRO LINK INCORPORATED DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL METRO LINK INCORPORATED 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. + */ + +#ifdef HAVE_XORG_CONFIG_H +#include +#endif + +#include +#include + +#include +#include + +#include "compiler.h" + +#include "xf86.h" +#include "xf86Priv.h" +#include "xf86_OSlib.h" + +volatile unsigned char *ioBase = MAP_FAILED; /* Also referenced by compiler.h */ +unsigned long ioSize = 0; + +#undef outb +#undef outw +#undef outl +#undef inb +#undef inw +#undef inl + +void +outb(unsigned int a, unsigned char b) +{ + if (ioBase == MAP_FAILED) { + ErrorF("outb(0x%04X, 0x%02X) fails. Uninitialized ioBase\n", a, b); + return; + } + + *((volatile unsigned char *)(ioBase + a)) = b; eieio(); +} + +void +outw(unsigned int a, unsigned short w) +{ + if (ioBase == MAP_FAILED) { + ErrorF("outw(0x%04X, 0x%04X) fails. Unitialized ioBase\n", a, w); + return; + } + + stw_brx(w,ioBase,a); eieio(); +} + +void +outl(unsigned int a, unsigned int l) +{ + if (ioBase == MAP_FAILED) { + ErrorF("outl(0x%04X, 0x%08X) fails. Unitialized ioBase\n", a, l); + return; + } + + stl_brx(l,ioBase,a); eieio(); +} + +unsigned char +inb(unsigned int a) +{ + unsigned char b; + + if (ioBase == MAP_FAILED) { + FatalError("%s(0x%04X) fails. Unitialized ioBase\n", "inb", a); + /*NOTREACHED*/ + } + + b = *((volatile unsigned char *)(ioBase + a)); + + return(b); +} + +unsigned short +inw(unsigned int a) +{ + unsigned short w; + + if (ioBase == MAP_FAILED) { + FatalError("%s(0x%04X) fails. Unitialized ioBase\n", "inw", a); + /*NOTREACHED*/ + } + + w = ldw_brx(ioBase,a); + return(w); +} + +unsigned int +inl(unsigned int a) +{ + unsigned int l; + + if (ioBase == MAP_FAILED) { + FatalError("%s(0x%04X) fails. Unitialized ioBase\n", "inl", a); + /*NOTREACHED*/ + } + + l = ldl_brx(ioBase, a); + return(l); +} + +#ifdef PPCIO_DEBUG + +void +debug_outb(unsigned int a, unsigned char b, int line, char *file) +{ + if (xf86Verbose > 3) + ErrorF("outb(0x%04X, 0x%02X) at line %d, file \"%s\"\n", a, b, line, file); + + outb(a,b); +} + +void +debug_outw(unsigned int a, unsigned short w, int line, char *file) +{ + if (xf86Verbose > 3) + ErrorF("outw(0x%04X, 0x%04X) at line %d, file \"%s\"\n", a, w, line, file); + + outw(a,w); +} + +void +debug_outl(unsigned int a, unsigned int l, int line, char *file) +{ + if (xf86Verbose > 3) + ErrorF("outl(0x%04X, 0x%08X) at line %d, file \"%s\"\n", a, l, line, file); + + outl(a,l); +} + + +unsigned char +debug_inb(unsigned int a, int line, char *file) +{ + unsigned char b; + + if (xf86Verbose > 4) + ErrorF("Calling %s(0x%04x) at line %d, file \"%s\" ...\n", "inb", a, line, file); + + b = inb(a); + + if (xf86Verbose > 3) + ErrorF("... %s(0x%04X) returns 0x%02X\n", "inb", a, b); + + return(b); +} + +unsigned short +debug_inw(unsigned int a, int line, char *file) +{ + unsigned short w; + + if (xf86Verbose > 4) + ErrorF("Calling %s(0x%04x) at line %d, file \"%s\" ...\n", "inw", a, line, file); + + w = inw(a); + + if (xf86Verbose > 3) + ErrorF("... %s(0x%04X) returns 0x%04X\n", "inw", a, w); + + return(w); +} + +unsigned int +debug_inl(unsigned int a, int line, char *file) +{ + unsigned int l; + + if (xf86Verbose > 4) + ErrorF("Calling %s(0x%04x) at line %d, file \"%s\" ...\n", "inl", a, line, file); + + l = inl(a); + + if (xf86Verbose > 3) + ErrorF("... %s(0x%04X) returns 0x%08X\n", "inl", a, l); + + return(l); +} + +#endif /* PPCIO_DEBUG */ + +/* + * This is neccessary on the PPC 604 (and 604e) because they have + * separate I and D caches and the caches must be manually synchronized + * when applying relocation to the instruction portion of loaded modules. + */ +#define LINESIZE 32 +#define CACHE_LINE(a) (((unsigned long)a) & ~(LINESIZE-1)) + +void +ppc_flush_icache(char *addr) +{ + /* Flush D-cache to memory */ + __inst_dcbf (addr, 0); + __inst_dcbf (addr, LINESIZE); + __inst_sync (); + + /* Invalidate I-cache */ + __inst_icbi (addr, 0); + __inst_icbi (addr, LINESIZE); + __inst_sync (); + __inst_isync (); +} -- cgit v1.2.3