summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2009-07-20 01:16:53 +0100
committerThomas White <taw@bitwiz.org.uk>2009-07-20 01:16:53 +0100
commit6bd6ca43176dccac91fd5ddffeb0da81f0bcd6f6 (patch)
tree55c41ed7861239c3acb157b66b6ff13d38382eb5 /src
parent98c012f74d8435ca444eccb65f729460039b8d25 (diff)
Initial KMS stuff
Diffstat (limited to 'src')
-rw-r--r--src/glamo-driver.c90
-rw-r--r--src/glamo-kms-driver.c51
-rw-r--r--src/glamo-kms-driver.h31
3 files changed, 141 insertions, 31 deletions
diff --git a/src/glamo-driver.c b/src/glamo-driver.c
index 0a42eb3..9debf57 100644
--- a/src/glamo-driver.c
+++ b/src/glamo-driver.c
@@ -292,42 +292,71 @@ GlamoProbe(DriverPtr drv, int flags)
if (flags & PROBE_DETECT)
return FALSE;
- if ((numDevSections = xf86MatchDevice(GLAMO_DRIVER_NAME, &devSections)) <= 0)
+ numDevSections = xf86MatchDevice(GLAMO_DRIVER_NAME, &devSections);
+ if (numDevSections <= 0)
return FALSE;
- if (!xf86LoadDrvSubModule(drv, "fbdevhw"))
- return FALSE;
+ /* Is today a good day to use KMS? */
+ if ( GlamoKernelModesettingAvailable(pScrn) ) {
+
+ foundScreen = TRUE;
+
+ pScrn->driverVersion = GLAMO_VERSION;
+ pScrn->driverName = GLAMO_DRIVER_NAME;
+ pScrn->name = GLAMO_NAME;
+ pScrn->PreInit = GlamoKMSPreInit;
+ pScrn->ScreenInit = GlamoKMSScreenInit;
+ pScrn->SwitchMode = GlamoKMSSwitchMode;
+ pScrn->AdjustFrame = GlamoKMSAdjustFrame;
+ pScrn->EnterVT = GlamoKMSEnterVT;
+ pScrn->LeaveVT = GlamoKMSLeaveVT;
+ pScrn->ValidMode = GlamoKMSValidMode;
- for (i = 0; i < numDevSections; i++) {
- dev = xf86FindOptionValue(devSections[i]->options, "Device");
- if (fbdevHWProbe(NULL, dev, NULL)) {
- int entity;
- pScrn = NULL;
-
- entity = xf86ClaimFbSlot(drv, 0, devSections[i], TRUE);
- pScrn = xf86ConfigFbEntity(pScrn,0,entity,
- NULL, NULL, NULL, NULL);
-
- if (pScrn) {
- foundScreen = TRUE;
-
- pScrn->driverVersion = GLAMO_VERSION;
- pScrn->driverName = GLAMO_DRIVER_NAME;
- pScrn->name = GLAMO_NAME;
- pScrn->Probe = GlamoProbe;
- pScrn->PreInit = GlamoPreInit;
- pScrn->ScreenInit = GlamoScreenInit;
- pScrn->SwitchMode = GlamoSwitchMode;
- pScrn->AdjustFrame = fbdevHWAdjustFrameWeak();
- pScrn->EnterVT = GlamoEnterVT;
- pScrn->LeaveVT = GlamoLeaveVT;
- pScrn->ValidMode = fbdevHWValidModeWeak();
-
- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "using %s\n", dev ? dev : "default device");
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using KMS!");
+
+ } else {
+
+ if (!xf86LoadDrvSubModule(drv, "fbdevhw"))
+ return FALSE;
+
+ for (i = 0; i < numDevSections; i++) {
+ dev = xf86FindOptionValue(devSections[i]->options,
+ "Device");
+ if (fbdevHWProbe(NULL, dev, NULL)) {
+ int entity;
+ pScrn = NULL;
+
+ entity = xf86ClaimFbSlot(drv, 0, devSections[i],
+ TRUE);
+ pScrn = xf86ConfigFbEntity(pScrn,0,entity, NULL,
+ NULL, NULL, NULL);
+
+ if (pScrn) {
+ foundScreen = TRUE;
+
+ pScrn->driverVersion = GLAMO_VERSION;
+ pScrn->driverName = GLAMO_DRIVER_NAME;
+ pScrn->name = GLAMO_NAME;
+ pScrn->Probe = GlamoProbe;
+ pScrn->PreInit = GlamoPreInit;
+ pScrn->ScreenInit = GlamoScreenInit;
+ pScrn->SwitchMode = GlamoSwitchMode;
+ pScrn->AdjustFrame
+ = fbdevHWAdjustFrameWeak();
+ pScrn->EnterVT = GlamoEnterVT;
+ pScrn->LeaveVT = GlamoLeaveVT;
+ pScrn->ValidMode
+ = fbdevHWValidModeWeak();
+
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "using %s\n",
+ dev ? dev : "default device");
+ }
}
}
+
}
+
xfree(devSections);
TRACE("probe done");
return foundScreen;
@@ -806,4 +835,3 @@ GlamoLoadColormap(ScrnInfoPtr pScrn, int numColors, int *indices,
(colors[indices[i]].blue >> 3);
}
}
-
diff --git a/src/glamo-kms-driver.c b/src/glamo-kms-driver.c
new file mode 100644
index 0000000..5102f4b
--- /dev/null
+++ b/src/glamo-kms-driver.c
@@ -0,0 +1,51 @@
+/*
+ * KMS Support for the SMedia Glamo3362 X.org Driver
+ *
+ * Copyright 2009 Thomas White <taw@bitwiz.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+Bool GlamoKMSPreInit(ScrnInfoPtr pScrn, int flags)
+{
+}
+
+Bool GlamoKMSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
+ char **argv)
+{
+}
+
+Bool SwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+{
+}
+
+void AdjustFrame(int scrnIndex, int x, int y, int flags)
+{
+}
+
+Bool EnterVT(int scrnIndex, int flags)
+{
+}
+
+void LeaveVT(int scrnIndex, int flags)
+{
+}
+
+ModeStatus ValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose,
+ int flags)
+{
+}
diff --git a/src/glamo-kms-driver.h b/src/glamo-kms-driver.h
new file mode 100644
index 0000000..84069a3
--- /dev/null
+++ b/src/glamo-kms-driver.h
@@ -0,0 +1,31 @@
+/*
+ * KMS Support for the SMedia Glamo3362 X.org Driver
+ *
+ * Copyright 2009 Thomas White <taw@bitwiz.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+extern Bool GlamoKMSPreInit(ScrnInfoPtr pScrn, int flags);
+extern Bool GlamoKMSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
+ char **argv);
+extern Bool SwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
+extern void AdjustFrame(int scrnIndex, int x, int y, int flags);
+extern Bool EnterVT(int scrnIndex, int flags);
+extern void LeaveVT(int scrnIndex, int flags);
+extern ModeStatus ValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose,
+ int flags);