mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-24 05:30:06 +01:00
acceleration is turned off in fbdev mode, but hangs when acceleration
is on. Will merge this with HEAD and debug from there, since backend
seems in good shape.
88 lines
2.8 KiB
C
88 lines
2.8 KiB
C
/*
|
|
* Generic card driving functions.
|
|
* Essentially, cascades calls to fbdev and vesa to initialize cards that
|
|
* do not have hardware-specific routines yet. Copied from the ati driver.
|
|
*
|
|
* Copyright (c) 2004 Brent Cook <busterb@mail.utexas.edu>
|
|
*
|
|
* This code is licensed under the GPL. See the file COPYING in the root
|
|
* directory of the sources for details.
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
#include "backend.h"
|
|
|
|
Bool
|
|
backendInitialize(KdCardInfo *card, BackendCard *backend)
|
|
{
|
|
Bool success = FALSE;
|
|
|
|
#ifdef KDRIVEFBDEV
|
|
if (!success && fbdevInitialize(card, &backend->priv.fbdev)) {
|
|
success = TRUE;
|
|
ErrorF("Using fbdev backend\n");
|
|
backend->type = FBDEV;
|
|
backend->cardfini = fbdevCardFini;
|
|
backend->scrfini = fbdevScreenFini;
|
|
backend->initScreen = fbdevInitScreen;
|
|
backend->finishInitScreen = fbdevFinishInitScreen;
|
|
backend->createRes = fbdevCreateResources;
|
|
backend->preserve = fbdevPreserve;
|
|
backend->restore = fbdevRestore;
|
|
backend->dpms = fbdevDPMS;
|
|
backend->enable = fbdevEnable;
|
|
backend->disable = fbdevDisable;
|
|
backend->getColors = fbdevGetColors;
|
|
backend->putColors = fbdevPutColors;
|
|
}
|
|
#endif
|
|
#ifdef KDRIVEVESA
|
|
if (!success && vesaInitialize(card, &backend->priv.vesa)) {
|
|
success = TRUE;
|
|
ErrorF("Using vesa backend\n");
|
|
backend->type = VESA;
|
|
backend->cardfini = vesaCardFini;
|
|
backend->scrfini = vesaScreenFini;
|
|
backend->initScreen = vesaInitScreen;
|
|
backend->finishInitScreen = vesaFinishInitScreen;
|
|
backend->createRes = vesaCreateResources;
|
|
backend->preserve = vesaPreserve;
|
|
backend->restore = vesaRestore;
|
|
backend->dpms = vesaDPMS;
|
|
backend->enable = vesaEnable;
|
|
backend->disable = vesaDisable;
|
|
backend->getColors = vesaGetColors;
|
|
backend->putColors = vesaPutColors;
|
|
}
|
|
#endif
|
|
return success;
|
|
}
|
|
|
|
Bool
|
|
backendScreenInitialize(KdScreenInfo *screen, BackendScreen *backendScreen,
|
|
BackendCard *backendCard)
|
|
{
|
|
Bool success = FALSE;
|
|
|
|
#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
|
|
* screen->fb[0].byteStride;
|
|
}
|
|
#endif
|
|
#ifdef KDRIVEVESA
|
|
if (backendCard->type == VESA) {
|
|
screen->card->driver = &backendCard->priv.vesa;
|
|
if (screen->fb[0].depth == 0) {
|
|
screen->fb[0].depth = 16;
|
|
}
|
|
success = vesaScreenInitialize(screen, &backendScreen->vesa);
|
|
}
|
|
#endif
|
|
return success;
|
|
}
|