[oe-commits] org.oe.dev xserver-kdrive-imageon : New version 1.2.0

sirfred commit openembedded-commits at lists.openembedded.org
Sun Jun 17 17:03:56 UTC 2007


xserver-kdrive-imageon : New version 1.2.0

Author: sirfred at openembedded.org
Branch: org.openembedded.dev
Revision: c74d0df46c5fc3483ce91fcfa47b6b898840af09
ViewMTN: http://monotone.openembedded.org/revision.psp?id=c74d0df46c5fc3483ce91fcfa47b6b898840af09
Files:
1
packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch
packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb
Diffs:

#
# mt diff -r96278dc857fae2c7f1411e7c48b5ddb23c0d2822 -rc74d0df46c5fc3483ce91fcfa47b6b898840af09
#
# 
# 
# add_file "packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch"
#  content [a4aa3d492e612c59eb6e523a074dbdc47a4f6589]
# 
# add_file "packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb"
#  content [9dccb60e157f1a3ff2540d6f5389735882719979]
# 
============================================================
--- packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch	a4aa3d492e612c59eb6e523a074dbdc47a4f6589
+++ packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch	a4aa3d492e612c59eb6e523a074dbdc47a4f6589
@@ -0,0 +1,9079 @@
+# Author: Manuel Teira <manuel.teira at telefonica.net> (sirfred in #oe)
+# Description: New driver for the Imageon ATI Card. Implementing:
+# -Hardware solid fills
+# -Hardware bitblt
+# -Hardware cursors
+# -XV Extension
+# -Internal and External Imageon offscreen memory support
+# -Hardware RandR rotation (without using a shadow framebuffer)
+# -Support for RandR mode changing
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+Index: xorg-server-1.2.0/configure.ac
+===================================================================
+--- xorg-server-1.2.0.orig/configure.ac	2007-06-17 10:49:00.000000000 +0200
++++ xorg-server-1.2.0/configure.ac	2007-06-17 10:49:02.000000000 +0200
+@@ -444,6 +444,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)
+@@ -1581,6 +1582,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])
+@@ -1806,6 +1812,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
+Index: xorg-server-1.2.0/hw/kdrive/Makefile.am
+===================================================================
+--- xorg-server-1.2.0.orig/hw/kdrive/Makefile.am	2007-06-17 10:49:00.000000000 +0200
++++ xorg-server-1.2.0/hw/kdrive/Makefile.am	2007-06-17 11:03:40.000000000 +0200
+@@ -1,24 +1,15 @@
+-if KDRIVEVESA
+-VESA_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
+-               smi via
+-endif
+-
+ if KDRIVEFBDEV
+-FBDEV_SUBDIRS = fbdev epson
+-endif
+-
+-if XSDLSERVER
+-XSDL_SUBDIRS = sdl
+-endif
+-
+-if XEPHYR
+-XEPHYR_SUBDIRS = ephyr
++FBDEV_SUBDIRS = fbdev
+ endif
+ 
+ if KDRIVELINUX
+ LINUX_SUBDIRS = linux
+ endif
+ 
++if KDRIVEIMAGEON
++IMAGEON_SUBDIRS = imageon
++endif
++
+ SUBDIRS =			\
+ 	src			\
+ 	$(LINUX_SUBDIRS)	\
+@@ -26,7 +17,7 @@
+ 	$(FBDEV_SUBDIRS)	\
+ 	$(VESA_SUBDIRS)		\
+ 	$(XEPHYR_SUBDIRS)       \
+-	fake
++        $(IMAGEON_SUBDIRS)
+ 
+ DIST_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
+                smi via fbdev sdl ephyr src linux fake sis300
+Index: xorg-server-1.2.0/hw/kdrive/imageon/Makefile.am
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/Makefile.am	2007-06-17 10:49:02.000000000 +0200
+@@ -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) 
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon.c	2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,606 @@
++/*
++ * 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"
++#include "imageon_support.h"
++
++W100CardEntry w100_cards[] = {
++    {0x1002, 0x5644, 0,             "ATI Imageon 3200"},
++    {0x1002, 0x5741, W100XVSupport, "ATI Imageon 100"},
++    {0x1002, 0x5744, 0,             "ATI Imageon 3220"},
++    {0,      0,      0,             NULL}
++};
++
++W100ModeSpec w100_modes[] = {
++    {800, 600, 16, W100_EXTMEM, FALSE},
++    {640, 480, 16, W100_EXTMEM, FALSE},
++    {320, 240, 16, W100_INTMEM, FALSE},
++    {  0,   0,  0,           0, FALSE}    
++};
++
++W100StartupInfo w100StartupInfo;
++
++extern void (*tslib_transform_coords)(long *x, long *y, void *closure);
++extern void *tslib_transform_closure;
++
++static void
++W100Startup(W100CardInfo *w100c)
++{
++    int i;
++    DBG_IMAGEON(("--W100Startup\n"));
++    W100ModeSpec *modes;
++    /* Take the current graphics mode */
++    if (!W100GetFbMode(w100c, &w100StartupInfo.mode)) {
++        ErrorF("(E) Unable to get current mode\n");
++    }
++    w100StartupInfo.randr = W100GetRotation(w100c);
++    w100StartupInfo.portrait = w100StartupInfo.mode.width < w100StartupInfo.mode.height;
++
++    /* Test the valid modes  */
++    for (modes = w100_modes; modes->width; modes++) {
++        modes->supported = W100CheckFbMode(w100c, modes);
++    }
++
++    DBG_IMAGEON(("Startup Mode: %dx%d@%d, rot: %d, portrait: %s\n", 
++                 w100StartupInfo.mode.width,
++                 w100StartupInfo.mode.height,
++                 w100StartupInfo.mode.bpp,
++                 w100StartupInfo.randr,
++                 w100StartupInfo.portrait ? "Yes" : "No"));
++
++    /* Tell the kernel to never switch off external memory  */
++    W100SysFsSet(w100c, W100_SYSFS_BASE "extmem", "1");
++
++    /* Disable framebuffer accel */
++    W100SysFsSet(w100c, W100_SYSFS_BASE "accel", "0");
++
++    /* Enable fastsysclk */
++    W100SysFsSet(w100c, W100_SYSFS_BASE "fastpllclk", "1");
++
++}
++
++
++static Bool
++W100Map(KdCardInfo * card, W100CardInfo *w100c)
++{
++    DBG_IMAGEON(("--W100Map\n"));
++    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)
++{
++    DBG_IMAGEON(("--W100Unmap\n"));
++    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 void W100MemSetup(W100CardInfo *w100c)
++{
++    int reg_value;
++    int int_start, int_size;
++    int ext_start, ext_size;
++    int i;
++    DBG_IMAGEON(("--W100MemSetup\n"));
++
++    for (i = 0; i < w100c->num_memareas; i++) {
++        xfree(w100c->memareas[i]);
++    }
++    xfree(w100c->memareas);
++
++    reg_value = MMIO_IN32(mmMC_FB_LOCATION);
++    int_start = (reg_value & 0xffff) << 8;
++    int_size =  (((reg_value >> 16) & 0xffff) - (reg_value & 0xffff)) << 8;
++    DBG_IMAGEON(("(I) MC_FB_LOCATION: 0x%08x. Start: 0x%08x, size: %d\n",
++                 reg_value, int_start, int_size));
++
++    reg_value = MMIO_IN32(mmMC_EXT_MEM_LOCATION);
++    ext_start = (reg_value & 0xffff) << 8;
++    ext_size =  (((reg_value >> 16) & 0xffff) - (reg_value & 0xffff)) << 8;
++    DBG_IMAGEON(("(I) MC_EXT_MEM_LOCATION: 0x%08x. Start: 0x%08x, size: %d\n",
++                 reg_value, ext_start, ext_size));
++
++    w100c->num_memareas = (ext_size > 0) ? 2 : 1;
++    w100c->memareas = xcalloc(sizeof(W100MemArea *), w100c->num_memareas);
++
++    w100c->memareas[W100_INTMEM] = xcalloc(sizeof(W100MemArea), 1);
++    w100c->memareas[W100_INTMEM]->priority = KD_VIDMEM_MAXPRIO;
++    w100c->memareas[W100_INTMEM]->start = (CARD8 *) int_start;
++    w100c->memareas[W100_INTMEM]->size = int_size;
++
++    if (w100c->num_memareas == 2) {
++        w100c->memareas[W100_EXTMEM] = xcalloc(sizeof(W100MemArea), 1);
++        w100c->memareas[W100_EXTMEM]->priority = KD_VIDMEM_MINPRIO;
++        w100c->memareas[W100_EXTMEM]->start = (CARD8 *) ext_start;
++        w100c->memareas[W100_EXTMEM]->size = ext_size;
++    }
++
++    for (i = 0; i < w100c->num_memareas; i++) {
++        DBG_IMAGEON(("(I) Memory mapped at 0x%08x(0x%08x), size %d bytes\n",
++                     W100_CARD2HOST(w100c->memareas[i]->start),
++                     w100c->memareas[i]->start,
++                     w100c->memareas[i]->size));
++    }
++
++}
++
++static Bool
++W100CardInit(KdCardInfo * card)
++{
++    W100CardInfo *w100c;
++
++    W100CardEntry *model = &w100_cards[0];
++    static Bool initialized = FALSE;
++
++    DBG_IMAGEON(("--W100CardInit\n"));
++
++    w100c = xcalloc(sizeof(W100CardInfo), 1);
++    if (w100c == NULL)
++        return FALSE;
++
++    if (!fbdevInitialize(card, &w100c->fbdev)) {
++        return FALSE;
++    }
++
++    if (!W100Map(card, w100c)) {
++        xfree(w100c);
++        return FALSE;
++    }
++    card->driver = w100c;
++
++    while (model->name) {
++        if (model->device == card->attr.deviceID) {
++            w100c->card_id = model;
++            break;
++        }
++        model++;
++    }
++
++    ErrorF("(I) Using ATI card: %s\n", w100c->card_id->name);
++
++    if (!initialized) {
++        initialized = TRUE;
++        W100Startup(w100c);
++    }
++
++    w100c->hw_window.mode  = W100GetModeSpec(w100c, &w100StartupInfo.mode);
++    w100c->hw_window.randr = w100StartupInfo.randr;
++
++    tslib_transform_closure = w100c;
++    tslib_transform_coords = W100TransformTsLibCoordinates;
++    return TRUE;
++}
++
++
++static void
++W100CardFini(KdCardInfo * card)
++{
++    W100CardInfo *w100c = (W100CardInfo *) card->driver;
++
++    DBG_IMAGEON(("--W100CardFini\n"));
++    W100Unmap(card, w100c);
++    fbdevCardFini(card);
++}
++
++static void
++W100Setup(KdScreenInfo *screen)
++{
++    W100CardInfo(screen);
++    W100MemArea *mem;
++    KdMouseMatrix m;
++    int fb_size, i;
++
++    DBG_IMAGEON(("--W100Setup\n"));
++
++    /* Adjust mode */
++    w100c->hw_window.width = screen->width;
++    w100c->hw_window.height = screen->height;
++    w100c->hw_window.bpp =  screen->fb[0].bitsPerPixel;
++    W100SetupGraphicWindow(w100c);
++
++    /* 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);
++    w100c->regs.DISP_DEBUG2    = MMIO_IN32(mmDISP_DEBUG2);
++
++    W100MemSetup(w100c);
++
++    /* 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 *), 
++                                     w100c->num_memareas);
++    screen->num_videomem_areas = w100c->num_memareas;
++
++    screen->fb[0].byteStride = screen->width * screen->fb[0].bitsPerPixel / 8;
++    fb_size = screen->fb[0].byteStride * screen->height;
++
++    DBG_IMAGEON(("(I) Framebuffer required size: %d bytes\n", fb_size));
++    
++    for (i = 0; i < w100c->num_memareas; i++) {
++        mem = w100c->memareas[i];
++        screen->videomem_areas[i] = xcalloc(sizeof(KdVideoMemArea), 1);
++        screen->videomem_areas[i]->priority = mem->priority;
++        screen->videomem_areas[i]->base = W100_CARD2HOST(mem->start);
++        screen->videomem_areas[i]->size = mem->size;
++        if (w100c->hw_window.mode->fbpool == i) {
++            DBG_IMAGEON(("(I) FrameBuffer in w100 memzone 0x%08x(0x%08x)\n", 
++                         W100_CARD2HOST(mem->start), mem->start));
++            screen->videomem_areas[i]->available_offset = fb_size;
++            screen->fb[0].frameBuffer = W100_CARD2HOST(mem->start);
++        } else {
++            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->hw_window.offset = W100_HOST2CARD(screen->fb[0].frameBuffer);
++
++    KdComputeMouseMatrix(&m, screen->randr, 
++                         w100StartupInfo.portrait ? 
++                         W100_MIN(screen->width, screen->height) :
++                         W100_MAX(screen->width, screen->height),
++                         w100StartupInfo.portrait ? 
++                         W100_MAX(screen->width, screen->height) :
++                         W100_MIN(screen->width, screen->height));
++
++    KdSetMouseMatrix(&m);
++
++    DBG_IMAGEON(("Window(width:%d,height:%d,bpp:%d,offset:0x%08x"
++                 "(0x%08x), randr:%d)\n",
++                 w100c->hw_window.width,
++                 w100c->hw_window.height,
++                 w100c->hw_window.bpp,
++                 w100c->hw_window.offset,
++                 screen->fb[0].frameBuffer,
++                 w100c->hw_window.%s
>>> DIFF TRUNCATED @ 16K






More information about the Openembedded-commits mailing list