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