[pkg-fso-commits] [SCM] xf86-video-glamo, SMedia Glamo video driver for X.Org branch, master, updated. upstream/0.0.0+20090707.git98c012f7-57-g9918e08
Thomas White
taw at bitwiz.org.uk
Fri Jan 8 13:24:39 UTC 2010
The following commit has been merged in the master branch:
commit fa0b953a1a137a9706b9bea15aa7e30a67d0a086
Author: Thomas White <taw at bitwiz.org.uk>
Date: Thu Jul 23 00:04:49 2009 +0100
Make glamo-kms-driver.c compile
diff --git a/src/glamo-kms-exa.h b/src/glamo-dri2.h
similarity index 78%
copy from src/glamo-kms-exa.h
copy to src/glamo-dri2.h
index be8e805..8ec99b9 100644
--- a/src/glamo-kms-exa.h
+++ b/src/glamo-dri2.h
@@ -1,5 +1,5 @@
/*
- * EXA via DRI for the SMedia Glamo3362 X.org Driver
+ * DRI for the SMedia Glamo3362 X.org Driver
*
* Copyright 2009 Thomas White <taw at bitwiz.org.uk>
*
@@ -22,5 +22,7 @@
#include "xf86.h"
-extern void *GlamoKMSExaInit(ScrnInfoPtr pScrn);
-extern void GlamoKMSExaClose(ScrnInfoPtr pScrn);
+extern void driScreenInit(ScreenPtr pScreen);
+extern void driCloseScreen(ScreenPtr pScreen);
+extern void driLock(ScreenPtr pScreen);
+extern void driUnlock(ScreenPtr pScreen);
diff --git a/src/glamo-kms-driver.c b/src/glamo-kms-driver.c
index 0c923c0..2741253 100644
--- a/src/glamo-kms-driver.c
+++ b/src/glamo-kms-driver.c
@@ -65,10 +65,12 @@
#include "xf86str.h"
#include "xf86RAC.h"
#include "xf86drm.h"
+#include "micmap.h"
#include "glamo.h"
#include "glamo-kms-driver.h"
#include "glamo-kms-exa.h"
+#include "glamo-dri2.h"
static const char *fbSymbols[] = {
@@ -78,9 +80,6 @@ static const char *fbSymbols[] = {
};
-static int modesettingEntityIndex = -1;
-
-
/* Return TRUE if KMS can be used */
Bool GlamoKernelModesettingAvailable()
{
@@ -106,29 +105,44 @@ Bool GlamoKernelModesettingAvailable()
}
+void GlamoKMSAdjustFrame(int scrnIndex, int x, int y, int flags)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+ xf86OutputPtr output = config->output[config->compat_output];
+ xf86CrtcPtr crtc = output->crtc;
+
+ if (crtc && crtc->enabled) {
+ crtc->funcs->mode_set(crtc,
+ pScrn->currentMode,
+ pScrn->currentMode,
+ x, y);
+ crtc->x = output->initial_x + x;
+ crtc->y = output->initial_y + y;
+ }
+}
+
+
static Bool CreateFrontBuffer(ScrnInfoPtr pScrn)
{
GlamoPtr pGlamo = GlamoPTR(pScrn);
ScreenPtr pScreen = pScrn->pScreen;
PixmapPtr rootPixmap = pScreen->GetScreenPixmap(pScreen);
- Bool fbAccessDisabled;
- int flags;
+ unsigned int flags;
- pGlamo->noEvict = TRUE;
pScreen->ModifyPixmapHeader(rootPixmap,
pScrn->virtualX, pScrn->virtualY,
pScrn->depth, pScrn->bitsPerPixel,
pScrn->displayWidth * pScrn->bitsPerPixel/8,
NULL);
- pGlamo->noEvict = FALSE;
- drmModeAddFB(ms->fd,
+ drmModeAddFB(pGlamo->drm_fd,
pScrn->virtualX,
pScrn->virtualY,
pScrn->depth,
pScrn->bitsPerPixel,
pScrn->displayWidth * pScrn->bitsPerPixel / 8,
- driGetPixmapHandle(rootPixmap, &flags), &ms->fb_id);
+ driGetPixmapHandle(rootPixmap, &flags), &pGlamo->fb_id);
pScrn->frameX0 = 0;
pScrn->frameY0 = 0;
@@ -143,10 +157,6 @@ static Bool CreateFrontBuffer(ScrnInfoPtr pScrn)
static Bool crtc_resize(ScrnInfoPtr pScrn, int width, int height)
{
GlamoPtr pGlamo = GlamoPTR(pScrn);
- ScreenPtr pScreen = pScrn->pScreen;
- PixmapPtr rootPixmap = pScreen->GetScreenPixmap(pScreen);
- Bool fbAccessDisabled;
- CARD8 *fbstart;
if ( (width == pScrn->virtualX) && (height == pScrn->virtualY) )
return TRUE; /* Nothing to do */
@@ -283,15 +293,45 @@ static Bool GlamoKMSCloseScreen(int scrnIndex, ScreenPtr pScreen)
}
+static Bool GlamoKMSCreateScreenResources(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ GlamoPtr pGlamo = GlamoPTR(pScrn);
+ PixmapPtr rootPixmap;
+ Bool ret;
+ unsigned int flags;
+
+ pScreen->CreateScreenResources = pGlamo->createScreenResources;
+ ret = pScreen->CreateScreenResources(pScreen);
+ pScreen->CreateScreenResources = GlamoKMSCreateScreenResources;
+
+ rootPixmap = pScreen->GetScreenPixmap(pScreen);
+
+ if (!pScreen->ModifyPixmapHeader(rootPixmap, -1, -1, -1, -1, -1, NULL))
+ FatalError("Couldn't adjust screen pixmap\n");
+
+ drmModeAddFB(pGlamo->drm_fd,
+ pScrn->virtualX,
+ pScrn->virtualY,
+ pScrn->depth,
+ pScrn->bitsPerPixel,
+ pScrn->displayWidth * pScrn->bitsPerPixel / 8,
+ driGetPixmapHandle(rootPixmap, &flags), &pGlamo->fb_id);
+
+ GlamoKMSAdjustFrame(pScrn->scrnIndex,
+ pScrn->frameX0, pScrn->frameY0,
+ 0);
+
+ return ret;
+}
+
+
Bool GlamoKMSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
char **argv)
{
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
GlamoPtr pGlamo = GlamoPTR(pScrn);
VisualPtr visual;
- unsigned long sys_mem;
- int c;
- MessageType from;
/* Deal with server regeneration */
if ( pGlamo->drm_fd < 0 ) {
@@ -342,7 +382,7 @@ Bool GlamoKMSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
fbPictureInit(pScreen, NULL, 0);
pGlamo->createScreenResources = pScreen->CreateScreenResources;
- pScreen->CreateScreenResources = CreateScreenResources;
+ pScreen->CreateScreenResources = GlamoKMSCreateScreenResources;
xf86SetBlackWhitePixels(pScreen);
@@ -353,13 +393,6 @@ Bool GlamoKMSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
xf86SetSilkenMouse(pScreen);
miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
- /* Need to extend HWcursor support to handle mask interleave */
- if (!ms->SWCursor) {
- xf86_cursors_init(pScreen, 64, 64,
- HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_64 |
- HARDWARE_CURSOR_ARGB);
- }
-
/* Must force it before EnterVT, so we are in control of VT and
* later memory should be bound when allocating, e.g rotate_mem */
pScrn->vtSema = TRUE;
@@ -391,24 +424,6 @@ Bool GlamoKMSSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
}
-void GlamoKMSAdjustFrame(int scrnIndex, int x, int y, int flags)
-{
- ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
- xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
- xf86OutputPtr output = config->output[config->compat_output];
- xf86CrtcPtr crtc = output->crtc;
-
- if (crtc && crtc->enabled) {
- crtc->funcs->mode_set(crtc,
- pScrn->currentMode,
- pScrn->currentMode,
- x, y);
- crtc->x = output->initial_x + x;
- crtc->y = output->initial_y + y;
- }
-}
-
-
Bool GlamoKMSEnterVT(int scrnIndex, int flags)
{
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
@@ -445,8 +460,6 @@ void GlamoKMSLeaveVT(int scrnIndex, int flags)
xf86CrtcPtr crtc = config->crtc[o];
- cursor_destroy(crtc);
-
if ( crtc->rotatedPixmap || crtc->rotatedData ) {
crtc->funcs->shadow_destroy(crtc, crtc->rotatedPixmap,
crtc->rotatedData);
diff --git a/src/glamo-kms-exa.h b/src/glamo-kms-exa.h
index be8e805..45b8eb7 100644
--- a/src/glamo-kms-exa.h
+++ b/src/glamo-kms-exa.h
@@ -24,3 +24,4 @@
extern void *GlamoKMSExaInit(ScrnInfoPtr pScrn);
extern void GlamoKMSExaClose(ScrnInfoPtr pScrn);
+extern unsigned int driGetPixmapHandle(PixmapPtr pPixmap, unsigned int *flags);
diff --git a/src/glamo.h b/src/glamo.h
index cf1bf5d..aac39d5 100644
--- a/src/glamo.h
+++ b/src/glamo.h
@@ -135,8 +135,11 @@ typedef struct {
/* Use hardware acceleration */
Bool accel;
+ /* Things to do with DRI */
int drm_fd;
unsigned int SaveGeneration;
+ unsigned int fb_id;
+ CreateScreenResourcesProcPtr createScreenResources;
uint16_t *colormap;
} GlamoRec, *GlamoPtr;
--
xf86-video-glamo, SMedia Glamo video driver for X.Org
More information about the pkg-fso-commits
mailing list