diff options
author | marha <marha@users.sourceforge.net> | 2009-06-28 22:07:26 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2009-06-28 22:07:26 +0000 |
commit | 3562e78743202e43aec8727005182a2558117eca (patch) | |
tree | 8f9113a77d12470c5c851a2a8e4cb02e89df7d43 /xorg-server/hw/kdrive/pm2/pm2.c | |
download | vcxsrv-3562e78743202e43aec8727005182a2558117eca.tar.gz vcxsrv-3562e78743202e43aec8727005182a2558117eca.tar.bz2 vcxsrv-3562e78743202e43aec8727005182a2558117eca.zip |
Checked in the following released items:
xkeyboard-config-1.4.tar.gz
ttf-bitstream-vera-1.10.tar.gz
font-alias-1.0.1.tar.gz
font-sun-misc-1.0.0.tar.gz
font-sun-misc-1.0.0.tar.gz
font-sony-misc-1.0.0.tar.gz
font-schumacher-misc-1.0.0.tar.gz
font-mutt-misc-1.0.0.tar.gz
font-misc-misc-1.0.0.tar.gz
font-misc-meltho-1.0.0.tar.gz
font-micro-misc-1.0.0.tar.gz
font-jis-misc-1.0.0.tar.gz
font-isas-misc-1.0.0.tar.gz
font-dec-misc-1.0.0.tar.gz
font-daewoo-misc-1.0.0.tar.gz
font-cursor-misc-1.0.0.tar.gz
font-arabic-misc-1.0.0.tar.gz
font-winitzki-cyrillic-1.0.0.tar.gz
font-misc-cyrillic-1.0.0.tar.gz
font-cronyx-cyrillic-1.0.0.tar.gz
font-screen-cyrillic-1.0.1.tar.gz
font-xfree86-type1-1.0.1.tar.gz
font-adobe-utopia-type1-1.0.1.tar.gz
font-ibm-type1-1.0.0.tar.gz
font-bitstream-type1-1.0.0.tar.gz
font-bitstream-speedo-1.0.0.tar.gz
font-bh-ttf-1.0.0.tar.gz
font-bh-type1-1.0.0.tar.gz
font-bitstream-100dpi-1.0.0.tar.gz
font-bh-lucidatypewriter-100dpi-1.0.0.tar.gz
font-bh-100dpi-1.0.0.tar.gz
font-adobe-utopia-100dpi-1.0.1.tar.gz
font-adobe-100dpi-1.0.0.tar.gz
font-util-1.0.1.tar.gz
font-bitstream-75dpi-1.0.0.tar.gz
font-bh-lucidatypewriter-75dpi-1.0.0.tar.gz
font-adobe-utopia-75dpi-1.0.1.tar.gz
font-bh-75dpi-1.0.0.tar.gz
bdftopcf-1.0.1.tar.gz
font-adobe-75dpi-1.0.0.tar.gz
mkfontscale-1.0.6.tar.gz
openssl-0.9.8k.tar.gz
bigreqsproto-1.0.2.tar.gz
xtrans-1.2.2.tar.gz
resourceproto-1.0.2.tar.gz
inputproto-1.4.4.tar.gz
compositeproto-0.4.tar.gz
damageproto-1.1.0.tar.gz
zlib-1.2.3.tar.gz
xkbcomp-1.0.5.tar.gz
freetype-2.3.9.tar.gz
pthreads-w32-2-8-0-release.tar.gz
pixman-0.12.0.tar.gz
kbproto-1.0.3.tar.gz
evieext-1.0.2.tar.gz
fixesproto-4.0.tar.gz
recordproto-1.13.2.tar.gz
randrproto-1.2.2.tar.gz
scrnsaverproto-1.1.0.tar.gz
renderproto-0.9.3.tar.gz
xcmiscproto-1.1.2.tar.gz
fontsproto-2.0.2.tar.gz
xextproto-7.0.3.tar.gz
xproto-7.0.14.tar.gz
libXdmcp-1.0.2.tar.gz
libxkbfile-1.0.5.tar.gz
libfontenc-1.0.4.tar.gz
libXfont-1.3.4.tar.gz
libX11-1.1.5.tar.gz
libXau-1.0.4.tar.gz
libxcb-1.1.tar.gz
xorg-server-1.5.3.tar.gz
Diffstat (limited to 'xorg-server/hw/kdrive/pm2/pm2.c')
-rw-r--r-- | xorg-server/hw/kdrive/pm2/pm2.c | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/xorg-server/hw/kdrive/pm2/pm2.c b/xorg-server/hw/kdrive/pm2/pm2.c new file mode 100644 index 000000000..148f03abd --- /dev/null +++ b/xorg-server/hw/kdrive/pm2/pm2.c @@ -0,0 +1,295 @@ +#ifdef HAVE_CONFIG_H +#include <kdrive-config.h> +#endif +#include "kdrive.h" +#include "kaa.h" + +#include "pm2.h" + +#define PARTPROD(a,b,c) (((a)<<6) | ((b)<<3) | (c)) + +char bppand[4] = { 0x03, /* 8bpp */ + 0x01, /* 16bpp */ + 0x00, /* 24bpp */ + 0x00 /* 32bpp */}; + +int partprodPermedia[] = { + -1, + PARTPROD(0,0,1), PARTPROD(0,1,1), PARTPROD(1,1,1), PARTPROD(1,1,2), + PARTPROD(1,2,2), PARTPROD(2,2,2), PARTPROD(1,2,3), PARTPROD(2,2,3), + PARTPROD(1,3,3), PARTPROD(2,3,3), PARTPROD(1,2,4), PARTPROD(3,3,3), + PARTPROD(1,3,4), PARTPROD(2,3,4), -1, PARTPROD(3,3,4), + PARTPROD(1,4,4), PARTPROD(2,4,4), -1, PARTPROD(3,4,4), + -1, PARTPROD(2,3,5), -1, PARTPROD(4,4,4), + PARTPROD(1,4,5), PARTPROD(2,4,5), PARTPROD(3,4,5), -1, + -1, -1, -1, PARTPROD(4,4,5), + PARTPROD(1,5,5), PARTPROD(2,5,5), -1, PARTPROD(3,5,5), + -1, -1, -1, PARTPROD(4,5,5), + -1, -1, -1, PARTPROD(3,4,6), + -1, -1, -1, PARTPROD(5,5,5), + PARTPROD(1,5,6), PARTPROD(2,5,6), -1, PARTPROD(3,5,6), + -1, -1, -1, PARTPROD(4,5,6), + -1, -1, -1, -1, + -1, -1, -1, PARTPROD(5,5,6), + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + 0}; + +static Bool +pmMapReg(KdCardInfo *card, PM2CardInfo *pm2c) +{ + pm2c->reg_base = (CARD8 *)KdMapDevice(PM2_REG_BASE(card), + PM2_REG_SIZE(card)); + + if (pm2c->reg_base == NULL) + return FALSE; + + KdSetMappedMode(PM2_REG_BASE(card), PM2_REG_SIZE(card), + KD_MAPPED_MODE_REGISTERS); + + return TRUE; +} + +static void +pmUnmapReg(KdCardInfo *card, PM2CardInfo *pm2c) +{ + if (pm2c->reg_base) { + KdResetMappedMode(PM2_REG_BASE(card), PM2_REG_SIZE(card), + KD_MAPPED_MODE_REGISTERS); + KdUnmapDevice((void *)pm2c->reg_base, PM2_REG_SIZE(card)); + pm2c->reg_base = 0; + } +} + +Bool +pmCardInit (KdCardInfo *card) +{ + PM2CardInfo *pm2c; + + pm2c = (PM2CardInfo *) xalloc (sizeof (PM2CardInfo)); + if (!pm2c) + return FALSE; + memset (pm2c, '\0', sizeof (PM2CardInfo)); + + (void) pmMapReg (card, pm2c); + + if (!vesaInitialize (card, &pm2c->vesa)) + { + xfree (pm2c); + return FALSE; + } + + pm2c->InFifoSpace = 0; + + card->driver = pm2c; + + return TRUE; +} + +static void +pmCardFini (KdCardInfo *card) +{ + PM2CardInfo *pm2c = (PM2CardInfo *) card->driver; + + pmUnmapReg (card, pm2c); + vesaCardFini (card); +} + +Bool +pmScreenInit (KdScreenInfo *screen) +{ + PM2CardInfo *pm2c = screen->card->driver; + PM2ScreenInfo *pm2s; + int screen_size, memory; + + pm2s = (PM2ScreenInfo *) xalloc (sizeof (PM2ScreenInfo)); + if (!pm2s) + return FALSE; + memset (pm2s, '\0', sizeof (PM2ScreenInfo)); + + if (!vesaScreenInitialize (screen, &pm2s->vesa)) + { + xfree (pm2s); + return FALSE; + } + + pm2c->pprod = partprodPermedia[screen->width >> 5]; + pm2c->bppalign = bppand[(screen->fb[0].bitsPerPixel>>3)-1]; + + pm2s->screen = pm2s->vesa.fb; + memory = pm2s->vesa.fb_size; + + screen_size = screen->fb[0].byteStride * screen->height; + + if (pm2s->screen && memory >= screen_size + 2048) + { + memory -= 2048; + pm2s->cursor_base = pm2s->screen + memory - 2048; + } + else + pm2s->cursor_base = 0; + memory -= screen_size; + if (memory > screen->fb[0].byteStride) + { + pm2s->off_screen = pm2s->screen + screen_size; + pm2s->off_screen_size = memory; + } + else + { + pm2s->off_screen = 0; + pm2s->off_screen_size = 0; + } + + switch (screen->fb[0].bitsPerPixel) { + case 8: + pm2c->BppShift = 2; + break; + case 16: + pm2c->BppShift = 1; + break; + case 24: + pm2c->BppShift = 2; + break; + case 32: + pm2c->BppShift = 0; + break; + } + + screen->driver = pm2s; + + return TRUE; +} + +static void +pmScreenFini (KdScreenInfo *screen) +{ + PM2ScreenInfo *pm2s = (PM2ScreenInfo *) screen->driver; + + vesaScreenFini (screen); + xfree (pm2s); + screen->driver = 0; +} + +static Bool +pmInitScreen (ScreenPtr pScreen) +{ + return vesaInitScreen (pScreen); +} + +#ifdef RANDR +static Bool +pmRandRSetConfig (ScreenPtr pScreen, + Rotation rotation, + int rate, + RRScreenSizePtr pSize) +{ + kaaWaitSync (pScreen); + + if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize)) + return FALSE; + + return TRUE; +} + +static void +pmRandRInit (ScreenPtr pScreen) +{ + rrScrPriv(pScreen); + + pScrPriv->rrSetConfig = pmRandRSetConfig; +} +#endif + +static Bool +pmFinishInitScreen (ScreenPtr pScreen) +{ + Bool ret; + ret = vesaFinishInitScreen (pScreen); +#ifdef RANDR + pmRandRInit (pScreen); +#endif + return ret; +} + +static void +pmPreserve(KdCardInfo *card) +{ + vesaPreserve(card); +} + +static void +pmRestore(KdCardInfo *card) +{ + vesaRestore (card); +} + +static Bool +pmEnable (ScreenPtr pScreen) +{ + if (!vesaEnable (pScreen)) + return FALSE; + +#ifdef XV + KdXVEnable (pScreen); +#endif + + return TRUE; +} + +static void +pmDisable(ScreenPtr pScreen) +{ +#ifdef XV + KdXVDisable (pScreen); +#endif + vesaDisable (pScreen); +} + +static Bool +pmDPMS(ScreenPtr pScreen, int mode) +{ + return vesaDPMS (pScreen, mode); +} + +KdCardFuncs PM2Funcs = { + pmCardInit, /* cardinit */ + pmScreenInit, /* scrinit */ + pmInitScreen, /* initScreen */ + pmFinishInitScreen, /* finishInitScreen */ + vesaCreateResources, /* createRes */ + pmPreserve, /* preserve */ + pmEnable, /* enable */ + pmDPMS, /* dpms */ + pmDisable, /* disable */ + pmRestore, /* restore */ + pmScreenFini, /* scrfini */ + pmCardFini, /* cardfini */ + + 0, /* initCursor */ + 0, /* enableCursor */ + 0, /* disableCursor */ + 0, /* finiCursor */ + NULL, /* recolorCursor */ + + pmDrawInit, /* initAccel */ + pmDrawEnable, /* enableAccel */ + pmDrawDisable, /* disableAccel */ + pmDrawFini, /* finiAccel */ + + vesaGetColors, /* getColors */ + vesaPutColors, /* putColors */ +}; |