_X_EXPORT int xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf, int Len) { unsigned char *ptr; int psize; int mlen; psize = xf86getpagesize(); Offset += Base & (psize - 1); Base &= ~(psize - 1); mlen = (Offset + Len + psize - 1) & ~(psize - 1); ptr = (unsigned char *)mmap_device_memory((caddr_t)0, mlen, PROT_READ, 0, (off_t)Base); if ((long)ptr == -1) { xf86Msg(X_WARNING, "xf86ReadBIOS: %s mmap[s=%x,a=%lx,o=%lx] failed (%s)\n", DEV_MEM, Len, Base, Offset, strerror(errno)); return(-1); } #ifdef DEBUG ErrorF("xf86ReadBIOS: BIOS at 0x%08x has signature 0x%04x\n", Base, ptr[0] | (ptr[1] << 8)); #endif (void)memcpy(Buf, (void *)(ptr + Offset), Len); (void)munmap_device_memory((caddr_t)ptr, mlen); #ifdef DEBUG xf86MsgVerb(X_INFO, 3, "xf86ReadBIOS(%x, %x, Buf, %x)" "-> %02x %02x %02x %02x...\n", Base, Offset, Len, Buf[0], Buf[1], Buf[2], Buf[3]); #endif return(Len); }
int xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf, int Len) { unsigned char *ptr; int psize; int mlen; checkDevMem(TRUE); if (devMemFd == -1) { return(-1); } psize = xf86getpagesize(); Offset += Base & (psize - 1); Base &= ~(psize - 1); mlen = (Offset + Len + psize - 1) & ~(psize - 1); ptr = (unsigned char *)mmap((caddr_t)0, mlen, PROT_READ, MAP_SHARED, devMemFd, (off_t)Base); if ((long)ptr == -1) { xf86Msg(X_WARNING, "xf86ReadBIOS: %s mmap[s=%x,a=%lx,o=%lx] failed (%s)\n", DEV_MEM, Len, Base, Offset, strerror(errno)); #ifdef __OpenBSD__ if (Base < 0xa0000) { xf86Msg(X_WARNING, SYSCTL_MSG2); } #endif return(-1); } #ifdef DEBUG ErrorF("xf86ReadBIOS: BIOS at 0x%08x has signature 0x%04x\n", Base, ptr[0] | (ptr[1] << 8)); #endif (void)memcpy(Buf, (void *)(ptr + Offset), Len); (void)munmap((caddr_t)ptr, mlen); #ifdef DEBUG xf86MsgVerb(X_INFO, 3, "xf86ReadBIOS(%x, %x, Buf, %x)" "-> %02x %02x %02x %02x...\n", Base, Offset, Len, Buf[0], Buf[1], Buf[2], Buf[3]); #endif return(Len); }
_X_EXPORT int xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf, int Len) { int fd; unsigned char *ptr; int psize; int mlen; if ((fd = open(DEV_MEM, O_RDONLY)) < 0) { xf86Msg(X_WARNING, "xf86ReadBIOS: Failed to open %s (%s)\n", DEV_MEM, strerror(errno)); return(-1); } psize = xf86getpagesize(); Offset += Base & (psize - 1); Base &= ~(psize - 1); mlen = (Offset + Len + psize - 1) & ~(psize - 1); ptr = (unsigned char *)mmap((caddr_t)0, mlen, PROT_READ, MAP_SHARED, fd, (off_t)Base); if (ptr == MAP_FAILED) { xf86Msg(X_WARNING, "xf86ReadBIOS: %s mmap failed (%s)\n", DEV_MEM, strerror(errno)); close(fd); return(-1); } #ifdef DEBUG ErrorF("xf86ReadBIOS: BIOS at 0x%08x has signature 0x%04x\n", Base, ptr[0] | (ptr[1] << 8)); #endif (void)memcpy(Buf, (void *)(ptr + Offset), Len); (void)munmap((caddr_t)ptr, mlen); (void)close(fd); return(Len); }
int xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf, int Len) { caddr_t base; int fd; int psize; int mlen; if ((fd = open(DEV_MEM, O_RDONLY)) < 0) { xf86Msg(X_WARNING, "xf86ReadBIOS: Failed to open %s (%s)\n", DEV_MEM, strerror(errno)); return(-1); } psize = xf86getpagesize(); Offset += Base & (psize - 1); Base &= ~(psize - 1); mlen = (Offset + Len + psize - 1) & ~(psize - 1); base = mmap((caddr_t)0, JENSEN_SHIFT(mlen), PROT_READ, MAP_SHARED, fd, (off_t)(JENSEN_SHIFT(Base) + BUS_BASE)); if (base == MAP_FAILED) { xf86Msg(X_WARNING, "xf86ReadBIOS: Failed to mmap %s (%s)\n", DEV_MEM, strerror(errno)); return(-1); } xf86SlowBCopyFromBus((unsigned char *)(base+JENSEN_SHIFT(Offset)), Buf, Len); munmap((caddr_t)JENSEN_SHIFT(base), JENSEN_SHIFT(mlen)); close(fd); return(Len); }