diff options
author | Graeme Gregory <dp@xora.org.uk> | 2008-12-31 14:48:18 +0000 |
---|---|---|
committer | Graeme Gregory <dp@xora.org.uk> | 2008-12-31 14:48:18 +0000 |
commit | 96811648052bd35b5e0c4ae5b9e59e8e5fa8e7ed (patch) | |
tree | ea9247e32b01ce2937c0388ce7b59224794cdab2 /src | |
parent | bfa7a2503067f28a7811a12548ba3975efeafe45 (diff) |
glamo* : everything compiles commit
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 3 | ||||
-rw-r--r-- | src/glamo-cmdq.c | 41 | ||||
-rw-r--r-- | src/glamo-cmdq.h | 18 | ||||
-rw-r--r-- | src/glamo-draw.c | 79 | ||||
-rw-r--r-- | src/glamo-funcs.c | 4 | ||||
-rw-r--r-- | src/glamo.h | 40 |
6 files changed, 104 insertions, 81 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 5cb0ea2..8b7a83a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -32,6 +32,5 @@ glamo_drv_la_SOURCES = \ glamo.c \ glamo-cmdq.c \ glamo-funcs.c \ - glamo-draw.c \ - glamo-stub.c + glamo-draw.c diff --git a/src/glamo-cmdq.c b/src/glamo-cmdq.c index ffb5d09..782a856 100644 --- a/src/glamo-cmdq.c +++ b/src/glamo-cmdq.c @@ -31,10 +31,10 @@ #include "glamo-cmdq.h" #include "glamo-draw.h" -static void GLAMOCMDQResetCP(ScreenPtr pScreen); +static void GLAMOCMDQResetCP(GlamoPtr pGlamo); #ifndef NDEBUG static void -GLAMODebugFifo(GlamoPtr *pGlamo) +GLAMODebugFifo(GlamoPtr pGlamo) { GLAMOCardInfo *glamoc = pGlamo->glamoc; char *mmio = glamoc->reg_base; @@ -58,7 +58,7 @@ GLAMOEngineReset(GlamoPtr pGlamo, enum GLAMOEngine engine) { CARD32 reg; CARD16 mask; - char *mmio = pGLamo->reg_base; + char *mmio = pGlamo->reg_base; if (!mmio) return; @@ -205,7 +205,7 @@ GLAMOEngineBusy(GlamoPtr pGlamo, enum GLAMOEngine engine) return FALSE; if (pGlamo->cmd_queue_cache != NULL) - GLAMOFlushCMDQCache(glamos, 0); + GLAMOFlushCMDQCache(pGlamo, 0); switch (engine) { @@ -278,9 +278,10 @@ GLAMOEngineWaitReal(GlamoPtr pGlamo, GLAMO_LOG_ERROR("Timeout idling accelerator " "(0x%x), resetting...\n", status); - GLAMODumpRegs(glamos, 0x1600, 0x1612); - GLAMOEngineReset(glamos->screen->pScreen, GLAMO_ENGINE_CMDQ); - GLAMODrawSetup(glamos->screen->pScreen); + GLAMODumpRegs(pGlamo, 0x1600, 0x1612); + GLAMOEngineReset(pGlamo, GLAMO_ENGINE_CMDQ); + GLAMOEngineEnable(pGlamo, GLAMO_ENGINE_2D); + GLAMOEngineReset(pGlamo, GLAMO_ENGINE_2D); } } @@ -292,7 +293,7 @@ GLAMOEngineWait(GlamoPtr pGlamo, } MemBuf * -GLAMOCreateCMDQCache(GlamoPtr *pGlamo) +GLAMOCreateCMDQCache(GlamoPtr pGlamo) { MemBuf *buf; @@ -313,7 +314,7 @@ GLAMOCreateCMDQCache(GlamoPtr *pGlamo) } static void -GLAMODispatchCMDQCache(GlamoPtr *pGlamo) +GLAMODispatchCMDQCache(GlamoPtr pGlamo) { MemBuf *buf = pGlamo->cmd_queue_cache; char *mmio = pGlamo->reg_base; @@ -326,18 +327,18 @@ GLAMODispatchCMDQCache(GlamoPtr *pGlamo) ring_count = pGlamo->ring_len / 2; if (count + pGlamo->ring_write >= ring_count) { GLAMOCMDQResetCP(pGlamo); - glamos->ring_write = 0; + pGlamo->ring_write = 0; } WHILE_NOT_TIMEOUT(.5) { if (count <= 0) break; - pGlamo->ring_addr[glamos->ring_write] = *addr; + pGlamo->ring_addr[pGlamo->ring_write] = *addr; pGlamo->ring_write++; addr++; if (pGlamo->ring_write >= ring_count) { GLAMO_LOG_ERROR("wrapped over ring_write\n"); - GLAMODumpRegs(glamos, 0x1600, 0x1612); + GLAMODumpRegs(pGlamo, 0x1600, 0x1612); pGlamo->ring_write = 0; } count--; @@ -351,10 +352,10 @@ GLAMODispatchCMDQCache(GlamoPtr *pGlamo) } MMIO_OUT16(mmio, GLAMO_REG_CMDQ_WRITE_ADDRH, - (pGLamo->ring_write >> 15) & 0x7); + (pGlamo->ring_write >> 15) & 0x7); MMIO_OUT16(mmio, GLAMO_REG_CMDQ_WRITE_ADDRL, (pGlamo->ring_write << 1) & 0xffff); - GLAMOEngineWaitReal(pGlamo->screen->pScreen, + GLAMOEngineWaitReal(pGlamo, GLAMO_ENGINE_CMDQ, FALSE); } @@ -380,7 +381,7 @@ GLAMOCMDQResetCP(GlamoPtr pGlamo) CARD32 queue_offset = 0; /* make the decoder happy? */ - memset((char*)pGlamo->ring_addr, 0, glamos->ring_len+2); + memset((char*)pGlamo->ring_addr, 0, pGlamo->ring_len+2); GLAMOEngineReset(pGlamo, GLAMO_ENGINE_CMDQ); @@ -410,23 +411,23 @@ GLAMOCMDQInit(GlamoPtr pGlamo, char *mmio = pGlamo->reg_base; int cq_len = CQ_LEN; - if (!force && glamos->exa_cmd_queue) + if (!force && pGlamo->exa_cmd_queue) return TRUE; pGlamo->ring_len = (cq_len + 1) * 1024; pGlamo->exa_cmd_queue = - exaOffscreenAlloc(pGlamo, glamos->ring_len + 4, - pGlamo->exa.pixmapOffsetAlign, + exaOffscreenAlloc(pGlamo->pScreen, pGlamo->ring_len + 4, + pGlamo->exa->pixmapOffsetAlign, TRUE, NULL, NULL); if (!pGlamo->exa_cmd_queue) return FALSE; pGlamo->ring_addr = - (CARD16 *) (pScreenPriv->screen->memory_base + + (CARD16 *) (pGlamo->fbstart + pGlamo->exa_cmd_queue->offset); GLAMOEngineEnable(pGlamo, GLAMO_ENGINE_CMDQ); - GLAMOCMDQResetCP(pGlamo->screen->pScreen); + GLAMOCMDQResetCP(pGlamo); return TRUE; } diff --git a/src/glamo-cmdq.h b/src/glamo-cmdq.h index a47e03e..b04df10 100644 --- a/src/glamo-cmdq.h +++ b/src/glamo-cmdq.h @@ -121,16 +121,16 @@ tv_le(struct timeval *tv1, struct timeval *tv2) #define TIMEDOUT() (!tv_le(&_curtime, &_target)) MemBuf * -GLAMOCreateCMDQCache(GlamoPtr *pGlamo); +GLAMOCreateCMDQCache(GlamoPtr pGlamo); void -GLAMOFlushCMDQCache(GlamoPtr *pGlamo, Bool discard); +GLAMOFlushCMDQCache(GlamoPtr pGlamo, Bool discard); void -GLAMOCMDQCacheSetup(ScreenPtr pScreen); +GLAMOCMDQCacheSetup(GlamoPtr pGlamo); void -GLAMOCMQCacheTeardown(ScreenPtr pScreen); +GLAMOCMQCacheTeardown(GlamoPtr pGlamo); enum GLAMOEngine { GLAMO_ENGINE_CMDQ, @@ -142,19 +142,19 @@ enum GLAMOEngine { }; void -GLAMOEngineEnable(ScreenPtr pScreen, enum GLAMOEngine engine); +GLAMOEngineEnable(GlamoPtr pGlamo, enum GLAMOEngine engine); void -GLAMOEngineDisable(ScreenPtr pScreen, enum GLAMOEngine engine); +GLAMOEngineDisable(GlamoPtr pGlamo, enum GLAMOEngine engine); void -GLAMOEngineReset(ScreenPtr pScreen, enum GLAMOEngine engine); +GLAMOEngineReset(GlamoPtr pGlamo, enum GLAMOEngine engine); int -GLAMOEngineBusy(ScreenPtr pScreen, enum GLAMOEngine engine); +GLAMOEngineBusy(GlamoPtr pGlamo, enum GLAMOEngine engine); void -GLAMOEngineWait(ScreenPtr pScreen, enum GLAMOEngine engine); +GLAMOEngineWait(GlamoPtr pGlamo, enum GLAMOEngine engine); #endif /* _GLAMO_DMA_H_ */ diff --git a/src/glamo-draw.c b/src/glamo-draw.c index e3f41df..c78663e 100644 --- a/src/glamo-draw.c +++ b/src/glamo-draw.c @@ -24,7 +24,7 @@ */ #ifdef HAVE_CONFIG_H -#include <kdrive-config.h> +#include <config.h> #endif #include "glamo-log.h" #include "glamo.h" @@ -157,10 +157,23 @@ GLAMOExaDownloadFromScreen(PixmapPtr pSrc, void GLAMOExaWaitMarker (ScreenPtr pScreen, int marker); +static void +GLAMOBlockHandler(pointer blockData, OSTimePtr timeout, pointer readmask) +{ + ScreenPtr pScreen = (ScreenPtr) blockData; + + exaWaitSync(pScreen); +} + +static void +GLAMOWakeupHandler(pointer blockData, int result, pointer readmask) +{ +} + Bool GLAMODrawExaInit(ScreenPtr pScreen, ScrnInfoPtr pScrn) { - GlamoPtr pGlamo = GlamoPTR(pScrn) + GlamoPtr pGlamo = GlamoPTR(pScrn); int offscreen_memory_size = 0; Bool success = FALSE; @@ -170,10 +183,11 @@ GLAMODrawExaInit(ScreenPtr pScreen, ScrnInfoPtr pScrn) exa = pGlamo->exa = exaDriverAlloc(); if(!exa) return FALSE; - - exa->memoryBase = pGlamo->memory_base; - exa->memorySize = pGlamo->memory_size; - exa->offScreenBase = pGlamo->off_screen_base; + + exa->memoryBase = pGlamo->fbstart; + exa->memorySize = 1024 * 1024 * 8; + /*exa->offScreenBase = pGlamo->fboff;*/ + exa->offScreenBase = pScrn->virtualX * pScrn->virtualY * 2; exa->exa_major = 2; exa->exa_minor = 0; @@ -210,8 +224,6 @@ GLAMODrawExaInit(ScreenPtr pScreen, ScrnInfoPtr pScrn) GLAMOWakeupHandler, pScreen); - glamoExaScreenPrivateIndex = AllocateScreenPrivateIndex() ; - pScreen->devPrivates[glamoExaScreenPrivateIndex].ptr = glamos; success = exaDriverInit(pScreen, exa); if (success) { ErrorF("Initialized EXA acceleration\n"); @@ -229,9 +241,9 @@ GLAMOExaPrepareSolid(PixmapPtr pPix, Pixel pm, Pixel fg) { - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; - GlamoPtr pGlamo = GLAMOPTR(pScrn); - + ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum]; + GlamoPtr pGlamo = GlamoPTR(pScrn); + CARD32 offset, pitch; FbBits mask; RING_LOCALS; @@ -266,8 +278,8 @@ GLAMOExaPrepareSolid(PixmapPtr pPix, void GLAMOExaSolid(PixmapPtr pPix, int x1, int y1, int x2, int y2) { - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; - GlamoPtr pGlamo = GLAMOPTR(pScrn); + ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum]; + GlamoPtr pGlamo = GlamoPTR(pScrn); GLAMO_LOG("enter\n"); @@ -288,12 +300,12 @@ GLAMOExaSolid(PixmapPtr pPix, int x1, int y1, int x2, int y2) void GLAMOExaDoneSolid(PixmapPtr pPix) { - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; - GlamoPtr pGlamo = GLAMOPTR(pScrn); + ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum]; + GlamoPtr pGlamo = GlamoPTR(pScrn); - exaWaitSync(glamos->screen->pScreen); + exaWaitSync(pGlamo->pScreen); if (pGlamo->cmd_queue_cache) - GLAMOFlushCMDQCache(glamos, 1); + GLAMOFlushCMDQCache(pGlamo, 1); } Bool @@ -304,8 +316,8 @@ GLAMOExaPrepareCopy(PixmapPtr pSrc, int alu, Pixel pm) { - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; - GlamoPtr pGlamo = GLAMOPTR(pScrn); + ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum]; + GlamoPtr pGlamo = GlamoPTR(pScrn); CARD32 src_offset, src_pitch; CARD32 dst_offset, dst_pitch; @@ -335,7 +347,7 @@ GLAMOExaPrepareCopy(PixmapPtr pSrc, pGlamo->src_pitch, pGlamo->dst_offset, pGlamo->dst_pitch, - pScreenPriv->screen->memory_base); + pGlamo->fbstart); pGlamo->settings = GLAMOBltRop[alu] << 8; exaMarkSync(pDst->drawable.pScreen); @@ -352,8 +364,8 @@ GLAMOExaCopy(PixmapPtr pDst, int width, int height) { - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; - GlamoPtr pGlamo = GLAMOPTR(pScrn); + ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; + GlamoPtr pGlamo = GlamoPTR(pScrn); RING_LOCALS; @@ -390,11 +402,11 @@ GLAMOExaCopy(PixmapPtr pDst, void GLAMOExaDoneCopy(PixmapPtr pDst) { - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; - GlamoPtr pGlamo = GLAMOPTR(pScrn); + ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; + GlamoPtr pGlamo = GlamoPTR(pScrn); GLAMO_LOG("enter\n"); - exaWaitSync(pGlamo->screen->pScreen); + exaWaitSync(pGlamo->pScreen); if (pGlamo->cmd_queue_cache) GLAMOFlushCMDQCache(pGlamo, 1); GLAMO_LOG("leave\n"); @@ -448,9 +460,9 @@ GLAMOExaUploadToScreen(PixmapPtr pDst, char *src, int src_pitch) { - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; - GlamoPtr pGlamo = GLAMOPTR(pScrn); - + ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; + GlamoPtr pGlamo = GlamoPTR(pScrn); + int bpp, i; CARD8 *dst_offset; int dst_pitch; @@ -458,7 +470,7 @@ GLAMOExaUploadToScreen(PixmapPtr pDst, GLAMO_LOG("enter\n"); bpp = pDst->drawable.bitsPerPixel / 8; dst_pitch = pDst->devKind; - dst_offset = pGlamo->exa.memoryBase + exaGetPixmapOffset(pDst) + dst_offset = pGlamo->exa->memoryBase + exaGetPixmapOffset(pDst) + x*bpp + y*dst_pitch; GLAMO_LOG("dst_pitch:%d, src_pitch\n", dst_pitch, src_pitch); @@ -478,8 +490,8 @@ GLAMOExaDownloadFromScreen(PixmapPtr pSrc, char *dst, int dst_pitch) { - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; - GlamoPtr pGlamo = GLAMOPTR(pScrn); + ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum]; + GlamoPtr pGlamo = GlamoPTR(pScrn); int bpp, i; CARD8 *dst_offset, *src; @@ -489,7 +501,7 @@ GLAMOExaDownloadFromScreen(PixmapPtr pSrc, bpp = pSrc->drawable.bitsPerPixel; bpp /= 8; src_pitch = pSrc->devKind; - src = pGlamo->exa.memoryBase + exaGetPixmapOffset(pSrc) + + src = pGlamo->exa->memoryBase + exaGetPixmapOffset(pSrc) + x*bpp + y*src_pitch; dst_offset = dst ; @@ -506,9 +518,6 @@ GLAMOExaDownloadFromScreen(PixmapPtr pSrc, void GLAMOExaWaitMarker (ScreenPtr pScreen, int marker) { - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; - GlamoPtr pGlamo = GLAMOPTR(pScrn); - GLAMO_LOG("enter\n"); GLAMOEngineWait(pScreen, GLAMO_ENGINE_ALL); GLAMO_LOG("leave\n"); diff --git a/src/glamo-funcs.c b/src/glamo-funcs.c index 933a92a..a31a605 100644 --- a/src/glamo-funcs.c +++ b/src/glamo-funcs.c @@ -353,7 +353,7 @@ GLAMOISPYuvRgbPipelineInit(GlamoPtr pGlamo) unsigned short en3; RING_LOCALS; - GLAMO_LOG("enter.glamos:%#x\n", glamos); + GLAMO_LOG("enter.glamos:%#x\n", pGlamo); BEGIN_CMDQ(18); @@ -415,7 +415,7 @@ GLAMOISPColorKeyOverlayInit(GlamoPtr pGlamo) } void -GLAMOISPSetColorKeyOverlay(ScreenPtr pGlamo, +GLAMOISPSetColorKeyOverlay(GlamoPtr pGlamo, CARD32 start_addr/*addr on 23bits*/, CARD16 x /*12bits*/, CARD16 y /*12bits*/, diff --git a/src/glamo.h b/src/glamo.h index 7748fd6..76a3f1d 100644 --- a/src/glamo.h +++ b/src/glamo.h @@ -85,20 +85,22 @@ typedef struct _MemBuf { typedef struct { unsigned char* fbstart; unsigned char* fbmem; - int fboff; - int lineLength; - int rotate; - Bool shadowFB; - void *shadow; + int fboff; + int lineLength; + int rotate; + Bool shadowFB; + void *shadow; CloseScreenProcPtr CloseScreen; CreateScreenResourcesProcPtr CreateScreenResources; - void (*PointerMoved)(int index, int x, int y); + void (*PointerMoved)(int index, int x, int y); EntityInfoPtr pEnt; /* DGA info */ - DGAModePtr pDGAMode; - int nDGAMode; + DGAModePtr pDGAMode; + int nDGAMode; OptionInfoPtr Options; + ScreenPtr pScreen; + PixmapPtr srcPixmap; PixmapPtr dstPixmap; CARD32 src_offset; @@ -108,8 +110,22 @@ typedef struct { CARD32 settings; CARD32 foreground; + ExaDriverPtr exa; ExaOffscreenArea *exa_cmd_queue; + CARD16 *ring_addr; /* Beginning of ring buffer. */ + int ring_write; /* Index of write ptr in ring. */ + int ring_read; /* Index of read ptr in ring. */ + int ring_len; + + /* + * cmd queue cache in system memory + * It is to be flushed to cmd_queue_space + * "at once", when we are happy with it. + */ + MemBuf *cmd_queue_cache; + int cmd_queue_cache_start; + /* What was GLAMOCardInfo */ char *reg_base; Bool is_3362; @@ -178,6 +194,7 @@ MMIOSetBitMask(char *mmio, CARD32 reg, CARD16 mask, CARD16 val) MMIO_OUT16(mmio, reg, tmp); } +#if 0 /* glamo.c */ Bool GLAMOMapReg(KdCardInfo *card, GLAMOCardInfo *glamoc); @@ -190,10 +207,9 @@ GLAMODumpRegs(GLAMOScreenInfo *glamos, CARD16 from, CARD16 to); -/* glamo_draw.c */ -void -GLAMODrawSetup(ScreenPtr pScreen); +#endif +/* glamo_draw.c */ Bool GLAMODrawInit(ScreenPtr pScreen); @@ -212,6 +228,4 @@ GLAMORecolorCursor(ScreenPtr pScreen, int ndef, xColorItem *pdef); int GLAMOLog2(int val); -extern KdCardFuncs GLAMOFuncs; - #endif /* _GLAMO_H_ */ |