[oe-commits] org.oe.dev xserver-kdrive-imageon: add (another) w100 based xserver, closes #1752
manuel.teira commit
openembedded-commits at lists.openembedded.org
Fri Jan 5 20:19:05 UTC 2007
xserver-kdrive-imageon: add (another) w100 based xserver, closes #1752
Author: manuel.teira at telefonica.net
Branch: org.openembedded.dev
Revision: 4bb665b48000f22ac064febc79e5831fc6456ca2
ViewMTN: http://monotone.openembedded.org/revision.psp?id=4bb665b48000f22ac064febc79e5831fc6456ca2
Files:
1
packages/xorg-xserver/xserver-kdrive/kdrive-imageon.patch
packages/xorg-xserver/xserver-kdrive/kdrive-vidmemarea.patch
packages/xorg-xserver/xserver-kdrive-imageon_X11R7.1-1.1.0.bb
Diffs:
#
# mt diff -rcaaf27827c768f1855eb33459546f2fec5fe4dce -r4bb665b48000f22ac064febc79e5831fc6456ca2
#
#
#
# add_file "packages/xorg-xserver/xserver-kdrive/kdrive-imageon.patch"
# content [c658c6303d6aa12d36ac8d9a3eaa7af52377f390]
#
# add_file "packages/xorg-xserver/xserver-kdrive/kdrive-vidmemarea.patch"
# content [5c3466ed287eb3247cd8053685133434dc65a5a3]
#
# add_file "packages/xorg-xserver/xserver-kdrive-imageon_X11R7.1-1.1.0.bb"
# content [7d115b4144ec42bcdd096174385d6b0ab4db2a39]
#
============================================================
--- packages/xorg-xserver/xserver-kdrive/kdrive-imageon.patch c658c6303d6aa12d36ac8d9a3eaa7af52377f390
+++ packages/xorg-xserver/xserver-kdrive/kdrive-imageon.patch c658c6303d6aa12d36ac8d9a3eaa7af52377f390
@@ -0,0 +1,8574 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- xorg-server-X11R7.1-1.1.0.orig/configure.ac~kdrive-imageon
++++ xorg-server-X11R7.1-1.1.0.orig/configure.ac
+@@ -435,6 +435,7 @@
+ AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
+ AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
+ AC_ARG_ENABLE(xsdl, AS_HELP_STRING([--enable-xsdl], [Build the kdrive Xsdl server (default: auto)]), [XSDL=$enableval], [XSDL=auto])
++AC_ARG_ENABLE(imageon, AS_HELP_STRING([--enable-imageon], [Build the kdrive Ximageon server (default: no)]), [KDRIVEIMAGEON=$enableval], [KDRIVEIMAGEON=no])
+ dnl xprint
+ AC_ARG_ENABLE(freetype, AS_HELP_STRING([ --enable-freetype], [Build Xprint FreeType backend (default: yes)]), [XP_USE_FREETYPE=$enableval],[XP_USE_FREETYPE=no])
+ AC_ARG_WITH(freetype-config, AS_HELP_STRING([ --with-freetype-config=PROG], [Use FreeType configuration program PROG (default: auto)]), freetype_config=$withval, freetype_config=auto)
+@@ -1509,6 +1510,11 @@
+ AC_SUBST([XSDL_INCS])
+
+
++AM_CONDITIONAL(KDRIVEIMAGEON, [test "x$KDRIVEIMAGEON" = xyes])
++if test "x$KDRIVEIMAGEON" = xyes; then
++ AC_DEFINE(KDRIVEIMAGEON, 1, [Build Ximageon server])
++fi
++
+ dnl these only go in xkb-config.h (which is shared by the Xorg and Xnest servers)
+ AC_DEFINE(__XKBDEFRULES__, "xorg", [Default XKB rules])
+ AC_DEFINE_DIR(XKB_BASE_DIRECTORY, XKBPATH, [Path to XKB data])
+@@ -1750,6 +1756,7 @@
+ hw/kdrive/epson/Makefile
+ hw/kdrive/fake/Makefile
+ hw/kdrive/fbdev/Makefile
++hw/kdrive/imageon/Makefile
+ hw/kdrive/i810/Makefile
+ hw/kdrive/linux/Makefile
+ hw/kdrive/mach64/Makefile
+--- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/Makefile.am~kdrive-imageon
++++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/Makefile.am
+@@ -1,18 +1,9 @@
+-if KDRIVEVESA
+-VESA_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
+- smi via
+-endif
+-
+ if KDRIVEFBDEV
+ FBDEV_SUBDIRS = fbdev
+ endif
+
+-if XSDLSERVER
+-XSDL_SUBDIRS = sdl
+-endif
+-
+-if XEPHYR
+-XEPHYR_SUBDIRS = ephyr
++if KDRIVEIMAGEON
++IMAGEON_SUBDIRS = imageon
+ endif
+
+ SUBDIRS = \
+@@ -20,9 +11,9 @@
+ linux \
+ $(XSDL_SUBDIRS) \
+ $(FBDEV_SUBDIRS) \
++ $(IMAGEON_SUBDIRS) \
+ $(VESA_SUBDIRS) \
+- $(XEPHYR_SUBDIRS) \
+- fake
++ $(XEPHYR_SUBDIRS)
+
+ DIST_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
+ smi via fbdev sdl ephyr src linux fake sis300
+--- /dev/null
++++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/Makefile.am
+@@ -0,0 +1,47 @@
++if KDRIVEFBDEV
++FBDEV_INCLUDES =-I$(top_srcdir)/hw/kdrive/fbdev
++FBDEV_LIBS = $(top_builddir)/hw/kdrive/fbdev/libfbdev.a
++endif
++
++INCLUDES = \
++ @KDRIVE_INCS@ \
++ $(FBDEV_INCLUDES) \
++ @KDRIVE_CFLAGS@
++
++bin_PROGRAMS = Ximageon
++
++if TSLIB
++TSLIB_FLAG = -lts
++endif
++
++noinst_LIBRARIES = libimageon.a
++
++libimageon_a_SOURCES = \
++ imageon.h \
++ imageon_regs.h \
++ imageon_const.h \
++ imageon.c \
++ imageon_cursor.c \
++ imageon_draw.c \
++ imageon_support.c \
++ imageon_video.c
++
++
++
++Ximageon_SOURCES = \
++ imageon_stub.c
++
++W100_LIBS = \
++ libimageon.a \
++ $(FBDEV_LIBS) \
++ @KDRIVE_LIBS@
++
++Ximageon_LDADD = \
++ $(W100_LIBS) \
++ @XSERVER_LIBS@ \
++ $(TSLIB_FLAG)
++
++
++Ximageon_DEPENDENCIES = \
++ libimageon.a \
++ $(FBDEV_LIBS)
+--- /dev/null
++++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon.c
+@@ -0,0 +1,523 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <kdrive-config.h>
++#endif
++#include "imageon.h"
++#include "imageon_regs.h"
++
++struct pci_id_entry w100_pci_ids[] = {
++ {0x1002, 0x5644, 0, "ATI Imageon 3200"},
++ {0x1002, 0x5741, 0, "ATI Imageon 100"},
++ {0x1002, 0x5744, 0, "ATI Imageon 3220"},
++ {0, 0, 0, NULL}
++};
++
++static Bool
++W100Map(KdCardInfo * card, W100CardInfo *w100c)
++{
++ w100c->mem_base = (CARD8 *) KdMapDevice(W100_MEM_BASE,
++ W100_MEM_SIZE);
++
++ if (w100c->mem_base == NULL) {
++ return FALSE;
++ }
++
++ w100c->reg_base = w100c->mem_base + W100_REG_OFFSET;
++
++ /*
++ * It doesn't matter mapping all the area as registers.
++ * There's only difference when HAVE_ASM_MTRR_H is defined.
++ * So, this call is doing nothing.
++ */
++ KdSetMappedMode(W100_MEM_BASE, W100_MEM_SIZE,
++ KD_MAPPED_MODE_REGISTERS);
++
++ return TRUE;
++}
++
++static void
++W100Unmap(KdCardInfo * card, W100CardInfo *w100c)
++{
++ if (w100c->mem_base) {
++ KdResetMappedMode(W100_MEM_BASE, W100_MEM_SIZE,
++ KD_MAPPED_MODE_REGISTERS);
++ KdUnmapDevice((void *) w100c->mem_base, W100_MEM_SIZE);
++ w100c->mem_base = w100c->reg_base = 0;
++ }
++}
++
++static Bool
++W100CardInit(KdCardInfo * card)
++{
++ W100CardInfo *w100c;
++ int i;
++ int ext_mem;
++ int int_mem;
++ Bool initialized = FALSE;
++
++ w100c = xcalloc(sizeof(W100CardInfo), 1);
++ if (w100c == NULL)
++ return FALSE;
++
++ if (!initialized && fbdevInitialize(card, &w100c->fbdev)) {
++ initialized = TRUE;
++ }
++
++ if (!initialized || !W100Map(card, w100c)) {
++ xfree(w100c);
++ return FALSE;
++ }
++ card->driver = w100c;
++
++ for (i = 0; w100_pci_ids[i].name != NULL; i++) {
++ if (w100_pci_ids[i].device == card->attr.deviceID) {
++ w100c->pci_id = &w100_pci_ids[i];
++ break;
++ }
++ }
++ ErrorF("Using ATI card: %s\n", w100c->pci_id->name);
++
++ ext_mem = MMIO_IN32(mmMC_EXT_MEM_LOCATION);
++ int_mem = MMIO_IN32(mmMC_FB_LOCATION);
++
++ w100c->memareas[0].priority = KD_VIDMEM_MAXPRIO;
++ w100c->memareas[0].start = (CARD8 *) ((int_mem & 0xffff) << 8);
++ w100c->memareas[0].size =
++ (((int_mem >> 16) & 0xffff) - (int_mem & 0xffff)) << 8;
++
++
++ w100c->memareas[1].priority = KD_VIDMEM_MINPRIO;
++ w100c->memareas[1].start = (CARD8 *)((ext_mem & 0xffff) << 8);
++ w100c->memareas[1].size =
++ (((ext_mem >> 16) & 0xffff) - (ext_mem & 0xffff)) << 8;
++
++ /* Get some register values */
++ w100c->regs.ENG_CNTL = MMIO_IN32(mmENG_CNTL);
++ w100c->regs.VIDEO_CTRL = MMIO_IN32(mmVIDEO_CTRL);
++ w100c->regs.GRAPHIC_H_DISP = MMIO_IN32(mmGRAPHIC_H_DISP);
++ w100c->regs.GRAPHIC_V_DISP = MMIO_IN32(mmGRAPHIC_V_DISP);
++
++ DBG_IMAGEON(("Internal memory at 0x%08x(0x%08x), size %d bytes\n"
++ "External memory at 0x%08x(0x%08x), size %d bytes\n",
++ w100c->memareas[0].start,
++ W100_CARD2HOST(w100c->memareas[0].start),
++ w100c->memareas[0].size,
++ w100c->memareas[1].start,
++ W100_CARD2HOST(w100c->memareas[1].start),
++ w100c->memareas[1].size));
++
++ /* TODO: Change this to honour the framebuffer initial orientation? */
++ w100c->defaultRandR = RR_Rotate_90;
++ w100c->hwScreen.randr = w100c->defaultRandR;
++ return TRUE;
++}
++
++
++static void
++W100CardFini(KdCardInfo * card)
++{
++ W100CardInfo *w100c = (W100CardInfo *) card->driver;
++
++ W100Unmap(card, w100c);
++ fbdevCardFini(card);
++}
++
++static void
++W100MemSetup(KdScreenInfo *screen)
++{
++ W100CardInfo(screen);
++ W100MemArea *mem;
++ int fb_size, i;
++
++ /* Clear the VideoMemAreas set up by the framebuffer initialization */
++ for (i = 0; i < screen->num_videomem_areas; i++) {
++ xfree(screen->videomem_areas[i]);
++ }
++ xfree(screen->videomem_areas);
++
++ screen->videomem_areas = xcalloc(sizeof(KdVideoMemArea *),
++ W100_MEMAREAS);
++ screen->num_videomem_areas = W100_MEMAREAS;
++
++ fb_size = screen->fb[0].byteStride * screen->height;
++ DBG_IMAGEON(("Framebuffer required size: %d bytes\n", fb_size));
++ /* Try to place the framebuffer in the best VideoMemArea */
++ for (i = 0; i < W100_MEMAREAS; i++) {
++ mem = &w100c->memareas[i];
++ screen->videomem_areas[i] = xcalloc(sizeof(KdVideoMemArea), 1);
++ if (fb_size <= mem->size) {
++ DBG_IMAGEON(("Setting FrameBuffer to w100 address 0x%08x\n",
++ mem->start));
++ screen->fb[0].frameBuffer = W100_CARD2HOST(mem->start);
++ screen->videomem_areas[i]->priority = mem->priority;
++ screen->videomem_areas[i]->base = W100_CARD2HOST(mem->start);
++ screen->videomem_areas[i]->size = mem->size;
++ screen->videomem_areas[i]->available_offset = fb_size;
++ } else {
++ screen->videomem_areas[i]->priority = mem->priority;
++ screen->videomem_areas[i]->base = W100_CARD2HOST(mem->start);
++ screen->videomem_areas[i]->size = mem->size;
++ screen->videomem_areas[i]->available_offset = 0;
++ }
++ DBG_IMAGEON(("New videomem_area(priority:%d, start:0x%08x, size:%d, available_offset:%d\n",
++ screen->videomem_areas[i]->priority,
++ screen->videomem_areas[i]->base,
++ screen->videomem_areas[i]->size,
++ screen->videomem_areas[i]->available_offset));
++ }
++
++ w100c->hwScreen.x = 0;
++ w100c->hwScreen.y = 0;
++ w100c->hwScreen.width = screen->width;
++ w100c->hwScreen.height = screen->height;
++ w100c->hwScreen.bpp = screen->fb[0].bitsPerPixel;
++ w100c->hwScreen.offset = W100_HOST2CARD(screen->fb[0].frameBuffer);
++
++
++ DBG_IMAGEON(("HWScreen(x:%d,y:%d,width:%d,height:%d,bpp:%d,offset:0x%08x"
++ "(0x%08x), randr:%d)\n",
++ w100c->hwScreen.x,
++ w100c->hwScreen.y,
++ w100c->hwScreen.width,
++ w100c->hwScreen.height,
++ w100c->hwScreen.bpp,
++ w100c->hwScreen.offset,
++ screen->fb[0].frameBuffer,
++ w100c->hwScreen.randr));
++}
++
++static Bool
++W100ScreenInit(KdScreenInfo * screen)
++{
++ W100ScreenInfo *w100s;
++ W100CardInfo(screen);
++ Bool success = FALSE;
++
++ w100s = xcalloc(sizeof(W100ScreenInfo), 1);
++ if (w100s == NULL)
++ return FALSE;
++
++ w100s->w100c = w100c;
++ w100s->screen = screen;
++ screen->driver = w100s;
++
++ if (screen->fb[0].depth == 0) {
++ screen->fb[0].depth = 16;
++ }
++
++ success = fbdevScreenInitialize(screen, &w100s->fbdev);
++
++ if (!success) {
++ screen->driver = NULL;
++ xfree(w100s);
++ return FALSE;
++ }
++
++ W100MemSetup(screen);
++
++ return TRUE;
++}
++
++static void
++W100ScreenFini(KdScreenInfo * screen)
++{
++ W100ScreenInfo *w100s = (W100ScreenInfo *) screen->driver;
++ W100CardInfo *w100c = screen->card->driver;
++
++ fbdevScreenFini(screen);
++ xfree(w100s);
++ screen->driver = 0;
++}
++
++static Bool
++W100InitScreen(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++
++ W100InitVideo(pScreen);
++ return fbdevInitScreen(pScreen);
++}
++
++#ifdef RANDR
++
++static Bool W100RandRSetConfig(ScreenPtr pScreen,
++ Rotation randr,
++ int rate,
++ RRScreenSizePtr pSize)
++{
++ KdScreenPriv(pScreen);
++ KdScreenInfo *screen = pScreenPriv->screen;
++ W100CardInfo(pScreenPriv);
++ Bool screenEnabled = pScreenPriv->enabled;
++ KdMouseMatrix m;
++
++ DBG_IMAGEON(("W100RandRSetConfig(randr:%d,pSize:%dx%d)\n",
++ randr, pSize->width, pSize->height));
++
++
++ if (screenEnabled) {
++ KdDisableScreen(pScreen);
++ }
++ KdOffscreenSwapOut(screen->pScreen);
++
++ if (randr & (RR_Rotate_0|RR_Rotate_180)) {
++ pScreen->width = w100c->fbdev.var.xres;
++ pScreen->height = w100c->fbdev.var.yres;
++ pScreen->mmWidth = screen->width_mm;
++ pScreen->mmHeight = screen->height_mm;
++ } else {
++ pScreen->width = w100c->fbdev.var.yres;
++ pScreen->height = w100c->fbdev.var.xres;
++ pScreen->mmWidth = screen->height_mm;
++ pScreen->mmHeight = screen->width_mm;
++ }
++
++ KdComputeMouseMatrix(&m, randr, screen->width, screen->height);
++ KdSetMouseMatrix(&m);
++
++ screen->width = pScreen->width;
++ screen->height = pScreen->height;
++ screen->fb[0].byteStride = screen->width * screen->fb[0].bitsPerPixel / 8;
++
++ (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap(pScreen),
++ pScreen->width,
++ pScreen->height,
++ screen->fb[0].depth,
++ screen->fb[0].bitsPerPixel,
++ screen->fb[0].byteStride,
++ screen->fb[0].frameBuffer);
++
++
++ w100c->hwScreen.randr &= ~RR_Rotate_All;
++ switch (randr & RR_Rotate_All) {
++ case RR_Rotate_0:
++ switch (w100c->defaultRandR) {
++ case RR_Rotate_0:
++ w100c->hwScreen.randr |= RR_Rotate_0;
++ break;
++ case RR_Rotate_90:
++ w100c->hwScreen.randr |= RR_Rotate_90;
++ break;
++ case RR_Rotate_180:
++ w100c->hwScreen.randr |= RR_Rotate_180;
++ break;
++ case RR_Rotate_270:
++ w100c->hwScreen.randr |= RR_Rotate_270;
++ break;
++ }
++ break;
++ case RR_Rotate_90:
++ switch (w100c->defaultRandR) {
++ case RR_Rotate_0:
++ w100c->hwScreen.randr |= RR_Rotate_90;
++ break;
++ case RR_Rotate_90:
++ w100c->hwScreen.randr |= RR_Rotate_0;
++ break;
++ case RR_Rotate_180:
++ w100c->hwScreen.randr |= RR_Rotate_270;
++ break;
++ case RR_Rotate_270:
++ w100c->hwScreen.randr |= RR_Rotate_180;
++ break;
++ }
++ break;
++ case RR_Rotate_180:
++ switch (w100c->defaultRandR) {
++ case RR_Rotate_0:
++ w100c->hwScreen.randr |= RR_Rotate_180;
++ break;
++ case RR_Rotate_90:
++ w100c->hwScree%s
>>> DIFF TRUNCATED @ 16K
More information about the Openembedded-commits
mailing list