removed hardcoded vesa references so we can operate with any backend. fbdev

works for initializing the screen, but input fails shortly after.
This commit is contained in:
Brent Cook 2004-04-05 02:52:35 +00:00
parent 920e6ff81b
commit b526276faa
3 changed files with 141 additions and 85 deletions

View File

@ -66,6 +66,7 @@ backendScreenInitialize(KdScreenInfo *screen, BackendScreen *backendScreen,
#ifdef KDRIVEFBDEV #ifdef KDRIVEFBDEV
if (backendCard->type == FBDEV) { if (backendCard->type == FBDEV) {
screen->card->driver = &backendCard->priv.fbdev;
success = fbdevScreenInitialize(screen, &backendScreen->fbdev); success = fbdevScreenInitialize(screen, &backendScreen->fbdev);
screen->memory_size = backendCard->priv.fbdev.fix.smem_len; screen->memory_size = backendCard->priv.fbdev.fix.smem_len;
screen->off_screen_base = backendCard->priv.fbdev.var.yres_virtual screen->off_screen_base = backendCard->priv.fbdev.var.yres_virtual

View File

@ -52,6 +52,7 @@ struct NeoChipInfo neoChips[] = {
static Bool static Bool
neoCardInit(KdCardInfo *card) neoCardInit(KdCardInfo *card)
{ {
ENTER();
NeoCardInfo *neoc; NeoCardInfo *neoc;
struct NeoChipInfo *chip; struct NeoChipInfo *chip;
@ -74,25 +75,30 @@ neoCardInit (KdCardInfo *card)
ErrorF("Using Neomagic card: %s\n", neoc->chip->name); ErrorF("Using Neomagic card: %s\n", neoc->chip->name);
iopl(3);
neoMapReg(card, neoc); neoMapReg(card, neoc);
card->driver = neoc; card->driver = neoc;
LEAVE();
return TRUE; return TRUE;
} }
static Bool static Bool
neoScreenInit(KdScreenInfo *screen) neoScreenInit(KdScreenInfo *screen)
{ {
NeoCardInfo *neoc = screen->card->driver; ENTER();
NeoScreenInfo *neos; NeoScreenInfo *neos;
neoCardInfo(screen);
int screen_size, memory; int screen_size, memory;
neos = (NeoScreenInfo *) xalloc (sizeof (NeoScreenInfo)); neos = xcalloc(sizeof(NeoScreenInfo), 1);
if (!neos) { if(neos == NULL) {
return FALSE; return FALSE;
} }
memset (neos, '\0', sizeof (NeoScreenInfo));
screen->driver = neos;
if(!backendScreenInitialize(screen, &neos->backendScreen, &neoc->backendCard)) { if(!backendScreenInitialize(screen, &neos->backendScreen, &neoc->backendCard)) {
xfree(neos); xfree(neos);
@ -102,12 +108,20 @@ neoScreenInit (KdScreenInfo *screen)
screen->softCursor = TRUE; // no hardware color cursor available screen->softCursor = TRUE; // no hardware color cursor available
switch(neoc->backendCard.type) { switch(neoc->backendCard.type) {
case VESA: #ifdef KDRIVEFBDEV
neos->screen = neos->backendScreen.vesa.fb;
break;
case FBDEV: case FBDEV:
neos->screen = neoc->backendCard.priv.fbdev.fb; neos->screen = neoc->backendCard.priv.fbdev.fb;
break; break;
#endif
#ifdef KDRIVEVESA
case VESA:
neos->screen = neos->backendScreen.vesa.fb;
break;
#endif
default:
ErrorF("Unhandled backend, we should never get here.\n");
xfree(neos);
return FALSE;
} }
memory = neoc->chip->linearSize * 1024; memory = neoc->chip->linearSize * 1024;
@ -121,35 +135,52 @@ neoScreenInit (KdScreenInfo *screen)
neos->off_screen = 0; neos->off_screen = 0;
neos->off_screen_size = 0; neos->off_screen_size = 0;
} }
screen->driver = neos;
LEAVE();
return TRUE; return TRUE;
} }
static Bool static Bool
neoInitScreen(ScreenPtr pScreen) neoInitScreen(ScreenPtr pScreen)
{ {
return vesaInitScreen (pScreen); ENTER();
KdScreenPriv(pScreen);
neoCardInfo(pScreenPriv);
return neoc->backendCard.initScreen(pScreen);
LEAVE();
} }
static Bool static Bool
neoFinishInitScreen(ScreenPtr pScreen) neoFinishInitScreen(ScreenPtr pScreen)
{ {
Bool ret; KdScreenPriv(pScreen);
ret = vesaFinishInitScreen (pScreen); neoCardInfo(pScreenPriv);
return ret;
return neoc->backendCard.finishInitScreen(pScreen);
}
static Bool
neoCreateResources(ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
neoCardInfo(pScreenPriv);
return neoc->backendCard.createRes(pScreen);
} }
void void
neoPreserve(KdCardInfo *card) neoPreserve(KdCardInfo *card)
{ {
vesaPreserve(card); NeoCardInfo *neoc = card->driver;
neoc->backendCard.preserve(card);
} }
CARD8 CARD8
neoGetIndex(NeoCardInfo *nvidiac, CARD16 addr, CARD8 index) neoGetIndex(NeoCardInfo *nvidiac, CARD16 addr, CARD8 index)
{ {
outb(index, addr); outb(index, addr);
return inb(addr+1); return inb(addr+1);
} }
@ -178,7 +209,6 @@ static void neoUnlock(NeoCardInfo *neoc){
Bool Bool
neoMapReg(KdCardInfo *card, NeoCardInfo *neoc) neoMapReg(KdCardInfo *card, NeoCardInfo *neoc)
{ {
iopl (3);
ENTER(); ENTER();
neoc->reg_base = card->attr.address[1] & 0xFFF80000; neoc->reg_base = card->attr.address[1] & 0xFFF80000;
if(!neoc->reg_base) { if(!neoc->reg_base) {
@ -234,11 +264,14 @@ Bool
neoEnable(ScreenPtr pScreen) neoEnable(ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
NeoCardInfo *neoc = pScreenPriv->card->driver; neoCardInfo(pScreenPriv);
if (!vesaEnable (pScreen)) if(!neoc->backendCard.enable(pScreen)) {
return FALSE; return FALSE;
}
neoSetMMIO(pScreenPriv->card, neoc); neoSetMMIO(pScreenPriv->card, neoc);
return TRUE; return TRUE;
} }
@ -246,17 +279,38 @@ void
neoDisable(ScreenPtr pScreen) neoDisable(ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
neoCardInfo(pScreenPriv);
NeoCardInfo *neoc = pScreenPriv->card->driver;
neoResetMMIO(pScreenPriv->card, neoc); neoResetMMIO(pScreenPriv->card, neoc);
vesaDisable (pScreen); neoc->backendCard.disable(pScreen);
}
static void
neoGetColors(ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
{
KdScreenPriv(pScreen);
neoCardInfo(pScreenPriv);
neoc->backendCard.getColors(pScreen, fb, n, pdefs);
}
static void
neoPutColors(ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
{
KdScreenPriv(pScreen);
neoCardInfo(pScreenPriv);
neoc->backendCard.putColors(pScreen, fb, n, pdefs);
} }
static Bool static Bool
neoDPMS(ScreenPtr pScreen, int mode) neoDPMS(ScreenPtr pScreen, int mode)
{ {
return vesaDPMS (pScreen, mode); KdScreenPriv(pScreen);
neoCardInfo(pScreenPriv);
return neoc->backendCard.dpms(pScreen, mode);
} }
static void static void
@ -265,15 +319,16 @@ neoRestore (KdCardInfo *card)
NeoCardInfo *neoc = card->driver; NeoCardInfo *neoc = card->driver;
neoResetMMIO(card, neoc); neoResetMMIO(card, neoc);
vesaRestore (card); neoc->backendCard.restore(card);
} }
static void static void
neoScreenFini(KdScreenInfo *screen) neoScreenFini(KdScreenInfo *screen)
{ {
NeoScreenInfo *neos =(NeoScreenInfo *) screen->driver; NeoScreenInfo *neos =(NeoScreenInfo *) screen->driver;
NeoCardInfo *neoc = screen->card->driver;
vesaScreenFini (screen); neoc->backendCard.scrfini(screen);
xfree(neos); xfree(neos);
screen->driver = 0; screen->driver = 0;
} }
@ -281,10 +336,10 @@ neoScreenFini (KdScreenInfo *screen)
static void static void
neoCardFini(KdCardInfo *card) neoCardFini(KdCardInfo *card)
{ {
NeoCardInfo *neos = card->driver; NeoCardInfo *neoc = card->driver;
neoUnmapReg (card, neos); neoUnmapReg(card, neoc);
vesaCardFini (card); neoc->backendCard.cardfini(card);
} }
#define neoCursorInit 0 // initCursor #define neoCursorInit 0 // initCursor
@ -298,7 +353,7 @@ KdCardFuncs neoFuncs = {
neoScreenInit, // scrinit neoScreenInit, // scrinit
neoInitScreen, // initScreen neoInitScreen, // initScreen
neoFinishInitScreen, // finishInitScreen neoFinishInitScreen, // finishInitScreen
vesaCreateResources, // createRes neoCreateResources, // createRes
neoPreserve, // preserve neoPreserve, // preserve
neoEnable, // enable neoEnable, // enable
neoDPMS, // dpms neoDPMS, // dpms
@ -319,6 +374,6 @@ KdCardFuncs neoFuncs = {
neoDrawDisable, // disableAccel neoDrawDisable, // disableAccel
neoDrawFini, // finiAccel neoDrawFini, // finiAccel
vesaGetColors, // getColors neoGetColors, // getColors
vesaPutColors, // putColors neoPutColors, // putColors
}; };