From e3dacfd0d5adc3f38769380efde0d60a949b6c2d Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Mon, 1 Oct 2007 19:36:30 +0000 Subject: mtd-utils-tests: add package It may make sense to add this to the main package, but because so few people will use it I did not want to risk breakage at this time. --- packages/mtd/mtd-utils-tests_1.0.0+git.bb | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 packages/mtd/mtd-utils-tests_1.0.0+git.bb (limited to 'packages') diff --git a/packages/mtd/mtd-utils-tests_1.0.0+git.bb b/packages/mtd/mtd-utils-tests_1.0.0+git.bb new file mode 100644 index 0000000000..b5240009a7 --- /dev/null +++ b/packages/mtd/mtd-utils-tests_1.0.0+git.bb @@ -0,0 +1,59 @@ +require mtd-utils_1.0.0+git.bb + +# this can probably be integrated into the main mtd-utils package +# but I did not want to risk breakage -- but would be glad to +# integrate them if that is best -- cbrake + +SRC_URI = "git://git.infradead.org/mtd-utils.git;protocol=git;tag=${TAG}" + +PR = "r1" + +S = "${WORKDIR}/git/tests/fs-tests" + +FILES_${PN} = "${datadir}/mtd-utils" + +do_compile () { + make || die "Make failed" +} + +do_stage () { +} + +INHIBIT_PACKAGE_STRIP = "1" + +mtd_utils_tests = " \ + help_all.sh \ + run_all.sh \ + integrity/integck \ + simple/ftrunc \ + simple/test_1 \ + simple/test_2 \ + stress/stress00.sh \ + stress/stress01.sh \ + stress/atoms/fwrite00 \ + stress/atoms/gcd_hupper \ + stress/atoms/pdfrun \ + stress/atoms/rmdir00 \ + stress/atoms/rndrm00 \ + stress/atoms/rndrm99 \ + stress/atoms/rndwrite00 \ + stress/atoms/stress_1 \ + stress/atoms/stress_2 \ + stress/atoms/stress_3 \ + utils/free_space \ + utils/fstest_monitor \ + " + +do_install () { + install -d ${D}${datadir}/mtd-utils/tests + install -d ${D}${datadir}/mtd-utils/tests/integrity + install -d ${D}${datadir}/mtd-utils/tests/simple + install -d ${D}${datadir}/mtd-utils/tests/stress + install -d ${D}${datadir}/mtd-utils/tests/stress/atoms + install -d ${D}${datadir}/mtd-utils/tests/utils + for app in ${mtd_utils_tests}; do + install -m 0755 $app ${D}${datadir}/mtd-utils/tests/$app + done +} + + -- cgit v1.2.3 From b55c7ef04bddb57bbd68446ec0b54f6d0bb65a95 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 06:38:56 +0000 Subject: midori: add 0.0.8 --- packages/gtk-webcore/midori/.mtn2git_empty | 0 packages/gtk-webcore/midori/midori.desktop | 8 -------- packages/gtk-webcore/midori_0.0.6.bb | 18 ------------------ packages/gtk-webcore/midori_0.0.8.bb | 11 +++++++++++ 4 files changed, 11 insertions(+), 26 deletions(-) delete mode 100644 packages/gtk-webcore/midori/.mtn2git_empty delete mode 100644 packages/gtk-webcore/midori/midori.desktop delete mode 100644 packages/gtk-webcore/midori_0.0.6.bb create mode 100644 packages/gtk-webcore/midori_0.0.8.bb (limited to 'packages') diff --git a/packages/gtk-webcore/midori/.mtn2git_empty b/packages/gtk-webcore/midori/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gtk-webcore/midori/midori.desktop b/packages/gtk-webcore/midori/midori.desktop deleted file mode 100644 index 683b1a343e..0000000000 --- a/packages/gtk-webcore/midori/midori.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Midori -Comment=Webkit based browser -Exec=midori -Terminal=false -Type=Application -Categories=Application diff --git a/packages/gtk-webcore/midori_0.0.6.bb b/packages/gtk-webcore/midori_0.0.6.bb deleted file mode 100644 index ed0213964f..0000000000 --- a/packages/gtk-webcore/midori_0.0.6.bb +++ /dev/null @@ -1,18 +0,0 @@ -DESCRIPTION = "Midori is a lightweight web browser." -LICENSE = "GPLv2" - -DEPENDS = "webkit-gtk libsexy" - -inherit autotools pkgconfig - -SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz \ - file://midori.desktop" - -do_install_append() { - if [ -f ${WORKDIR}/midori.desktop ]; then - install -d ${D}${datadir}/applications - install -m 0644 ${WORKDIR}/midori.desktop ${D}${datadir}/applications - fi - -} - diff --git a/packages/gtk-webcore/midori_0.0.8.bb b/packages/gtk-webcore/midori_0.0.8.bb new file mode 100644 index 0000000000..23d0179375 --- /dev/null +++ b/packages/gtk-webcore/midori_0.0.8.bb @@ -0,0 +1,11 @@ +DESCRIPTION = "Midori is a lightweight web browser." +LICENSE = "GPLv2" + +DEPENDS = "webkit-gtk libsexy" + +inherit autotools pkgconfig + +SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz \ + " + + -- cgit v1.2.3 From 83eaea652d877c928a59da22a8c7d6fc8ef7950d Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 08:20:25 +0000 Subject: libgcrypt/libgcrypt_1.2.3.bb : remove custom do_stage as its not needed and doesnt actually stage enough. --- packages/libgcrypt/libgcrypt_1.2.3.bb | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'packages') diff --git a/packages/libgcrypt/libgcrypt_1.2.3.bb b/packages/libgcrypt/libgcrypt_1.2.3.bb index 3cca30a6bb..fb4631fd57 100644 --- a/packages/libgcrypt/libgcrypt_1.2.3.bb +++ b/packages/libgcrypt/libgcrypt_1.2.3.bb @@ -17,14 +17,5 @@ EXTRA_OECONF = "--without-pth --disable-asm --with-capabilities" ARM_INSTRUCTION_SET = "arm" do_stage() { - oe_libinstall -so -C src libgcrypt ${STAGING_LIBDIR} - oe_libinstall -so -C src libgcrypt-pthread ${STAGING_LIBDIR} - install -m 0755 src/libgcrypt-config ${STAGING_BINDIR_CROSS}/ - - install -d ${STAGING_INCDIR}/ - for X in gcrypt.h gcrypt-module.h - do - install -m 0644 src/${X} ${STAGING_INCDIR}/${X} - done - + autotools_stage_all } -- cgit v1.2.3 From 80849d56784efbaf1764f05f1ca6a155d04f3b2b Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 08:28:47 +0000 Subject: libgcrypt/libgcrypt_1.2.3.bb : PR bump for last change --- packages/libgcrypt/libgcrypt_1.2.3.bb | 1 + 1 file changed, 1 insertion(+) (limited to 'packages') diff --git a/packages/libgcrypt/libgcrypt_1.2.3.bb b/packages/libgcrypt/libgcrypt_1.2.3.bb index fb4631fd57..74205da673 100644 --- a/packages/libgcrypt/libgcrypt_1.2.3.bb +++ b/packages/libgcrypt/libgcrypt_1.2.3.bb @@ -3,6 +3,7 @@ SECTION = "libs" PRIORITY = "optional" LICENSE = "GPL LGPL FDL" DEPENDS = "libgpg-error" +PR = "r1" # move libgcrypt-config into -dev package FILES_${PN} = "${libdir}/lib*.so.*" -- cgit v1.2.3 From a5cc2c34da8c269c29c2ed34409650d0486118a1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 08:36:46 +0000 Subject: atk: remove def_pref from 1.19.3 --- packages/atk/atk_1.19.3.bb | 2 -- 1 file changed, 2 deletions(-) (limited to 'packages') diff --git a/packages/atk/atk_1.19.3.bb b/packages/atk/atk_1.19.3.bb index beef4ce97a..52136682d7 100644 --- a/packages/atk/atk_1.19.3.bb +++ b/packages/atk/atk_1.19.3.bb @@ -1,7 +1,5 @@ require atk.inc -DEFAULT_PREFERENCE = "-1" - SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/atk/1.19/atk-${PV}.tar.bz2" do_stage () { -- cgit v1.2.3 From 4218198e3242ca560292ce7428f14e59dba0e5e0 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 09:15:33 +0000 Subject: openmoko2/openmoko-dates2_svn.bb : version bump to latest for thomas --- packages/openmoko2/openmoko-dates2_svn.bb | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'packages') diff --git a/packages/openmoko2/openmoko-dates2_svn.bb b/packages/openmoko2/openmoko-dates2_svn.bb index 9650a20b0d..14a71d423a 100644 --- a/packages/openmoko2/openmoko-dates2_svn.bb +++ b/packages/openmoko2/openmoko-dates2_svn.bb @@ -10,3 +10,8 @@ SRC_URI = "svn://svn.o-hand.com/repos/dates/branches;module=jana;proto=http" S = "${WORKDIR}/jana/" EXTRA_OECONF = "--with-frontend=openmoko" + +do_configure_prepend() { + touch gtk-doc.make +} + -- cgit v1.2.3 From 704460df23bc662a814545a336e96abcdb2acdcb Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 09:31:48 +0000 Subject: gtk-2.10.inc: add hack for maemo software --- packages/gtk+/gtk-2.10.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'packages') diff --git a/packages/gtk+/gtk-2.10.inc b/packages/gtk+/gtk-2.10.inc index c3bbb0232a..3fa5d22a71 100644 --- a/packages/gtk+/gtk-2.10.inc +++ b/packages/gtk+/gtk-2.10.inc @@ -52,7 +52,8 @@ do_stage () { mkdir -p ${STAGING_LIBDIR}/gtk-2.0/include install -m 0644 gdk/gdkconfig.h ${STAGING_LIBDIR}/gtk-2.0/include/gdkconfig.h - + # Copy over all headers, since the maemo stuff needs access to the private api. *sigh* + cp gtk/*.h ${STAGING_INCDIR}/gtk-2.0/gtk/ install -m 0644 m4macros/gtk-2.0.m4 ${STAGING_DATADIR}/aclocal/ } -- cgit v1.2.3 From 206c0e46891163d72b02bc9365ba1770c03ff942 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 09:40:11 +0000 Subject: libhildonfm: add 1.9.41 works against a stock gtk+! --- packages/maemo3/libhildonfm/.mtn2git_empty | 0 .../libhildonfm/hildonfm-ifdef-maemogtk.diff | 132 +++++++++++++++++++++ packages/maemo3/libhildonfm_1.9.41.bb | 29 +++++ 3 files changed, 161 insertions(+) create mode 100644 packages/maemo3/libhildonfm/.mtn2git_empty create mode 100644 packages/maemo3/libhildonfm/hildonfm-ifdef-maemogtk.diff create mode 100644 packages/maemo3/libhildonfm_1.9.41.bb (limited to 'packages') diff --git a/packages/maemo3/libhildonfm/.mtn2git_empty b/packages/maemo3/libhildonfm/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/maemo3/libhildonfm/hildonfm-ifdef-maemogtk.diff b/packages/maemo3/libhildonfm/hildonfm-ifdef-maemogtk.diff new file mode 100644 index 0000000000..8d91e1dd65 --- /dev/null +++ b/packages/maemo3/libhildonfm/hildonfm-ifdef-maemogtk.diff @@ -0,0 +1,132 @@ +--- /tmp/hildon-file-selection.c 2007-10-02 10:08:17.000000000 +0200 ++++ 1_1.9.41/hildon-fm/hildon-file-selection.c 2007-10-02 11:26:58.292045000 +0200 +@@ -2036,6 +2036,7 @@ + g_object_set(cell, "text", buffer, "sensitive", sensitive, NULL); + } + ++#ifdef USE_MAEMO_GTK + static void hildon_file_selection_navigation_pane_context(GtkWidget * + widget, + gpointer data) +@@ -2052,6 +2053,7 @@ + ULOG_DEBUG(__FUNCTION__); + g_signal_emit(data, signal_content_pane_context_menu, 0); + } ++#endif /* USE_MAEMO_GTK */ + + static gboolean hildon_file_selection_on_content_pane_key(GtkWidget * + widget, +@@ -2200,6 +2202,7 @@ + } + } + ++#ifdef USE_MAEMO_GTK + static gboolean + tap_and_hold_query (gpointer self, guint signal_id) + { +@@ -2225,6 +2228,8 @@ + return tap_and_hold_query (self, signal_navigation_pane_context_menu); + } + ++#endif /* USE_MAEMO_GTK */ ++ + static void hildon_file_selection_create_thumbnail_view(HildonFileSelection + * self) + { +@@ -2277,7 +2282,7 @@ + g_signal_connect_object(tree, "key-press-event", + G_CALLBACK(hildon_file_selection_on_content_pane_key), + self, 0); +- ++#ifdef USE_MAEMO_GTK + gtk_widget_tap_and_hold_setup(GTK_WIDGET(tree), NULL, NULL, + GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); + g_signal_connect_object (tree, "tap-and-hold-query", +@@ -2286,6 +2291,7 @@ + g_signal_connect_object(tree, "tap-and-hold", + G_CALLBACK + (hildon_file_selection_content_pane_context), self, 0); ++#endif /* USE_MAEMO_GTK */ + + g_signal_connect_object(tree, "notify::has-focus", + G_CALLBACK(content_pane_focus), self, 0); +@@ -2397,7 +2403,7 @@ + (selection, "changed", + G_CALLBACK (hildon_file_selection_content_pane_selection_changed), + self, 0); +- ++#ifdef USE_MAEMO_GTK + gtk_widget_tap_and_hold_setup(GTK_WIDGET(tree), NULL, NULL, + GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); + g_signal_connect_object (tree, "tap-and-hold-query", +@@ -2406,7 +2412,7 @@ + g_signal_connect_object(tree, "tap-and-hold", + G_CALLBACK + (hildon_file_selection_content_pane_context), self, 0); +- ++#endif /* USE_MAEMO_GTK */ + g_signal_connect_object(tree, "key-press-event", + G_CALLBACK(hildon_file_selection_on_content_pane_key), + self, 0); +@@ -2492,7 +2498,7 @@ + g_signal_connect_object(selection, "changed", + G_CALLBACK(hildon_file_selection_selection_changed), + self, 0); +- ++#ifdef USE_MAEMO_GTK + gtk_widget_tap_and_hold_setup(GTK_WIDGET(self->priv->dir_tree), NULL, + NULL, GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); + g_signal_connect_object (self->priv->dir_tree, "tap-and-hold-query", +@@ -2502,7 +2508,7 @@ + G_CALLBACK + (hildon_file_selection_navigation_pane_context), + self, 0); +- ++#endif /* USE_MAEMO_GTK */ + g_signal_connect_object(self->priv->dir_tree, "key-press-event", + G_CALLBACK + (hildon_file_selection_on_navigation_pane_key), self, 0); +--- /tmp/hildon-file-chooser-dialog.c 2007-10-02 10:14:05.000000000 +0200 ++++ 1_1.9.41/hildon-fm/hildon-file-chooser-dialog.c 2007-10-02 11:33:43.132045000 +0200 +@@ -191,7 +191,7 @@ + + return (first_digit << 4) | second_digit; + } +- ++#ifdef USE_MAEMO_GTK + static void chooser_entry_invalid_input_cb (GtkEntry *entry, + GtkInvalidInputType inv_type, + gpointer user_data) +@@ -202,7 +202,7 @@ + HCS("ckdg_ib_maximum_characters_reached")); + } + } +- ++#endif /* USE_MAEMO_GTK */ + static gchar * + g_unescape_uri_string (const char *escaped, + int len, +@@ -1837,8 +1837,9 @@ + G_PARAM_READWRITE); + g_object_class_install_property(gobject_class, PROP_SELECTION_MODE, pspec); + +- ++#ifdef USE_MAEMO_GTK + hildon_gtk_file_chooser_install_properties(gobject_class); ++#endif + } + + static void hildon_file_chooser_dialog_sort_changed(GtkWidget * item, +@@ -1975,10 +1976,10 @@ + g_signal_connect( priv->entry_name, "changed", + G_CALLBACK( hildon_file_chooser_entry_changed ), + self ); +- ++#ifdef USE_MAEMO_GTK + g_signal_connect(priv->entry_name, "invalid-input", + G_CALLBACK(chooser_entry_invalid_input_cb), self); +- ++#endif /* USE_MAEMO_GTK */ + priv->hbox_location = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); + priv->hbox_items = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); + priv->image_location = gtk_image_new(); diff --git a/packages/maemo3/libhildonfm_1.9.41.bb b/packages/maemo3/libhildonfm_1.9.41.bb new file mode 100644 index 0000000000..de1bb3d9e3 --- /dev/null +++ b/packages/maemo3/libhildonfm_1.9.41.bb @@ -0,0 +1,29 @@ +LICENSE = "LGPL" +DESCRIPTION = "Nokia hildon filemanager library" + +DEPENDS = "hildon-thumbnail mce-dev libhildonmime osso-gwconnect hildon-libs osso-thumbnail" + +PR = "r0" + +SRC_URI = "http://repository.maemo.org/pool/sardine/main/source/libh/libhildonfm/libhildonfm_${PV}.tar.gz \ + file://hildonfm-ifdef-maemogtk.diff;patch=1 \ + " + +inherit autotools pkgconfig lib_package + +S = "${WORKDIR}/1_${PV}" + +do_configure_prepend() { + # remove Werror from OSSO_CFLAGS + sed -i s:-Werror::g configure.ac + touch gtk-doc.make +} + + +PARALLEL_MAKE = "" + +do_stage() { + autotools_stage_all +} + + -- cgit v1.2.3 From 60ec12d7d56354a2e3367a3f867bf11c02163000 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 09:45:43 +0000 Subject: libhildonhelp: correct DEPENDS --- packages/maemo3/libhildonhelp_1.9.1.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'packages') diff --git a/packages/maemo3/libhildonhelp_1.9.1.bb b/packages/maemo3/libhildonhelp_1.9.1.bb index b04efe2660..43d4c15d2e 100644 --- a/packages/maemo3/libhildonhelp_1.9.1.bb +++ b/packages/maemo3/libhildonhelp_1.9.1.bb @@ -1,7 +1,7 @@ LICENSE = "LGPL" DESCRIPTION = "Nokia hildon help library" -DEPENDS = "libart libpng jpeg libxml2 gtkhtml-3.8 libosso" +DEPENDS = "libart-lgpl libpng jpeg libxml2 gtkhtml-3.8 libosso" PR = "r0" -- cgit v1.2.3 From 13deecd844254126961b034214a1f1ce77026c6c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 10:24:01 +0000 Subject: fontconfig: stage nokia device table header --- packages/fontconfig/fontconfig_2.4.1.bb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'packages') diff --git a/packages/fontconfig/fontconfig_2.4.1.bb b/packages/fontconfig/fontconfig_2.4.1.bb index 098939324a..cdfc28fb38 100644 --- a/packages/fontconfig/fontconfig_2.4.1.bb +++ b/packages/fontconfig/fontconfig_2.4.1.bb @@ -3,9 +3,9 @@ LICENSE = "BSD" DESCRIPTION = "A library for configuring and customizing font access." DEPENDS = "expat freetype freetype-native zlib" -SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz" - -PR = "r0" +SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \ + https://stage.maemo.org/svn/maemo/projects/haf/trunk/fontconfig/device_symbols.h" +PR = "r1" PACKAGES =+ "fontconfig-utils-dbg fontconfig-utils " FILES_fontconfig-utils-dbg = "${bindir}/*.dbg" @@ -39,6 +39,7 @@ python do_unpack () { } do_stage () { + cp ${WORKDIR}/device_symbols.h ${S}/fontconfig/ oe_libinstall -so -a -C src libfontconfig ${STAGING_LIBDIR} install -d ${STAGING_INCDIR}/fontconfig for i in ${S}/fontconfig/*.h; do install -m 0644 $i ${STAGING_INCDIR}/fontconfig/; done -- cgit v1.2.3 From 7c5486f8849c4c3a22b9fa6b282ec085c823af79 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 10:28:31 +0000 Subject: hildon-1: update PV --- packages/maemo3/hildon-1_svn.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'packages') diff --git a/packages/maemo3/hildon-1_svn.bb b/packages/maemo3/hildon-1_svn.bb index c5c01792ca..5105472989 100644 --- a/packages/maemo3/hildon-1_svn.bb +++ b/packages/maemo3/hildon-1_svn.bb @@ -3,7 +3,7 @@ LICENSE = "LGPL" DEPENDS = "gconf-dbus esound gtk+" -PV = "1.0.12+svnr${SRCREV}" +PV = "1.0.17+svnr${SRCREV}" SRC_URI = "svn://stage.maemo.org/svn/maemo/projects/haf/trunk;module=hildon-1;proto=https \ file://buttonbox.patch;patch=1 " -- cgit v1.2.3 From 239fbede1a35795644854839bbf9623d7779febc Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 16:02:45 +0000 Subject: xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch : drop duplicate old patch --- .../xserver-kdrive-1.2.0/kdrive-imageon.patch | 9079 -------------------- 1 file changed, 9079 deletions(-) delete mode 100644 packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch (limited to 'packages') diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch deleted file mode 100644 index b143eedff3..0000000000 --- a/packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch +++ /dev/null @@ -1,9079 +0,0 @@ -# Author: Manuel Teira (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 -+#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.randr)); -+ -+} -+ -+static Bool -+W100ScreenInit(KdScreenInfo * screen) -+{ -+ W100ScreenInfo *w100s; -+ W100CardInfo(screen); -+ Bool success = FALSE; -+ -+ DBG_IMAGEON(("--W100ScreenInit\n")); -+ w100s = xcalloc(sizeof(W100ScreenInfo), 1); -+ if (w100s == NULL) -+ return FALSE; -+ -+ w100s->w100c = w100c; -+ w100s->screen = screen; -+ screen->driver = w100s; -+ -+ success = fbdevScreenInitialize(screen, &w100s->fbdev); -+ -+ if (!success) { -+ screen->driver = NULL; -+ xfree(w100s); -+ return FALSE; -+ } -+ -+ W100Setup(screen); -+ -+ return TRUE; -+} -+ -+static void -+W100ScreenFini(KdScreenInfo * screen) -+{ -+ W100ScreenInfo *w100s = (W100ScreenInfo *) screen->driver; -+ DBG_IMAGEON(("--W100ScreenFini\n")); -+ fbdevScreenFini(screen); -+ xfree(w100s); -+ screen->driver = 0; -+} -+ -+static Bool -+W100InitScreen(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ DBG_IMAGEON(("--W100InitScreen\n")); -+ if (w100c->card_id->caps & W100XVSupport) { -+ 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; -+ -+ DBG_IMAGEON(("--W100RandRSetConfig(randr:%d,pSize:%dx%d)\n", -+ randr, pSize->width, pSize->height)); -+ -+ if (screenEnabled) { -+ KdDisableScreen(pScreen); -+ } -+ -+ if (randr & (RR_Rotate_0|RR_Rotate_180)) { -+ pScreen->mmWidth = screen->width_mm; -+ pScreen->mmHeight = screen->height_mm; -+ pScreen->width = pSize->width; -+ pScreen->height = pSize->height; -+ } else { -+ pScreen->mmWidth = screen->height_mm; -+ pScreen->mmHeight = screen->width_mm; -+ pScreen->width = pSize->height; -+ pScreen->height = pSize->width; -+ } -+ -+ screen->randr = randr; -+ screen->width = pScreen->width; -+ screen->height = pScreen->height; -+ w100c->hw_window.randr = KdSubRotation(w100StartupInfo.randr, randr); -+ w100c->hw_window.mode = W100GetBestMode(w100c, pScreen->width, pScreen->height); -+ -+ KdOffscreenSwapOut(screen->pScreen); -+ -+ W100Setup(screen); -+ -+ DBG_IMAGEON(("ModifyPixMapHeader(width:%d,height:%d,depth:%d,bpp:%d,bs:%d,fb:0x%08x)\n", pScreen->width, pScreen->height, -+ screen->fb[0].depth, -+ screen->fb[0].bitsPerPixel, -+ screen->fb[0].byteStride, -+ screen->fb[0].frameBuffer)); -+ -+ -+ (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap(pScreen), -+ pScreen->width, -+ pScreen->height, -+ screen->fb[0].depth, -+ screen->fb[0].bitsPerPixel, -+ screen->fb[0].byteStride, -+ screen->fb[0].frameBuffer); -+ -+ -+ if (screenEnabled) { -+ KdEnableScreen(pScreen); -+ } -+ return TRUE; -+} -+ -+static Bool W100RandRGetInfo(ScreenPtr pScreen, Rotation *rotations) -+{ -+ KdScreenPriv(pScreen); -+ KdScreenInfo *screen = pScreenPriv->screen; -+ W100CardInfo(pScreenPriv); -+ RRScreenSizePtr pSize; -+ Rotation randr; -+ W100ModeSpec *modes; -+ int i; -+ -+ DBG_IMAGEON(("--W100RandRGetInfo\n")); -+ -+ *rotations = RR_Rotate_All; -+ -+ for (modes = w100_modes; modes->width; modes++) { -+ if (modes->supported) { -+ pSize = RRRegisterSize(pScreen, -+ modes->width, -+ modes->height, -+ screen->width_mm, -+ screen->height_mm); -+ if (modes == w100c->hw_window.mode) { -+ RRSetCurrentConfig(pScreen, screen->randr, 0, pSize); -+ } -+ } -+ } -+ -+ return TRUE; -+} -+ -+static Bool W100RandRInit(ScreenPtr pScreen) -+{ -+ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen); -+ DBG_IMAGEON(("--W100RandRInit\n")); -+ pScrPriv->rrSetConfig = W100RandRSetConfig; -+ pScrPriv->rrGetInfo = W100RandRGetInfo; -+ return TRUE; -+} -+ -+#endif -+ -+static Bool -+W100FinishInitScreen(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ DBG_IMAGEON(("--W100FinishInitScreen\n")); -+ if (!fbdevFinishInitScreen(pScreen)) -+ return FALSE; -+ -+#ifdef RANDR -+ if (!W100RandRInit(pScreen)) -+ return FALSE; -+#endif -+ return TRUE; -+} -+ -+static Bool -+W100CreateResources(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ return fbdevCreateResources(pScreen); -+} -+ -+static void -+W100Preserve(KdCardInfo * card) -+{ -+ W100CardInfo *w100c = card->driver; -+ DBG_IMAGEON(("--W100Preserve\n")); -+ -+ fbdevPreserve(card); -+} -+ -+static void -+W100Restore(KdCardInfo * card) -+{ -+ W100CardInfo *w100c = card->driver; -+ DBG_IMAGEON(("--W100Restore\n")); -+ fbdevRestore(card); -+} -+ -+static Bool -+W100DPMS(ScreenPtr pScreen, int mode) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ DBG_IMAGEON(("--W100DPMS\n")); -+ return fbdevDPMS(pScreen, mode); -+} -+ -+static Bool -+W100Enable(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ DBG_IMAGEON(("--W100Enable\n")); -+ -+ /* -+ if (!fbdevEnable(pScreen)) -+ return FALSE; -+ */ -+ -+ if (w100c->mem_base == NULL) { -+ if (!W100Map(pScreenPriv->screen->card, w100c)) { -+ return FALSE; -+ } -+ W100Setup(pScreenPriv->screen); -+ } -+ W100SetupGraphicEngine(w100c); -+ -+ graphic_offset_u go; -+ go.val = MMIO_IN32(mmGRAPHIC_OFFSET); -+ DBG_IMAGEON(("Graphic offset is 0x%08x(0x%08x)\n", -+ go.f.graphic_offset, -+ W100_CARD2HOST(go.f.graphic_offset))); -+ -+ -+ return TRUE; -+} -+ -+static void -+W100Disable(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ DBG_IMAGEON(("--W100Disable\n")); -+ //W100Unmap(pScreenPriv->card, w100c); -+ -+ fbdevDisable(pScreen); -+} -+ -+static void -+W100GetColors(ScreenPtr pScreen, int fb, int n, xColorItem * pdefs) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ fbdevGetColors(pScreen, fb, n, pdefs); -+} -+ -+static void -+W100PutColors(ScreenPtr pScreen, int fb, int n, xColorItem * pdefs) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ fbdevPutColors(pScreen, fb, n, pdefs); -+} -+ -+KdCardFuncs W100Funcs = { -+ W100CardInit, /* cardinit */ -+ W100ScreenInit, /* scrinit */ -+ W100InitScreen, /* initScreen */ -+ W100FinishInitScreen, /* finishInitScreen */ -+ W100CreateResources, /* createRes */ -+ W100Preserve, /* preserve */ -+ W100Enable, /* enable */ -+ W100DPMS, /* dpms */ -+ W100Disable, /* disable */ -+ W100Restore, /* restore */ -+ W100ScreenFini, /* scrfini */ -+ W100CardFini, /* cardfini */ -+ -+ W100CursorInit, /* initCursor */ -+ W100CursorEnable, /* enableCursor */ -+ W100CursorDisable, /* disableCursor */ -+ W100CursorFini, /* finiCursor */ -+ W100RecolorCursor, /* recolorCursor */ -+ -+ W100InitAccel, /* initAccel */ -+ W100EnableAccel, /* enableAccel */ -+ W100DisableAccel, /* disableAccel */ -+ W100FiniAccel, /* finiAccel */ -+ -+ W100GetColors, /* getColors */ -+ W100PutColors, /* putColors */ -+}; -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_const.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_const.h 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,161 @@ -+/* -+ * 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. -+ */ -+ -+#ifndef __IMAGEON_CONST_H__ -+#define __IMAGEON_CONST_H__ -+ -+// DP_GUI_MASTER_CNTL.GMC_Brush_DataType -+// DP_DATATYPE.Brush_DataType -+#define DP_BRUSH_8x8MONOOPA 0 //8x8 mono pattern (expanded to frgd, bkgd) -+#define DP_BRUSH_8x8MONOTRA 1 //8x8 mono pattern (expanded to frgd, leave_alone) -+#define DP_PEN_32x1MONOOPA 6 //32x1 mono pattern (expanded to frgd, bkgd) -+#define DP_PEN_32x1MONOTRA 7 //32x1 mono pattern (expanded to frgd, leave_alone) -+#define DP_BRUSH_8x8COLOR 10 //8x8 color pattern -+#define DP_BRUSH_SOLIDCOLOR 13 //solid color pattern (frgd) -+#define DP_BRUSH_NONE 15 //no brush used -+ -+#define SIZE_BRUSH_8x8MONO 2 -+#define SIZE_PEN_32x1MONO 1 -+#define SIZE_BRUSH_8x8COLOR_8 16 -+#define SIZE_BRUSH_8x8COLOR_16 32 -+#define MAX_BRUSH_SIZE SIZE_BRUSH_8x8COLOR_16 -+ -+// DP_GUI_MASTER_CNTL.GMC_Dst_DataType -+// DP_DATATYPE.Dp_Dst_DataType -+#define DP_DST_8BPP 2 // 8 bpp grey scale -+#define DP_DST_16BPP_1555 3 //16 bpp aRGB 1555 -+#define DP_DST_16BPP_444 5 //16 bpp aRGB 4444 -+ -+// DP_GUI_MASTER_CNTL.GMC_Src_DataType -+// DP_DATATYPE.Dp_Src_DataType -+#define DP_SRC_1BPP_OPA 0 //mono (expanded to frgd, bkgd) -+#define DP_SRC_1BPP_TRA 1 //mono (expanded to frgd, leave_alone) -+#define DP_SRC_COLOR_SAME_AS_DST 3 //color (same as DST) -+#define DP_SRC_SOLID_COLOR_BLT 4 //solid color for Blt (use frgd) -+#define DP_SRC_4BPP 5 //4 bpp -+#define DP_SRC_12BPP_PACKED 6 //12 bpp packed -+ -+// DP_GUI_MASTER_CNTL.GMC_Byte_Pix_Order -+// DP_DATATYPE.Dp_Byte_Pix_Order -+#define DP_PIX_ORDER_MSB2LSB 0 //monochrome pixel order from MSBit to LSBit -+#define DP_PIX_ORDER_LSB2MSB 1 //monochrome pixel order from LSBit to MSBit -+ -+// DP_GUI_MASTER_CNTL.GMC_Dp_Src_Source -+#define DP_SRC_MEM_LINEAR 1 //loaded from memory (linear trajectory) -+#define DP_SRC_MEM_RECTANGULAR 2 //loaded from memory (rectangular trajectory) -+#define DP_SRC_HOSTDATA_BIT 3 //loaded from hostdata (linear trajectory) -+#define DP_SRC_HOSTDATA_BYTE 4 //loaded from hostdata (linear trajectory & byte-aligned) -+ -+// DP_GUI_MASTER_CNTL.GMC_Dp_Op -+#define DP_OP_ROP 0 -+#define DP_OP_ARITHMETIC 1 -+ -+// E2_ARITHMETIC_CNTL.opcode -+#define E2_OPC_GLBALP_ADD_SRC2 0 -+#define E2_OPC_GLBALP_SUB_SRC2 1 -+#define E2_OPC_SRC1_ADD_SRC2 2 -+#define E2_OPC_SRC1_SUB_SRC2 3 -+#define E2_OPC_DST_SADDBLEND_SRC2 4 -+#define E2_OPC_DST_CADDBLEND_SRC2 5 -+#define E2_OPC_DST_CSUBBLEND_SRC2 6 -+#define E2_OPC_LF_SRC2 7 -+#define E2_OPC_SCALE_SRC2 8 -+#define E2_OPC_STRETCH_SRC2 9 -+#define E2_OPC_SRC1_4BPPCPYWEXP 10 -+#define E2_OPC_MC1 11 -+#define E2_OPC_MC2 12 -+#define E2_OPC_MC1_IDCT 13 -+#define E2_OPC_MC2_IDCT 14 -+#define E2_OPC_IDCT_ONLY_IFRAME 15 -+ -+// E2_ARITHMETIC_CNTL.clamp -+#define E2_CLAMP_OFF 0 -+#define E2_CLAMP_ON 1 -+ -+// E2_ARITHMETIC_CNTL.rounding -+#define E2_ROUNDING_TRUNCATE 0 -+#define E2_ROUNDING_TO_INFINITY 1 -+ -+// E2_ARITHMETIC_CNTL.srcblend -+#define E2_SRCBLEND_GLOBALALPHA 0 -+#define E2_SRCBLEND_ZERO 1 -+#define E2_SRCBLEND_SRC2ALPHA 2 -+#define E2_SRCBLEND_DSTALPHA 3 -+#define E2_SRCBLEND_ALPHA1PLANE 4 -+ -+// E2_ARITHMETIC_CNTL.destblend -+#define E2_DSTBLEND_GLOBALALPHA 0 -+#define E2_DSTBLEND_ZERO 1 -+#define E2_DSTBLEND_SRC2ALPHA 2 -+#define E2_DSTBLEND_DSTALPHA 3 -+#define E2_DSTBLEND_ALPHA1PLANE 4 -+ -+// LCD_FORMAT.lcd_type -+#define LCDTYPE_TFT333 0 -+#define LCDTYPE_TFT444 1 -+#define LCDTYPE_TFT555 2 -+#define LCDTYPE_TFT666 3 -+#define LCDTYPE_COLSTNPACK4 4 -+#define LCDTYPE_COLSTNPACK8F1 5 -+#define LCDTYPE_COLSTNPACK8F2 6 -+#define LCDTYPE_COLSTNPACK16 7 -+#define LCDTYPE_MONSTNPACK4 8 -+#define LCDTYPE_MONSTNPACK8 9 -+ -+// CP_RB_CNTL.rb_bufsz -+#define RB_SIZE_2K 8 -+#define RB_SIZE_4K 9 -+#define RB_SIZE_8K 10 -+#define RB_SIZE_16K 11 -+#define RB_SIZE_32K 12 -+#define RB_SIZE_64K 13 -+ -+// GRAPHIC_CTRL.color_depth -+#define COLOR_DEPTH_1BPP 0 -+#define COLOR_DEPTH_2BPP 1 -+#define COLOR_DEPTH_4BPP 2 -+#define COLOR_DEPTH_8BPP 3 -+#define COLOR_DEPTH_332 4 -+#define COLOR_DEPTH_A444 5 -+#define COLOR_DEPTH_A555 6 -+ -+// VIDEO_CTRL.video_mode -+#define VIDEO_MODE_422 0 -+#define VIDEO_MODE_420 1 -+ -+// CLR_CMP_CNTL.cmp_fcn_src -+#define CMP_FCN_SRC_NEQ 4 -+#define CMP_FCN_SRC_EQ 5 -+ -+// CLR_CMP_CNTL.cmp_src -+#define CMP_SRC_SRC 1 -+ -+// Overlay formats -+#define OVLFORMAT_YUV422 (6) -+#define OVLFORMAT_YUV420 (7) -+#define OVLFORMAT_RGB565 (5) -+#define OVLFORMAT_EQU_DISPLAY (8) -+ -+#define W100_CLK_SRC_XTAL 0 -+#define W100_CLK_SRC_PLL 1 -+ -+#endif -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_cursor.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_cursor.c 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,569 @@ -+/* -+ * 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 -+#endif -+ -+#include "cursorstr.h" -+#include "imageon.h" -+#include "imageon_regs.h" -+ -+#define W100_CURSOR_HEIGHT (16) -+#define W100_CURSOR_WIDTH (16) -+#define W100_CURSOR_PITCH (W100_CURSOR_WIDTH / 4) -+ -+#define W100_CURSOR_SIZE W100_CURSOR_PITCH * W100_CURSOR_WIDTH -+ -+static CARD16 expand2bpp[256]; -+ -+static CARD16 spread_byte(CARD8 b) -+{ -+ CARD16 s = b; -+ -+ s = ((s & 0x00f0) << 4) | (s & 0x000f); -+ s = ((s & 0x0c0c) << 2) | (s & 0x0303); -+ s = ((s & 0x2222) << 1) | (s & 0x1111); -+ return s; -+} -+ -+static void W100InitExpansionTable() -+{ -+ int i; -+ for (i = 0; i < 256; i++) { -+ expand2bpp[i] = spread_byte(i); -+ } -+} -+ -+#define BigEndian(v) \ -+ (((v & 0x000000ff) << 24) | \ -+ ((v & 0x0000ff00) << 8) | \ -+ ((v & 0x00ff0000) >> 8) | \ -+ ((v & 0xff000000) >> 24)) -+ -+#define PixelOffset(x, y) \ -+ (((y) * W100_CURSOR_PITCH + ((x) / 4)) >> 2) -+ -+#define PixelShift(x, y) \ -+ (2 * ((x) % 16)) -+ -+#define PixelMask(x, y) \ -+ ((0xc0000000) >> PixelShift(x, y)) -+ -+#define PixelVal(src, x, y) \ -+ ((*(src + PixelOffset(x, y)) & PixelMask(x, y)) >> (30 - PixelShift(x, y))) -+ -+#define SetPixelVal(ptr, x, y, val) \ -+ *(((CARD32 *)(ptr)) + PixelOffset(x, y)) = \ -+ *(((CARD32 *)(ptr)) + PixelOffset(x, y)) & ~PixelMask(x, y) | \ -+ ((val) & 0x03) << (30 - PixelShift(x2, y2)) -+ -+#define DUMP_CURSOR(src) do { \ -+ int x; \ -+ int y; \ -+ for (y = 0; y < W100_CURSOR_HEIGHT; y++) { \ -+ DBG_IMAGEON(("Line %02d: ", y)); \ -+ for (x = 0; x < W100_CURSOR_WIDTH; x++) { \ -+ DBG_IMAGEON(("%d", PixelVal(src,x,y))); \ -+ } \ -+ DBG_IMAGEON(("\n")); \ -+ } \ -+ DBG_IMAGEON((".\n")); \ -+} while (0) -+ -+static void -+W100RotateCursor(int randr, CARD32 *src, CARD32 *dst) -+{ -+ int x1, y1, x2, y2; -+ -+ switch (randr & RR_Rotate_All) { -+ case RR_Rotate_0: -+ x1 = 0; -+ y1 = 0; -+ for (y2 = 0; y2 < W100_CURSOR_HEIGHT; y2++) { -+ for (x2 = W100_CURSOR_WIDTH - 1; x2 >= 0; --x2) { -+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1)); -+ ++x1; -+ if (x1 >= W100_CURSOR_WIDTH) { -+ x1 = 0; -+ ++y1; -+ } -+ } -+ } -+ break; -+ case RR_Rotate_90: -+ x1 = 0; -+ y1 = 0; -+ for (x2 = W100_CURSOR_WIDTH - 1; x2 >= 0; --x2) { -+ for (y2 = W100_CURSOR_HEIGHT - 1; y2 >=0; --y2) { -+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1)); -+ ++x1; -+ if (x1 >= W100_CURSOR_WIDTH) { -+ x1 = 0; -+ ++y1; -+ } -+ } -+ } -+ break; -+ case RR_Rotate_180: -+ x1 = 0; -+ y1 = 0; -+ for (y2 = W100_CURSOR_HEIGHT - 1; y2 >= 0; --y2) { -+ for (x2 = 0; x2 < W100_CURSOR_WIDTH; x2++) { -+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1)); -+ ++x1; -+ if (x1 >= W100_CURSOR_WIDTH) { -+ x1 = 0; -+ ++y1; -+ } -+ } -+ } -+ break; -+ case RR_Rotate_270: -+ x1 = 0; -+ y1 = 0; -+ for (x2 = 0; x2 < W100_CURSOR_WIDTH; x2++) { -+ for (y2 = 0; y2 < W100_CURSOR_HEIGHT; y2++) { -+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1)); -+ ++x1; -+ if (x1 >= W100_CURSOR_WIDTH) { -+ x1 = 0; -+ ++y1; -+ } -+ } -+ } -+ break; -+ } -+} -+ -+static void -+W100SetCursorColors(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ CursorPtr pCursor = pCurPriv->pCursor; -+ CursorBitsPtr bits = pCursor->bits; -+ cursor_color_u fgcolor; -+ cursor_color_u bgcolor; -+ -+ fgcolor.f.cur_color_r = pCursor->foreRed >> 8; -+ fgcolor.f.cur_color_g = pCursor->foreGreen >> 8; -+ fgcolor.f.cur_color_b = pCursor->foreBlue >> 8; -+ -+ bgcolor.f.cur_color_r = pCursor->backRed >> 8; -+ bgcolor.f.cur_color_g = pCursor->backGreen >> 8; -+ bgcolor.f.cur_color_b = pCursor->backBlue >> 8; -+ -+ DBG_IMAGEON(("W100SetCursorColors fg(%02x,%02x,%02x), bg(%02x,%02x,%02x)\n", -+ fgcolor.f.cur_color_r, -+ fgcolor.f.cur_color_g, -+ fgcolor.f.cur_color_b, -+ bgcolor.f.cur_color_r, -+ bgcolor.f.cur_color_g, -+ bgcolor.f.cur_color_b)); -+ -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmCURSOR1_COLOR0, bgcolor.val); -+ MMIO_OUT32(mmCURSOR1_COLOR1, fgcolor.val); -+ W100EnableDisplayUpdate(w100c); -+ -+} -+ -+static void -+W100LoadCursor(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ CursorPtr pCursor = pCurPriv->pCursor; -+ CursorBitsPtr bits = pCursor->bits; -+ CARD32 *dst; -+ CARD8 tmpCursor0[W100_CURSOR_SIZE]; -+ CARD8 tmpCursor1[W100_CURSOR_SIZE]; -+ CARD32 expValue, expMask; -+ CARD32 *src; -+ CARD32 *mask; -+ int lwsrc; -+ int line, i; -+ int h, w; -+ -+ -+ pCurPriv->pCursor = pCursor; -+ pCurPriv->xhot = bits->xhot; -+ pCurPriv->yhot = bits->yhot; -+ -+ memset(tmpCursor0, 0xaa, W100_CURSOR_SIZE); -+ -+ h = bits->height; -+ w = bits->width; -+ if (h > W100_CURSOR_HEIGHT) { -+ h = W100_CURSOR_HEIGHT; -+ } -+ -+ if (w > W100_CURSOR_WIDTH) { -+ w = W100_CURSOR_WIDTH; -+ } -+ -+ src = (CARD32*) bits->source; -+ dst = (CARD32*) tmpCursor0; -+ mask = (CARD32*) bits->mask; -+ -+ lwsrc = BitmapBytePad(bits->width) >> 2; -+ -+ for (line = 0; line < h; line++) { -+ for (i = 0; i < lwsrc; i++) { -+ expValue = -+ (expand2bpp[src[i] & 0xff]) | -+ (expand2bpp[(src[i] >> 8) & 0xff] << 16); -+ expMask = -+ (expand2bpp[mask[i] & 0xff]) | -+ (expand2bpp[(mask[i] >> 8) & 0xff] << 16); -+ expMask |= (expMask << 1); /* Expand 01 -> 11, 00 -> 00 */ -+ dst[i] = (0xaaaaaaaa & ~expMask) | (expValue & expMask); -+ } -+ src += lwsrc; -+ mask += lwsrc; -+ dst += lwsrc; -+ } -+ -+ /* Rotate the pixmap to get the correct orientation */ -+ W100RotateCursor(w100c->hw_window.randr, -+ (CARD32*) tmpCursor0, -+ (CARD32*) tmpCursor1); -+ -+ DUMP_CURSOR((CARD32*)tmpCursor1); -+ /* Correct endianness */ -+ src = (CARD32*) tmpCursor1; -+ dst = (CARD32*) (pCurPriv->area->vidmem->base + pCurPriv->area->offset); -+ DBG_IMAGEON(("W100LoadCursor(xhot:%d,yhot:%d,width:%d,height:%d) dst(0x%08x)\n", -+ bits->xhot, bits->yhot, -+ bits->width, bits->height, -+ dst)); -+ -+ for (line = 0; line < h; line++) { -+ for (i = 0; i < lwsrc; i++) { -+ dst[i] = BigEndian(src[i]); -+ } -+ src += lwsrc; -+ dst += lwsrc; -+ } -+ -+ W100SetCursorColors(pScreen); -+} -+ -+static void -+W100UnloadCursor(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ cursor_h_pos_u hpos; -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ DBG_IMAGEON(("W100UnloadCursor pCurPriv:%p\n", pCurPriv)); -+ -+ hpos.val = pCurPriv->hpos; -+ hpos.f.cur_en = 0; -+ -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmCURSOR1_H_POS, hpos.val); -+ W100EnableDisplayUpdate(w100c); -+ pCurPriv->hpos = hpos.val; -+} -+ -+static void -+W100MoveCursor(ScreenPtr pScreen, int x, int y) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ int xoffs, yoffs; -+ cursor_offset_u cursor_offset; -+ cursor_h_pos_u hpos; -+ cursor_v_pos_u vpos; -+ graphic_h_disp_u graphic_hdisp; -+ graphic_v_disp_u graphic_vdisp; -+ BoxRec cursorBox, deviceBox; -+ -+ -+ if (!pCurPriv->has_cursor) { -+ return; -+ } -+ if (!pScreenPriv->enabled) { -+ return; -+ } -+ -+ graphic_hdisp.val = w100c->regs.GRAPHIC_H_DISP; -+ graphic_vdisp.val = w100c->regs.GRAPHIC_V_DISP; -+ xoffs = 0; -+ yoffs = 0; -+ cursorBox.x1 = x - pCurPriv->xhot; -+ cursorBox.y1 = y - pCurPriv->yhot; -+ cursorBox.x2 = cursorBox.x1 + pCurPriv->width - 1; -+ cursorBox.y2 = cursorBox.y1 + pCurPriv->height - 1; -+ W100MapToDevice(w100c, &cursorBox, &deviceBox); -+ -+ if (deviceBox.x1 < 0) { -+ xoffs = -deviceBox.x1; -+ deviceBox.x1 = 0; -+ } -+ -+ if (deviceBox.y1 < 0) { -+ yoffs = -deviceBox.y1; -+ deviceBox.y1 = 0; -+ } -+ -+ hpos.f.cur_h_start = graphic_hdisp.f.graphic_h_start + deviceBox.x1; -+ hpos.f.cur_h_end = graphic_hdisp.f.graphic_h_start + deviceBox.x2 + 1; -+ hpos.f.cur_en = 1; -+ vpos.f.cur_v_start = graphic_vdisp.f.graphic_v_start + deviceBox.y1; -+ vpos.f.cur_v_end = graphic_vdisp.f.graphic_v_start + deviceBox.y2 + 1; -+ -+ cursor_offset.f.cur_x_offset = xoffs; -+ cursor_offset.f.cur_y_offset = yoffs; -+ cursor_offset.f.cur_offset = (CARD32) -+ W100_HOST2CARD(pCurPriv->area->vidmem->base -+ + pCurPriv->area->offset); -+ DBG_IMAGEON(("W100MoveCursor dst(x:%d,y:%d)," -+ "hwpos(hpos.start:%d,hpos.end:%d,vpos.start:%d,vpos.end:%d)," -+ "mapped(x:%d,y:%d,xoffs:%d,yoffs:%d)\n", -+ x, y, -+ hpos.f.cur_h_start, hpos.f.cur_h_end, -+ vpos.f.cur_v_start, vpos.f.cur_v_end, -+ deviceBox.x1, deviceBox.y1, xoffs, yoffs)); -+ -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmCURSOR1_OFFSET, cursor_offset.val); -+ MMIO_OUT32(mmCURSOR1_V_POS, vpos.val); -+ MMIO_OUT32(mmCURSOR1_H_POS, hpos.val); -+ W100EnableDisplayUpdate(w100c); -+ -+ pCurPriv->hpos = hpos.val; -+ pCurPriv->vpos = vpos.val; -+ pCurPriv->coffset = cursor_offset.val; -+ -+} -+ -+static Bool -+W100RealizeCursor(ScreenPtr pScreen, CursorPtr pCursor) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ DBG_IMAGEON(("W100RealizeCursor\n")); -+ -+ if (!pScreenPriv->enabled) { -+ return TRUE; -+ } -+ -+ if (pCursor && pCurPriv->pCursor == pCursor) { -+ int x, y; -+ miPointerPosition(&x, &y); -+ W100LoadCursor(pScreen); -+ W100MoveCursor(pScreen, x, y); -+ } -+ return TRUE; -+} -+ -+ -+static Bool -+W100UnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor) -+{ -+ DBG_IMAGEON(("W100UnrealizeCursor\n")); -+ return TRUE; -+} -+ -+ -+static void -+W100SetCursor(ScreenPtr pScreen, CursorPtr pCursor, int x, int y) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ pCurPriv->pCursor = pCursor; -+ -+ if (!pScreenPriv->enabled) { -+ return; -+ } -+ -+ if (pCursor) { -+ W100LoadCursor(pScreen); -+ W100MoveCursor(pScreen, x, y); -+ } else { -+ W100UnloadCursor(pScreen); -+ } -+} -+ -+ -+miPointerSpriteFuncRec W100PointerSpriteFuncs = { -+ W100RealizeCursor, -+ W100UnrealizeCursor, -+ W100SetCursor, -+ W100MoveCursor, -+}; -+ -+static void -+W100QueryBestSize(int class, unsigned short *pwidth, unsigned short *pheight, -+ ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ switch (class) { -+ case CursorShape: -+ if (*pwidth > pCurPriv->width) { -+ *pwidth = pCurPriv->width; -+ } -+ if (*pheight > pCurPriv->height) { -+ *pheight = pCurPriv->height; -+ } -+ if (*pwidth > pScreen->width) { -+ *pwidth = pScreen->width; -+ } -+ if (*pheight > pScreen->height) { -+ *pheight = pScreen->height; -+ } -+ break; -+ default: -+ fbQueryBestSize(class, pwidth, pheight, pScreen); -+ break; -+ } -+} -+ -+static void -+W100CursorSave(ScreenPtr pScreen, KdOffscreenArea *area) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ DBG_IMAGEON(("W100CursorSave\n")); -+ -+ pCurPriv->area = NULL; -+} -+ -+void -+W100CursorEnable(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ if (!pCurPriv->has_cursor) { -+ return; -+ } -+ -+ DBG_IMAGEON(("W100CursorEnable\n")); -+ -+ if (pCurPriv->area == NULL) { -+ pCurPriv->area = KdOffscreenAlloc(pScreen, -+ W100_CURSOR_SIZE, 0, TRUE, -+ W100Curs