diff options
Diffstat (limited to 'hw/xfree86/os-support/shared/bios_devmem.c')
-rw-r--r-- | hw/xfree86/os-support/shared/bios_devmem.c | 96 |
1 files changed, 15 insertions, 81 deletions
diff --git a/hw/xfree86/os-support/shared/bios_devmem.c b/hw/xfree86/os-support/shared/bios_devmem.c index f26d7a524..5c24b9751 100644 --- a/hw/xfree86/os-support/shared/bios_devmem.c +++ b/hw/xfree86/os-support/shared/bios_devmem.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/shared/bios_devmem.c,v 3.3 1996/12/23 06:50:58 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/shared/bios_devmem.c,v 3.7 2000/09/19 12:46:22 eich Exp $ */ /* * Copyright 1993 by David Wexelblat <dwex@goblin.org> * @@ -21,12 +21,9 @@ * PERFORMANCE OF THIS SOFTWARE. * */ -/* $Xorg: bios_devmem.c,v 1.3 2000/08/17 19:51:30 cpqbld Exp $ */ +/* $XConsortium: bios_devmem.c /main/5 1996/10/19 18:07:41 kaleb $ */ #include "X.h" -#include "input.h" -#include "scrnintstr.h" - #include "xf86.h" #include "xf86Priv.h" #include "xf86_OSlib.h" @@ -40,100 +37,37 @@ # define DEV_MEM "/dev/mem" #endif -int xf86ReadBIOS(Base, Offset, Buf, Len) -unsigned long Base; -unsigned long Offset; -unsigned char *Buf; -int Len; +int +xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf, + int Len) { -#ifdef __alpha__ - /* - * The Alpha version uses "mmap" instead of "lseek/read", - * because these (currently) don't work for BUS memory. - * We trick "mmap" into mapping BUS memory for us via BUS_BASE, - * which is the KSEG address of the start of the DENSE memory - * area. - */ - - /* - * NOTE: there prolly ought to be more validity checks and all - * re: boundaries and sizes and such... - */ - -/* - * The Jensen lacks dense memory, thus we have to address the bus via - * the sparse addressing scheme. - * - * Martin Ostermann (ost@comnets.rwth-aachen.de) - Apr.-Sep. 1996 - */ + int fd; -#ifdef TEST_JENSEN_CODE /* define to test the Sparse addressing on a non-Jensen */ -#define SPARSE (5) -#define isJensen (1) +#ifdef __ia64__ + if ((fd = open(DEV_MEM, O_RDONLY | O_SYNC)) < 0) #else -#define isJensen (!_bus_base()) -#define SPARSE (7) + if ((fd = open(DEV_MEM, O_RDONLY)) < 0) #endif - -extern unsigned long _bus_base(void); -extern unsigned long _bus_base_sparse(void); -#define BUS_BASE (isJensen ? _bus_base_sparse() : _bus_base()) -#define JENSEN_SHIFT(x) (isJensen ? ((long)x<<SPARSE) : (long)x) - -#define SIZE (64*1024) - - caddr_t base; - int fd; - - if ((fd = open(DEV_MEM, O_RDONLY)) < 0) - { - ErrorF("xf86ReadBios: Failed to open %s (%s)\n", DEV_MEM, - strerror(errno)); - return(-1); - } - - base = mmap((caddr_t)0, JENSEN_SHIFT(SIZE), PROT_READ, - MAP_SHARED, fd, (off_t)(JENSEN_SHIFT(Base) + BUS_BASE)); - - if (base == (caddr_t)-1UL) - { - ErrorF("xf86ReadBios: Failed to mmap %s (%s)\n", DEV_MEM, - strerror(errno)); - return(-1); - } - - SlowBCopyFromBus(base+JENSEN_SHIFT(Offset), Buf, Len); - - munmap((caddr_t)JENSEN_SHIFT(base), JENSEN_SHIFT(SIZE)); - close(fd); - return(Len); - -#else /* __alpha__ */ - - int fd; - - if ((fd = open(DEV_MEM, O_RDONLY)) < 0) { - ErrorF("xf86ReadBios: Failed to open %s (%s)\n", DEV_MEM, - strerror(errno)); + xf86Msg(X_WARNING, "xf86ReadBIOS: Failed to open %s (%s)\n", + DEV_MEM, strerror(errno)); return(-1); } if (lseek(fd, (Base+Offset), SEEK_SET) < 0) { - ErrorF("xf86ReadBios: %s seek failed (%s)\n", DEV_MEM, - strerror(errno)); + xf86Msg(X_WARNING, "xf86ReadBIOS: %s seek failed (%s)\n", + DEV_MEM, strerror(errno)); close(fd); return(-1); } if (read(fd, Buf, Len) != Len) { - ErrorF("xf86ReadBios: %s read failed (%s)\n", DEV_MEM, - strerror(errno)); + xf86Msg(X_WARNING, "xf86ReadBIOS: %s read failed (%s)\n", + DEV_MEM, strerror(errno)); close(fd); return(-1); } close(fd); return(Len); -#endif /* __alpha__ */ } |