diff options
author | Thomas White <taw@bitwiz.org.uk> | 2009-07-20 01:16:53 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2009-07-20 01:16:53 +0100 |
commit | 6bd6ca43176dccac91fd5ddffeb0da81f0bcd6f6 (patch) | |
tree | 55c41ed7861239c3acb157b66b6ff13d38382eb5 | |
parent | 98c012f74d8435ca444eccb65f729460039b8d25 (diff) |
Initial KMS stuff
-rw-r--r-- | src/glamo-driver.c | 90 | ||||
-rw-r--r-- | src/glamo-kms-driver.c | 51 | ||||
-rw-r--r-- | src/glamo-kms-driver.h | 31 |
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); |