static GCOps * s3MatchCommon (DrawablePtr pDraw, GCPtr pGC, FbGCPrivPtr fbPriv) { KdScreenPriv (pDraw->pScreen); if (!REGION_NOTEMPTY(pDraw->pScreen,fbGetCompositeClip(pGC))) { DRAW_DEBUG ((DEBUG_CLIP, "Empty composite clip, clipping all ops")); return &kdNoopOps; } if (pDraw->type != DRAWABLE_WINDOW) return (GCOps *) &kdAsyncPixmapGCOps; if (pGC->lineWidth != 0) return 0; if (pGC->lineStyle != LineSolid) return 0; if (pGC->fillStyle != FillSolid) return 0; if (fbPriv->and != 0) return 0; if (pGC->font) { if (TERMINALFONT(pGC->font)) return (GCOps *) &s3TEOps; else return (GCOps *) &s3NonTEOps; } return 0; }
void * KdMapDevice (CARD32 addr, CARD32 size) { #ifdef WINDOWS void *a; void *d; d = VirtualAlloc (NULL, size, MEM_RESERVE, PAGE_NOACCESS); if (!d) return NULL; DRAW_DEBUG ((DEBUG_S3INIT, "Virtual address of 0x%x is 0x%x", addr, d)); a = VirtualCopyAddr (addr); DRAW_DEBUG ((DEBUG_S3INIT, "Translated address is 0x%x", a)); if (!VirtualCopy (d, a, size, PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL)) { DRAW_DEBUG ((DEBUG_FAILURE, "VirtualCopy failed %d", GetLastError ())); return NULL; } DRAW_DEBUG ((DEBUG_S3INIT, "Device mapped successfully")); return d; #endif #ifdef linux void *a; int fd; #ifdef __arm__ fd = open ("/dev/mem", O_RDWR|O_SYNC); #else fd = open ("/dev/mem", O_RDWR); #endif if (fd < 0) FatalError ("KdMapDevice: failed to open /dev/mem (%s)\n", strerror (errno)); a = mmap ((caddr_t) 0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, addr); close (fd); if ((long) a == -1) FatalError ("KdMapDevice: failed to map frame buffer (%s)\n", strerror (errno)); return a; #endif #ifdef VXWORKS return (void *) addr; #endif }