void xf86OSInitVidMem(VidMemInfoPtr pVidMem) { pVidMem->linearSupported = TRUE; #ifdef __alpha__ if (axpSystem == -1) { axpSystem = lnxGetAXP(); if ((needSparse = (_bus_base_sparse() > 0))) { hae_thresh = xf86AXPParams[axpSystem].hae_thresh; hae_mask = xf86AXPParams[axpSystem].hae_mask; } bus_base = _bus_base(); } if (needSparse) { xf86Msg(X_INFO,"Machine needs sparse mapping\n"); pVidMem->mapMem = mapVidMemSparse; pVidMem->unmapMem = unmapVidMemSparse; } else { xf86Msg(X_INFO,"Machine type has 8/16 bit access\n"); pVidMem->mapMem = mapVidMem; pVidMem->unmapMem = unmapVidMem; } #else pVidMem->mapMem = mapVidMem; pVidMem->unmapMem = unmapVidMem; #endif /* __alpha__ */ #ifdef HAS_MTRR_SUPPORT pVidMem->setWC = setWC; pVidMem->undoWC = undoWC; #endif pVidMem->initialised = TRUE; }
void xf86OSInitVidMem(VidMemInfoPtr pVidMem) { pVidMem->linearSupported = TRUE; #ifdef __alpha__ if (axpSystem == -1) { axpSystem = lnxGetAXP(); if ((needSparse = (_bus_base_sparse() > 0))) { hae_thresh = xf86AXPParams[axpSystem].hae_thresh; hae_mask = xf86AXPParams[axpSystem].hae_mask; sparse_size = xf86AXPParams[axpSystem].size; } bus_base = _bus_base(); } if (isJensen) { # ifndef JENSEN_SUPPORT FatalError("Jensen is not supported any more\n" "If you are intereseted in fixing Jensen support\n" "please contact [email protected]\n"); # else xf86Msg(X_INFO,"Machine type is Jensen\n"); pVidMem->mapMem = mapVidMemJensen; pVidMem->unmapMem = unmapVidMemJensen; # endif /* JENSEN_SUPPORT */ } else if (needSparse) { xf86Msg(X_INFO,"Machine needs sparse mapping\n"); pVidMem->mapMem = mapVidMemSparse; pVidMem->unmapMem = unmapVidMemSparse; } else { xf86Msg(X_INFO,"Machine type has 8/16 bit access\n"); pVidMem->mapMem = mapVidMem; pVidMem->unmapMem = unmapVidMem; } #else pVidMem->mapMem = mapVidMem; pVidMem->unmapMem = unmapVidMem; #endif /* __alpha__ */ #ifdef HAS_MTRR_SUPPORT pVidMem->setWC = setWC; pVidMem->undoWC = undoWC; #endif pVidMem->initialised = TRUE; }
static pointer mapVidMemJensen(int ScreenNum, unsigned long Base, unsigned long Size, int flags) { pointer base; int fd, prot; xf86WriteMmio8 = writeSparseJensen8; xf86WriteMmio16 = writeSparseJensen16; xf86WriteMmio32 = writeSparseJensen32; xf86WriteMmioNB8 = writeSparseJensenNB8; xf86WriteMmioNB16 = writeSparseJensenNB16; xf86WriteMmioNB32 = writeSparseJensenNB32; xf86ReadMmio8 = readSparseJensen8; xf86ReadMmio16 = readSparseJensen16; xf86ReadMmio32 = readSparseJensen32; fd = open(DEV_MEM, (flags & VIDMEM_READONLY) ? O_RDONLY : O_RDWR); if (fd < 0) { FatalError("xf86MapVidMem: failed to open " DEV_MEM " (%s)\n", strerror(errno)); } if (flags & VIDMEM_READONLY) prot = PROT_READ; else prot = PROT_READ | PROT_WRITE; /* This requires linux-0.99.pl10 or above */ base = mmap((caddr_t)0, JENSEN_SHIFT(Size), prot, MAP_SHARED, fd, (off_t)(JENSEN_SHIFT((off_t)Base) + _bus_base_sparse())); close(fd); if (base == MAP_FAILED) { FatalError("xf86MapVidMem: Could not mmap framebuffer" " (0x%08x,0x%x) (%s)\n", Base, Size, strerror(errno)); } return base; }
static pointer mapVidMemSparse(int ScreenNum, unsigned long Base, unsigned long Size, int flags) { int fd, prot; unsigned long ret, rets = 0; static Bool was_here = FALSE; if (!was_here) { was_here = TRUE; xf86WriteMmio8 = writeSparse8; xf86WriteMmio16 = writeSparse16; xf86WriteMmio32 = writeSparse32; xf86WriteMmioNB8 = writeSparseNB8; xf86WriteMmioNB16 = writeSparseNB16; xf86WriteMmioNB32 = writeSparseNB32; xf86ReadMmio8 = readSparse8; xf86ReadMmio16 = readSparse16; xf86ReadMmio32 = readSparse32; } fd = open(DEV_MEM, (flags & VIDMEM_READONLY) ? O_RDONLY : O_RDWR); if (fd < 0) { FatalError("xf86MapVidMem: failed to open " DEV_MEM " (%s)\n", strerror(errno)); } #if 0 xf86Msg(X_INFO,"mapVidMemSparse: try Base 0x%lx size 0x%lx flags 0x%x\n", Base, Size, flags); #endif if (flags & VIDMEM_READONLY) prot = PROT_READ; else prot = PROT_READ | PROT_WRITE; /* This requirers linux-0.99.pl10 or above */ /* * Always do DENSE mmap, since read32/write32 currently require it. */ ret = (unsigned long)mmap((caddr_t)(DENSE_BASE + Base), Size, prot, MAP_SHARED, fd, (off_t) (bus_base + Base)); /* * Do SPARSE mmap only when MMIO and not MMIO_32BIT, or FRAMEBUFFER * and SPARSE (which should require the use of read/write macros). * * By not SPARSE mmapping an 8MB framebuffer, we can save approx. 256K * bytes worth of pagetable (32 pages). */ if (((flags & VIDMEM_MMIO) && !(flags & VIDMEM_MMIO_32BIT)) || ((flags & VIDMEM_FRAMEBUFFER) && (flags & VIDMEM_SPARSE))) { rets = (unsigned long)mmap((caddr_t)(SPARSE_BASE + (Base << 5)), Size << 5, prot, MAP_SHARED, fd, (off_t) _bus_base_sparse() + (Base << 5)); } close(fd); if (ret == (unsigned long)MAP_FAILED) { FatalError("xf86MapVidMemSparse: Could not (dense) mmap fb (%s)\n", strerror(errno)); } if (((flags & VIDMEM_MMIO) && !(flags & VIDMEM_MMIO_32BIT)) || ((flags & VIDMEM_FRAMEBUFFER) && (flags & VIDMEM_SPARSE))) { if (rets == (unsigned long)MAP_FAILED || rets != (SPARSE_BASE + (Base << 5))) { FatalError("mapVidMemSparse: Could not (sparse) mmap fb (%s)\n", strerror(errno)); } } #if 1 if (rets) xf86Msg(X_INFO,"mapVidMemSparse: mapped Base 0x%lx size 0x%lx" " to DENSE at 0x%lx and SPARSE at 0x%lx\n", Base, Size, ret, rets); else xf86Msg(X_INFO,"mapVidMemSparse: mapped Base 0x%lx size 0x%lx" " to DENSE only at 0x%lx\n", Base, Size, ret); #endif return (pointer) ret; }
resPtr xf86PciBusAccWindowsFromOS(void) { resPtr ret = NULL; resRange range; /* * On the Alpha the first 16MB of every 128 Mb segment in * sparse address space are an image of the ISA bus range */ if (_bus_base_sparse()) { RANGE(range, 0x00000000, 0x07ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x09000000, 0x0fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x11000000, 0x17ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x19000000, 0x1fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x21000000, 0x27ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x29000000, 0x2fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x31000000, 0x37ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x39000000, 0x3fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x41000000, 0x47ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x49000000, 0x4fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x51000000, 0x57ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x59000000, 0x5fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x61000000, 0x67ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x69000000, 0x6fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x71000000, 0x77ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x79000000, 0x7fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x81000000, 0x87ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x89000000, 0x8fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x91000000, 0x97ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x99000000, 0x9fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xa1000000, 0xa7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xa9000000, 0xafffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xb1000000, 0xb7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xb9000000, 0xbfffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xc1000000, 0xc7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xc9000000, 0xcfffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xd1000000, 0xd7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xd9000000, 0xdfffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xe1000000, 0xe7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xe9000000, 0xefffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xf1000000, 0xf7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xf9000000, 0xffffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); } else { RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); } RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock); ret = xf86AddResToList(ret, &range, -1); return ret; }