--- /dev/null
+#@--------------------------------------------------------------------
+#@TYPE: Distribution
+#@NAME: vuplus <http://www.vuplus.com>
+#@--------------------------------------------------------------------
+
+SYSVINIT_ENABLED_GETTYS = ""
+
+INHERIT += "packaged-staging"
+INHERIT += "package_ipk debian"
+
+DISTRO = "vuplus"
+DISTRO_NAME = "Vuplus"
+DISTRO_VERSION = "2.0.0"
+
+
+TARGET_OS = "linux"
+#TARGET_VENDOR = "-oe" is set at sane-toolchanin.inc
+TARGET_VENDOR = "-vuplus"
+
+#OLDEST_KERNEL = "2.6.16"
+
+#
+## Basic configuration
+#
+IMAGE_DEV_MANAGER = "udev"
+DISTRO_SSH_DAEMON = "dropbear"
+IMAGE_INIT_MANAGER = "sysvinit"
+IMAGE_INITSCRIPTS ?= "initscripts-vuplus"
+IMAGE_LOGIN_MANAGER ?= ""
+IMAGE_FSTYPES ?= "tar.bz2 jffs2"
+
+
+#Images built can have to modes:
+# 'debug': empty rootpassword, strace included
+# 'release' no root password, no strace and gdb by default
+#DISTRO_TYPE ?= "debug"
+#DISTRO_TYPE = "release"
+
+
+#2.8
+#FEED_URIS += "official##http://archive.vuplus.com/openembedded/1.1/vuplus/${MACHINE}/feeds/stable"
+DISTRO_FEED_URI = "http://archive.vuplus.com/openembedded/${DISTRO_VERSION}/vuplus/${MACHINE}/feeds/stable"
+
+# If we're using an .ipk based rootfs, we want to have opkg-nogpg installed so postinst script can run
+IPKG_VARIANT = "opkg-nogpg"
+
+
+# for sane-toolchain.inc:
+LIBC ?= "eglibc"
+#LIBC ?= "glibc"
+PREFERRED_BINUTILS ?= "2.18.50.0.7"
+PREFERRED_GCC_VERSION ?= "4.1.1"
+
+
+PREFERRED_VERSION_automake ?= "1.10.2"
+PREFERRED_VERSION_automake-native ?= "1.10.2"
+#PREFERRED_VERSION_busybox ?= "1.13.2"
+PREFERRED_VERSION_busybox ?= "1.15.3"
+PREFERRED_VERSION_libsigc++-1.2 ?= "1.2.5"
+#PREFERRED_VERSION_linux-libc-headers ?= "2.6.23"
+#PREFERRED_VERSION_linux-libc-headers ?= "2.6.12.0"
+PREFERRED_VERSION_linux-libc-headers ?= "2.6.18"
+PREFERRED_VERSION_swig-native ?= "1.3.39"
+PREFERRED_VERSION_wpa-supplicant ?= "0.6.7"
+PREFERRED_VERSION_samba = "3.2.8"
+#PREFERRED_VERSION_samba = "3.0.24"
+PREFERRED_VERSION_ushare = "1.1a"
+#PREFERRED_VERSION_liboil = "0.3.14"
+PREFERRED_VERSION_hdparm = "6.6"
+
+PREFERRED_PROVIDER_avahi = "avahi"
+PREFERRED_PROVIDER_opkg = "opkg-nogpg"
+PREFERRED_PROVIDER_initscripts = "initscripts-vuplus"
+PREFERRED_PROVIDER_virtual/db = "db"
+PREFERRED_PROVIDER_virtual/db-native = "db-native"
+PREFERRED_PROVIDER_bluez-libs = "bluez-libs"
+PREFERRED_PROVIDER_libfribidi = "libfribidi"
+
+PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
+PREFERRED_PROVIDER_virtual/java-native = "jamvm-native"
+PREFERRED_PROVIDER_virtual/java-initial = "jamvm-initial"
+
+PREFERRED_PROVIDER_classpath-native = "classpath-minimal"
+PREFERRED_PROVIDER_classpath = "classpath-minimal"
+
+PREFERRED_VERSION_jamvm-initial = "1.4.5"
+PREFERRED_VERSION_classpath-initial = "0.93"
+
+PREFERRED_VERSION_libecj-bootstrap = "3.4"
+
+PREFERRED_VERSION_jamvm-native = "1.5.3"
+PREFERRED_VERSION_classpath-native = "0.98"
+
+PREFERRED_VERSION_jamvm = "1.5.3"
+PREFERRED_VERSION_classpath = "0.98"
+
+SRCREV_pn-opkg = "455"
+
+require conf/distro/include/sane-srcdates.inc
+require conf/distro/include/sane-srcrevs.inc
+require conf/distro/include/sane-toolchain.inc
+require conf/distro/include/sane-feed-ipk.inc
+
+
+#
+PREFERRED_VERSION_autoconf-native = "2.61"
+
+
+#oe complaint
+PREFERRED_PROVIDER_virtual/libqte2 = "qte"
+
+
+# glibc:
+#PREFERRED_PROVIDER_virtual/libiconv ?= "glibc"
+#PREFERRED_PROVIDER_virtual/libintl ?= "glibc"
+#PREFERRED_PROVIDER_virtual/libc ?= "glibc"
+#PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-initial ?= "glibc-initial"
+#PREFERRED_PROVIDER_linux-libc-headers ?= "linux-libc-headers"
+
+# Virtuals:
+#PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
+#PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
+#PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "gcc-cross-intermediate"
+#PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
+#PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
+
+# hostap stuff, we prefer the in-kernel modules, but those don't work for all machines
+#PREFERRED_PROVIDER_hostap-conf ?= "hostap-conf"
+#PREFERRED_PROVIDER_hostap-modules_h2200 ?= "hostap-modules"
+#PREFERRED_PROVIDER_hostap-modules_hx4700 ?= "hostap-modules"
+
+#PREFERRED_PROVIDER_virtual/db ?= "db"
+#PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
+#PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
+#PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+#PREFERRED_PROVIDER_virtual/xserver ?= "xserver-kdrive"
+
+# Others:
+#PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
+#PREFERRED_PROVIDER_dbus-glib = "dbus-glib"
+#PREFERRED_PROVIDER_esound ?= "pulseaudio"
+#PREFERRED_PROVIDER_gconf ?= "gconf-dbus"
+#PREFERRED_PROVIDER_gnome-vfs ?= "gnome-vfs"
+#PREFERRED_PROVIDER_gnome-vfs-plugin-file ?= "gnome-vfs"
+#PREFERRED_PROVIDER_tslib ?= "tslib"
+#PREFERRED_PROVIDER_tslib-conf ?= "tslib"
+#PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
+#PREFERRED_PROVIDER_ntp ?= "ntp"
+#PREFERRED_PROVIDER_hotplug = "udev"
+#PREFERRED_PROVIDER_libxss = "libxss"
+#PREFERRED_PROVIDER_bluez-utils-dbus = "bluez-utils"
+#PREFERRED_PROVIDER_bluez-libs = "bluez4"
+
+# we don't ship gtk-directfb by default
+#PREFERRED_PROVIDER_gtk+ ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
+#PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
+
+
--- /dev/null
+#@TYPE: Machine
+#@NAME: vuduo
+#@DESCRIPTION: Machine configuration for the VuPlus
+
+TARGET_ARCH = "mipsel"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-${MACHINE}"
+
+
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "vuplus-dvb-modules"
+
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel vuplus-dvb-modules \
+ kernel-module-cifs kernel-module-exportfs kernel-module-isofs \
+ kernel-module-reiserfs \
+ kernel-module-sr-mod kernel-module-usb-storage \
+ kernel-module-cdrom \
+ kernel-module-snd-pcm kernel-module-snd \
+ kernel-module-msdos kernel-module-vfat kernel-module-fat \
+ kernel-module-libata kernel-module-ntfs kernel-module-sata-svw \
+ kernel-module-nls-base kernel-module-nls-iso8859-1 kernel-module-nls-cp437 \
+ kernel-module-i2c-core kernel-module-firmware-class kernel-module-input kernel-module-evdev \
+ kernel-module-xfs"
+
+TARGET_FPU = "soft"
+#TARGET_FPU = "hard"
+
+# used by sysvinit_2
+#SERIAL_CONSOLE = "115200 ttyS0"
+
+
+MACHINE_FEATURES += "kernel26"
+
+TARGET_CC_ARCH = "-march=mips32"
+
+
+#PREFERRED_VERSION_linux-libc-headers = "2.6.18"
+
+DISTRO_FEATURES += " mplt"
+
+
+
+
+PREFERRED_PROVIDER_task-vuplus-dvbapi = "task-vuplus-dvbapi3"
+PREFERRED_PROVIDER_task-vuplus-ui = "task-vuplus-enigma2"
+
+
+
+
+
+#GLIBC_ADDONS = "nptl" which will be set at glibc_xxx.bb. Setting here causes a configure error.
+GLIBC_ADDONS ?= "ports,nptl,libidn"
+GLIBC_EXTRA_OECONF = "--disable-profile --with-tls --without-fp --with-__thread"
+
+PREFERRED_PROVIDER_xserver = "xserver-kdrive"
+
+EXTRA_IMAGEDEPENDS += "vuplus-makenfi-native"
+
+MACHINE_FEATURES += "alsa pci"
+
+
+EXTRA_IMAGECMD_jffs2 = " --eraseblock=0x20000 -n -l "
+IMAGE_CMD_jffs2 = " \
+ cp ${IMAGE_ROOTFS}/boot/vmlinux.gz ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.vmlinux.gz; \
+ rm -f ${IMAGE_ROOTFS}/boot/vmlinux.gz; \
+ mkfs.jffs2 --root=${IMAGE_ROOTFS}/boot --faketime \
+ --disable-compressor=lzo --compression-mode=size \
+ --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.jffs2 \
+ ${EXTRA_IMAGECMD}; rm -rf ${IMAGE_ROOTFS}/boot/*; \
+ rm -rf ${IMAGE_ROOTFS}/tmp/*; \
+ mkfs.jffs2 --root=${IMAGE_ROOTFS} \
+ --disable-compressor=lzo --compression-mode=size \
+ --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
+ ${EXTRA_IMAGECMD}; \
+ vfi3 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.jffs2 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.vmlinux.gz > ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.nfi; \
+ mkdir -p ${DEPLOY_DIR_IMAGE}/vuplus/duo; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${DEPLOY_DIR_IMAGE}/vuplus/duo/root_cfe_auto.jffs2; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.vmlinux.gz ${DEPLOY_DIR_IMAGE}/vuplus/duo/kernel_cfe_auto.bin; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.jffs2 ${DEPLOY_DIR_IMAGE}/vuplus/duo/boot_cfe_auto.jffs2; \
+ cd ${DEPLOY_DIR_IMAGE}; \
+ rm -f usb_upgrade.zip; \
+ zip duo_usb_upgrade.zip vuplus/duo/*; \
+ rm -rf vuplus; \
+"
--- /dev/null
+#@TYPE: Machine
+#@NAME: vusolo
+#@DESCRIPTION: Machine configuration for the VuPlus
+
+TARGET_ARCH = "mipsel"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-${MACHINE}"
+
+
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "vuplus-dvb-modules"
+
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel \
+ kernel-module-cifs kernel-module-exportfs kernel-module-isofs \
+ kernel-module-reiserfs \
+ kernel-module-sr-mod kernel-module-usb-storage \
+ kernel-module-cdrom \
+ kernel-module-snd-pcm kernel-module-snd \
+ kernel-module-msdos kernel-module-vfat kernel-module-fat \
+ kernel-module-ntfs \
+ kernel-module-nls-base kernel-module-nls-iso8859-1 kernel-module-nls-cp437 kernel-module-nls-utf8 \
+ kernel-module-i2c-core kernel-module-firmware-class kernel-module-input kernel-module-evdev \
+ kernel-module-xfs"
+
+TARGET_FPU = "soft"
+
+# used by sysvinit_2
+#SERIAL_CONSOLE = "115200 ttyS0"
+
+
+MACHINE_FEATURES += "kernel26"
+
+TARGET_CC_ARCH = "-march=mips32"
+
+
+#PREFERRED_VERSION_linux-libc-headers = "2.6.18"
+
+DISTRO_FEATURES += " mplt"
+
+
+
+
+PREFERRED_PROVIDER_task-vuplus-dvbapi = "task-vuplus-dvbapi3"
+PREFERRED_PROVIDER_task-vuplus-ui = "task-vuplus-enigma2"
+
+
+
+
+
+#GLIBC_ADDONS = "nptl" which will be set at glibc_xxx.bb. Setting here causes a configure error.
+GLIBC_ADDONS ?= "ports,nptl,libidn"
+GLIBC_EXTRA_OECONF = "--disable-profile --with-tls --without-fp --with-__thread"
+
+PREFERRED_PROVIDER_xserver = "xserver-kdrive"
+
+EXTRA_IMAGEDEPENDS += "vuplus-makenfi-native"
+
+MACHINE_FEATURES += "alsa pci"
+
+
+EXTRA_IMAGECMD_jffs2 = " --eraseblock=0x20000 -n -l "
+IMAGE_CMD_jffs2 = " \
+ cp ${IMAGE_ROOTFS}/boot/vmlinux.gz ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.vmlinux.gz; \
+ rm -f ${IMAGE_ROOTFS}/boot/vmlinux.gz; \
+ mkfs.jffs2 --root=${IMAGE_ROOTFS}/boot --faketime \
+ --disable-compressor=lzo --compression-mode=size \
+ --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.jffs2 \
+ ${EXTRA_IMAGECMD}; rm -rf ${IMAGE_ROOTFS}/boot/*; \
+ rm -rf ${IMAGE_ROOTFS}/tmp/*; \
+ mkfs.jffs2 --root=${IMAGE_ROOTFS} \
+ --disable-compressor=lzo --compression-mode=size \
+ --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
+ ${EXTRA_IMAGECMD}; \
+ vfi3 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.jffs2 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.vmlinux.gz > ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.nfi; \
+ mkdir -p ${DEPLOY_DIR_IMAGE}/vuplus/solo; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${DEPLOY_DIR_IMAGE}/vuplus/solo/root_cfe_auto.jffs2; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.vmlinux.gz ${DEPLOY_DIR_IMAGE}/vuplus/solo/kernel_cfe_auto.bin; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.jffs2 ${DEPLOY_DIR_IMAGE}/vuplus/solo/boot_cfe_auto.jffs2; \
+ cd ${DEPLOY_DIR_IMAGE}; \
+ rm -f usb_upgrade.zip; \
+ zip solo_usb_upgrade.zip vuplus/solo/*; \
+ rm -rf vuplus; \
+ "
+
PR = "r0"
PV = "0.8+cvs${SRCDATE}"
SRCDATE = "20100220"
+
+PR_vuplus = "r1"
+PV_vuplus = "0.8cvs${SRCDATE}"
+SRCDATE_vuplus = "20090625"
SRC_URI="cvs://anonymous@cvs.schwerkraft.elitedvb.net/cvsroot/aio-grab;module=aio-grab;method=pserver"
+SRC_URI_append_vuplus = "\
+ file://aio-grab_vuplus.patch;patch=1"
S = "${WORKDIR}/aio-grab"
--- /dev/null
+--- aio-grab/main.c 2009-06-26 01:13:25.000000000 +0900
++++ aio-grab/main3.c 2010-02-02 09:19:06.000000000 +0900
+@@ -85,8 +85,8 @@
+ void combine(unsigned char *output, unsigned char *video, unsigned char *osd, unsigned char *osd_alpha, int xres, int yres);
+ char* upcase(char* mixedstr);
+
+-enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM4380};
+-char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm4380"};
++enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM4380, VUPLUSDUO, VUPLUSSOLO};
++char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm4380", "VuplusDuo", "VuplusSolo"};
+ int stb_type=UNKNOWN;
+
+ // main program
+@@ -123,12 +123,27 @@
+ pclose(pipe);
+ if (stb_type == BRCM7401) // Bcrm7401 + Bcrm4380 use the same framebuffer string, so fall back to /proc/cpuinfO for detecting DM8000
+ {
+- pipe=popen("cat /proc/cpuinfo","r");
+- while (fgets(buf,sizeof(buf),pipe))
++ pipe=popen("cat /proc/stb/info/version","r");
++ memset(buf, 0, sizeof(buf));
++ fgets(buf,4,pipe);
++
++ printf("%s\n", buf);
++
++ if(!strcmp(buf, "120"))
++ stb_type=VUPLUSDUO;
++ else if(!strcmp(buf, "140"))
++ stb_type=VUPLUSSOLO;
++ pclose(pipe);
++
++ if(stb_type == UNKNOWN)
+ {
+- if (strstr(upcase(buf),"BRCM4380")) {stb_type=BRCM4380;}
++ pipe=popen("cat /proc/cpuinfo","r");
++ while (fgets(buf,sizeof(buf),pipe))
++ {
++ if (strstr(upcase(buf),"BRCM4380")) {stb_type=BRCM4380;}
++ }
++ pclose(pipe);
+ }
+- pclose(pipe);
+ }
+ if (stb_type == UNKNOWN)
+ {
+@@ -439,6 +454,21 @@
+ {
+ printf("Grabbing Video ...\n");
+
++ if(stb_type == VUPLUSSOLO || stb_type == VUPLUSDUO)
++ {
++
++ int fd_video = open("/dev/dvb/adapter0/video0", O_RDONLY);
++ if (fd_video < 0)
++ {
++ printf("could not open video device");
++ return;
++ }
++
++ int r = read(fd_video, video, 1920 * 1080 * 3 );
++ *xres = 1920;
++ *yres = 1080;
++ return;
++ }
+ int mem_fd;
+ //unsigned char *memory;
+ void *memory;
file://fix_libmath.patch;patch=1 \
"
SRC_URI_append_opendreambox = " file://asound.conf"
+SRC_URI_append_vuplus = " file://asound.conf"
inherit autotools pkgconfig
install -m 0644 ${WORKDIR}/asound.conf ${D}${sysconfdir}/asound.conf
}
+do_install_append_vuplus() {
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/asound.conf ${D}${sysconfdir}/asound.conf
+}
+
PACKAGES =+ "alsa-server libasound alsa-conf-base alsa-conf alsa-doc alsa-dev"
FILES_${PN}-dbg += "${libdir}/alsa-lib/*/.debu*"
FILES_libasound = "${libdir}/libasound.so.*"
FILES_alsa-server = "${bindir}/*"
FILES_alsa-conf = "${datadir}/alsa/"
FILES_alsa-conf_opendreambox = "${datadir}/alsa/ ${sysconfdir}/asound.conf"
+FILES_alsa-conf_vuplus = "${datadir}/alsa/ ${sysconfdir}/asound.conf"
FILES_alsa-dev += "${libdir}/pkgconfig/ /usr/include/ ${datadir}/aclocal/*"
FILES_alsa-conf-base = "\
${datadir}/alsa/alsa.conf \
file://auto.network \
file://autofs"
+SRC_URI_append_vuplus = " \
+ file://auto.master \
+ file://auto.network \
+ file://autofs"
+
PR = "${INC_PR}"
inherit update-rc.d
install ${WORKDIR}/auto.master ${D}${sysconfdir}/auto.master
install ${WORKDIR}/auto.network ${D}${sysconfdir}/auto.network
}
+
+do_install_append_vuplus () {
+ install -d ${D}${sysconfdir}/init.d
+ install ${WORKDIR}/autofs ${D}${sysconfdir}/init.d
+ install ${WORKDIR}/auto.master ${D}${sysconfdir}/auto.master
+ install ${WORKDIR}/auto.network ${D}${sysconfdir}/auto.network
+}
LICENSE = "GPL"
DEPENDS = "expat virtual/libintl libdaemon dbus glib-2.0"
DEPENDS_append_opendreambox = " libnss-mdns"
+DEPENDS_append_vuplus = " libnss-mdns"
# uclibc has no nss
-RRECOMMENDS_avahi-daemon_append_libc-glibc = " ${@base_conditional('DISTRO', 'opendreambox', 'libavahi-client zeroconf', 'libnss-mdns', d)}"
+#RRECOMMENDS_avahi-daemon_append_libc-glibc = " ${@base_conditional('DISTRO', 'opendreambox', 'libavahi-client zeroconf', 'libnss-mdns', d)}"
+RRECOMMENDS_avahi-daemon_append_libc-glibc = " ${@base_conditional('DISTRO', 'vuplus', 'libavahi-client zeroconf', 'libnss-mdns', d)}"
RDEPENDS_avahi-daemon += "sysvinit-pidof update-rc.d"
RDEPENDS_avahi-autoipd += "update-rc.d"
INITSCRIPT_NAME_avahi-daemon = "avahi-daemon"
INITSCRIPT_PARAMS_avahi-daemon = "defaults 21 19"
INITSCRIPT_PARAMS_avahi-daemon_opendreambox = "start 21 S 2 3 5 . stop 19 0 1 6 ."
+INITSCRIPT_PARAMS_avahi-daemon_vuplus = "start 21 S 2 3 5 . stop 19 0 1 6 ."
INITSCRIPT_NAME_avahi-dnsconfd = "avahi-dnsconfd"
INITSCRIPT_PARAMS_avahi-dnsconfd = "defaults 22 19"
INITSCRIPT_PARAMS_avahi-dnsconfd_opendreambox = "start 22 S 2 3 5 . stop 19 0 1 6 ."
+INITSCRIPT_PARAMS_avahi-dnsconfd_vuplus = "start 22 S 2 3 5 . stop 19 0 1 6 ."
# At the time the postinst runs, dbus might not be setup so only restart if running
--- /dev/null
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbdevfs /proc/bus/usb usbfs defaults 0 0
+/dev/mtdblock2 /boot jffs2 ro 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /tmp tmpfs defaults 0 0
+tmpfs /dev/shm tmpfs mode=0777 0 0
+/dev/sda1 /media/hdd auto defaults 0 0
+
--- /dev/null
+# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
+
+PATH="/usr/local/bin:/usr/bin:/bin"
+EDITOR="/bin/vi" # needed for packages like cron
+TERM="vt100" # Basic terminal capab. For screen etc.
+
+if [ ! -e /etc/localtime ]; then
+ TZ="UTC" # Time Zone. Look at http://theory.uwinnipeg.ca/gnu/glibc/libc_303.html
+ # for an explanation of how to set this to your local timezone.
+ export TZ
+fi
+
+if [ "`id -u`" -eq 0 ]; then
+ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:
+fi
+if [ "$PS1" ]; then
+# works for bash and ash (no other shells known to be in use here)
+ PS1='\u@\h:\w\$ '
+fi
+
+if [ -d /etc/profile.d ]; then
+ for i in `ls /etc/profile.d/`; do
+ . /etc/profile.d/$i
+ done
+ unset i
+fi
+
+export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
+
+umask 022
+
--- /dev/null
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbdevfs /proc/bus/usb usbfs defaults 0 0
+/dev/mtdblock2 /boot jffs2 ro 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /tmp tmpfs defaults 0 0
+tmpfs /dev/shm tmpfs mode=0777 0 0
+/dev/sda1 /media/hdd auto defaults 0 0
+
--- /dev/null
+# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
+
+PATH="/usr/local/bin:/usr/bin:/bin"
+EDITOR="/bin/vi" # needed for packages like cron
+TERM="vt100" # Basic terminal capab. For screen etc.
+
+if [ ! -e /etc/localtime ]; then
+ TZ="UTC" # Time Zone. Look at http://theory.uwinnipeg.ca/gnu/glibc/libc_303.html
+ # for an explanation of how to set this to your local timezone.
+ export TZ
+fi
+
+if [ "`id -u`" -eq 0 ]; then
+ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:
+fi
+if [ "$PS1" ]; then
+# works for bash and ash (no other shells known to be in use here)
+ PS1='\u@\h:\w\$ '
+fi
+
+if [ -d /etc/profile.d ]; then
+ for i in `ls /etc/profile.d/`; do
+ . /etc/profile.d/$i
+ done
+ unset i
+fi
+
+export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
+
+umask 022
+
SECTION = "base"
PRIORITY = "required"
PR = "r91"
+
LICENSE = "GPL"
SRC_URI = " \
/mnt /media /media/card /media/cf /media/net /media/ram \
/media/union /media/realroot /media/hdd \
/media/mmc1"
-
dirs755_micro = "/dev /proc /sys ${sysconfdir}"
dirs2775_micro = ""
dirs1777_micro = "/tmp"
install -m 0644 ${WORKDIR}/nsswitch.conf ${D}${sysconfdir}/nsswitch.conf
}
-
do_install_append_mnci () {
rmdir ${D}/tmp
ln -s var/tmp ${D}/tmp
ln -sf media ${D}/mnt
}
+do_install_append_vuplus() {
+ rm -rf ${D}/mnt
+ rm -rf ${D}/hdd
+ ln -sf media/hdd ${D}/hdd
+ ln -sf media ${D}/mnt
+}
+
PACKAGES = "${PN}-dbg ${PN}-doc ${PN}"
FILES_${PN} = "/*"
FILES_${PN}-doc = "${docdir} ${datadir}/common-licenses"
--- /dev/null
+#
+# Automatically generated make config: don't edit
+# Busybox version: 1.15.3
+# Fri Apr 23 15:07:14 2010
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_DESKTOP is not set
+# CONFIG_EXTRA_COMPAT is not set
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+CONFIG_FEATURE_VERBOSE_USAGE=y
+CONFIG_FEATURE_COMPRESS_USAGE=y
+# CONFIG_FEATURE_INSTALLER is not set
+# CONFIG_LOCALE_SUPPORT is not set
+# CONFIG_FEATURE_ASSUME_UNICODE is not set
+# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
+CONFIG_LONG_OPTS=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+# CONFIG_FEATURE_PIDFILE is not set
+CONFIG_FEATURE_SUID=y
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_PREFER_APPLETS is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+CONFIG_FEATURE_SYSLOG=y
+CONFIG_FEATURE_HAVE_RPC=y
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_PIE is not set
+# CONFIG_NOMMU is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_INDIVIDUAL is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+CONFIG_CROSS_COMPILER_PREFIX=""
+CONFIG_EXTRA_CFLAGS=""
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_INCLUDE_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SIZE_VS_SPEED=2
+# CONFIG_FEATURE_FAST_TOP is not set
+# CONFIG_FEATURE_ETC_NETWORKS is not set
+CONFIG_FEATURE_EDITING=y
+CONFIG_FEATURE_EDITING_MAX_LEN=1024
+CONFIG_FEATURE_EDITING_VI=y
+CONFIG_FEATURE_EDITING_HISTORY=63
+CONFIG_FEATURE_EDITING_SAVEHISTORY=y
+CONFIG_FEATURE_TAB_COMPLETION=y
+# CONFIG_FEATURE_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
+# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
+CONFIG_FEATURE_NON_POSIX_CP=y
+CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
+CONFIG_FEATURE_COPYBUF_KB=64
+CONFIG_MONOTONIC_SYSCALL=y
+CONFIG_IOCTL_HEX2STR_ERROR=y
+# CONFIG_FEATURE_HWIB is not set
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+# CONFIG_FEATURE_SEAMLESS_LZMA is not set
+CONFIG_FEATURE_SEAMLESS_BZ2=y
+CONFIG_FEATURE_SEAMLESS_GZ=y
+CONFIG_FEATURE_SEAMLESS_Z=y
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+CONFIG_BZIP2=y
+# CONFIG_CPIO is not set
+# CONFIG_FEATURE_CPIO_O is not set
+# CONFIG_FEATURE_CPIO_P is not set
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+CONFIG_GZIP=y
+# CONFIG_LZOP is not set
+# CONFIG_LZOP_COMPR_HIGH is not set
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+# CONFIG_FEATURE_TAR_AUTODETECT is not set
+CONFIG_FEATURE_TAR_FROM=y
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
+# CONFIG_FEATURE_TAR_UNAME_GNAME is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+CONFIG_CATV=y
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+CONFIG_FEATURE_DATE_ISOFMT=y
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+CONFIG_FEATURE_DD_IBS_OBS=y
+CONFIG_DF=y
+# CONFIG_FEATURE_DF_FANCY is not set
+CONFIG_DIRNAME=y
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set
+# CONFIG_EXPAND is not set
+# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+# CONFIG_FSYNC is not set
+CONFIG_HEAD=y
+CONFIG_FEATURE_FANCY_HEAD=y
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+CONFIG_NICE=y
+CONFIG_NOHUP=y
+# CONFIG_OD is not set
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+# CONFIG_REALPATH is not set
+CONFIG_RM=y
+CONFIG_RMDIR=y
+# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
+CONFIG_SEQ=y
+CONFIG_SHA1SUM=y
+# CONFIG_SHA256SUM is not set
+# CONFIG_SHA512SUM is not set
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+# CONFIG_FEATURE_FLOAT_SLEEP is not set
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_SPLIT is not set
+# CONFIG_FEATURE_SPLIT_FANCY is not set
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+# CONFIG_TAC is not set
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+# CONFIG_FEATURE_TR_CLASSES is not set
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+# CONFIG_UNEXPAND is not set
+# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
+CONFIG_UNIQ=y
+# CONFIG_USLEEP is not set
+CONFIG_UUDECODE=y
+CONFIG_UUENCODE=y
+CONFIG_WC=y
+# CONFIG_FEATURE_WC_LARGE is not set
+CONFIG_WHO=y
+# CONFIG_WHOAMI is not set
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_KBD_MODE=y
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+# CONFIG_RESIZE is not set
+# CONFIG_FEATURE_RESIZE_PRINT is not set
+# CONFIG_SETCONSOLE is not set
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+CONFIG_SETFONT=y
+# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
+CONFIG_DEFAULT_SETFONT_DIR=""
+CONFIG_SETKEYCODES=y
+# CONFIG_SETLOGCONS is not set
+CONFIG_SHOWKEY=y
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+# CONFIG_FEATURE_AWK_LIBM is not set
+# CONFIG_CMP is not set
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_MAX_LEN=4096
+CONFIG_FEATURE_VI_8BIT=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+# CONFIG_FEATURE_VI_READONLY is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+# CONFIG_FEATURE_VI_SET is not set
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+CONFIG_FEATURE_ALLOW_EXEC=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_MAXDEPTH=y
+CONFIG_FEATURE_FIND_NEWER=y
+CONFIG_FEATURE_FIND_INUM=y
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_GROUP=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_FEATURE_FIND_DEPTH=y
+CONFIG_FEATURE_FIND_PAREN=y
+CONFIG_FEATURE_FIND_SIZE=y
+CONFIG_FEATURE_FIND_PRUNE=y
+# CONFIG_FEATURE_FIND_DELETE is not set
+CONFIG_FEATURE_FIND_PATH=y
+CONFIG_FEATURE_FIND_REGEX=y
+# CONFIG_FEATURE_FIND_CONTEXT is not set
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_KILL_REMOVED is not set
+CONFIG_FEATURE_KILL_DELAY=0
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_INIT_SYSLOG is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+# CONFIG_HALT is not set
+# CONFIG_FEATURE_CALL_TELINIT is not set
+CONFIG_TELINIT_PATH=""
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+CONFIG_FEATURE_SHADOWPASSWDS=y
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_CRYPT is not set
+# CONFIG_USE_BB_CRYPT_SHA is not set
+CONFIG_ADDGROUP=y
+# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set
+CONFIG_FEATURE_ADDUSER_TO_GROUP=y
+CONFIG_DELGROUP=y
+CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
+# CONFIG_FEATURE_CHECK_NAMES is not set
+CONFIG_ADDUSER=y
+CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
+CONFIG_FIRST_SYSTEM_ID=100
+CONFIG_LAST_SYSTEM_ID=999
+CONFIG_DELUSER=y
+CONFIG_GETTY=y
+CONFIG_FEATURE_UTMP=y
+# CONFIG_FEATURE_WTMP is not set
+CONFIG_LOGIN=y
+# CONFIG_PAM is not set
+# CONFIG_LOGIN_SCRIPTS is not set
+CONFIG_FEATURE_NOLOGIN=y
+CONFIG_FEATURE_SECURETTY=y
+CONFIG_PASSWD=y
+# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
+# CONFIG_CRYPTPW is not set
+# CONFIG_CHPASSWD is not set
+# CONFIG_SU is not set
+# CONFIG_FEATURE_SU_SYSLOG is not set
+# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_FSCK=y
+CONFIG_LSATTR=y
+
+#
+# Linux Module Utilities
+#
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODPROBE=y
+# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_DEPMOD=y
+
+#
+# Options common to multiple modutils
+#
+# CONFIG_FEATURE_2_4_MODULES is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
+CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
+CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+
+#
+# Linux System Utilities
+#
+# CONFIG_ACPID is not set
+# CONFIG_FEATURE_ACPID_COMPAT is not set
+# CONFIG_BLKID is not set
+CONFIG_DMESG=y
+CONFIG_FEATURE_DMESG_PRETTY=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+# CONFIG_FEATURE_FBSET_READMODE is not set
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+CONFIG_FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FINDFS is not set
+# CONFIG_FREERAMDISK is not set
+# CONFIG_FSCK_MINIX is not set
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+# CONFIG_MKFS_VFAT is not set
+# CONFIG_GETOPT is not set
+# CONFIG_FEATURE_GETOPT_LONG is not set
+CONFIG_HEXDUMP=y
+CONFIG_FEATURE_HEXDUMP_REVERSE=y
+# CONFIG_HD is not set
+# CONFIG_HWCLOCK is not set
+# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
+# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_RENAME is not set
+# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_UUID is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+# CONFIG_VOLUMEID is not set
+# CONFIG_FEATURE_VOLUMEID_EXT is not set
+# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
+# CONFIG_FEATURE_VOLUMEID_FAT is not set
+# CONFIG_FEATURE_VOLUMEID_HFS is not set
+# CONFIG_FEATURE_VOLUMEID_JFS is not set
+# CONFIG_FEATURE_VOLUMEID_XFS is not set
+# CONFIG_FEATURE_VOLUMEID_NTFS is not set
+# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
+# CONFIG_FEATURE_VOLUMEID_UDF is not set
+# CONFIG_FEATURE_VOLUMEID_LUKS is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
+# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
+# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
+# CONFIG_FEATURE_VOLUMEID_SYSV is not set
+# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+CONFIG_MOUNT=y
+# CONFIG_FEATURE_MOUNT_FAKE is not set
+# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+# CONFIG_FEATURE_MOUNT_HELPERS is not set
+# CONFIG_FEATURE_MOUNT_LABEL is not set
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_FEATURE_MOUNT_CIFS=y
+CONFIG_FEATURE_MOUNT_FLAGS=y
+CONFIG_FEATURE_MOUNT_FSTAB=y
+CONFIG_PIVOT_ROOT=y
+# CONFIG_RDATE is not set
+# CONFIG_RDEV is not set
+CONFIG_READPROFILE=y
+# CONFIG_RTCWAKE is not set
+# CONFIG_SCRIPT is not set
+# CONFIG_SCRIPTREPLAY is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+# CONFIG_FEATURE_SWAPON_PRI is not set
+CONFIG_SWITCH_ROOT=y
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_UMOUNT_ALL=y
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_BEEP is not set
+CONFIG_FEATURE_BEEP_FREQ=0
+CONFIG_FEATURE_BEEP_LENGTH_MS=0
+# CONFIG_CHAT is not set
+# CONFIG_FEATURE_CHAT_NOFAIL is not set
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
+# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
+# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
+# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
+# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
+# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
+# CONFIG_CHRT is not set
+CONFIG_CROND=y
+# CONFIG_FEATURE_CROND_D is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+CONFIG_FEATURE_CROND_DIR=""
+CONFIG_CRONTAB=y
+# CONFIG_DC is not set
+# CONFIG_FEATURE_DC_LIBM is not set
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_DEVMEM is not set
+CONFIG_EJECT=y
+CONFIG_FEATURE_EJECT_SCSI=y
+# CONFIG_FBSPLASH is not set
+# CONFIG_FLASH_LOCK is not set
+# CONFIG_FLASH_UNLOCK is not set
+# CONFIG_FLASH_ERASEALL is not set
+# CONFIG_IONICE is not set
+# CONFIG_INOTIFYD is not set
+# CONFIG_LAST is not set
+# CONFIG_FEATURE_LAST_SMALL is not set
+# CONFIG_FEATURE_LAST_FANCY is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_MAXLINES=9999999
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_FEATURE_LESS_WINCH is not set
+# CONFIG_FEATURE_LESS_DASHCMD is not set
+# CONFIG_FEATURE_LESS_LINENUMS is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+CONFIG_MAKEDEVS=y
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+CONFIG_FEATURE_MAKEDEVS_TABLE=y
+# CONFIG_MAN is not set
+# CONFIG_MICROCOM is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RAIDAUTORUN is not set
+# CONFIG_READAHEAD is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+# CONFIG_SETSID is not set
+# CONFIG_STRINGS is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+# CONFIG_TIMEOUT is not set
+# CONFIG_TTYSIZE is not set
+# CONFIG_VOLNAME is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+# CONFIG_FEATURE_IPV6 is not set
+# CONFIG_FEATURE_UNIX_LOCAL is not set
+# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+CONFIG_ARP=y
+# CONFIG_ARPING is not set
+# CONFIG_BRCTL is not set
+# CONFIG_FEATURE_BRCTL_FANCY is not set
+# CONFIG_FEATURE_BRCTL_SHOW is not set
+# CONFIG_DNSD is not set
+CONFIG_ETHER_WAKE=y
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPD is not set
+# CONFIG_FEATURE_FTP_WRITE is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_RANGES is not set
+# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
+# CONFIG_FEATURE_HTTPD_PROXY is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
+# CONFIG_IFENSLAVE is not set
+# CONFIG_IFPLUGD is not set
+CONFIG_IFUPDOWN=y
+CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
+CONFIG_FEATURE_IFUPDOWN_IP=y
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
+# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set
+# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
+CONFIG_INETD=y
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_RULE is not set
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPRULE is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_NAMEIF is not set
+# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
+CONFIG_NC=y
+CONFIG_NC_SERVER=y
+CONFIG_NC_EXTRA=y
+CONFIG_NETSTAT=y
+# CONFIG_FEATURE_NETSTAT_WIDE is not set
+# CONFIG_FEATURE_NETSTAT_PRG is not set
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+# CONFIG_PING6 is not set
+CONFIG_FEATURE_FANCY_PING=y
+# CONFIG_PSCAN is not set
+CONFIG_ROUTE=y
+# CONFIG_SLATTACH is not set
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+CONFIG_TELNETD=y
+# CONFIG_FEATURE_TELNETD_STANDALONE is not set
+# CONFIG_TFTP is not set
+# CONFIG_TFTPD is not set
+# CONFIG_FEATURE_TFTP_GET is not set
+# CONFIG_FEATURE_TFTP_PUT is not set
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_TFTP_DEBUG is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+# CONFIG_APP_UDHCPD is not set
+# CONFIG_APP_DHCPRELAY is not set
+# CONFIG_APP_DUMPLEASES is not set
+# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
+CONFIG_DHCPD_LEASES_FILE=""
+CONFIG_APP_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+# CONFIG_FEATURE_UDHCP_PORT is not set
+CONFIG_UDHCP_DEBUG=0
+# CONFIG_FEATURE_UDHCP_RFC3397 is not set
+CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -b -T3 -A10"
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+# CONFIG_ZCIP is not set
+# CONFIG_TCPSVD is not set
+# CONFIG_TUNCTL is not set
+# CONFIG_FEATURE_TUNCTL_UG is not set
+# CONFIG_UDPSVD is not set
+
+#
+# Print Utilities
+#
+# CONFIG_LPD is not set
+# CONFIG_LPR is not set
+# CONFIG_LPQ is not set
+
+#
+# Mail Utilities
+#
+# CONFIG_MAKEMIME is not set
+CONFIG_FEATURE_MIME_CHARSET=""
+# CONFIG_POPMAILDIR is not set
+# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
+# CONFIG_REFORMIME is not set
+# CONFIG_FEATURE_REFORMIME_COMPAT is not set
+# CONFIG_SENDMAIL is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+# CONFIG_KILLALL5 is not set
+# CONFIG_NMETER is not set
+# CONFIG_PGREP is not set
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+# CONFIG_PKILL is not set
+CONFIG_PS=y
+# CONFIG_FEATURE_PS_WIDE is not set
+# CONFIG_FEATURE_PS_TIME is not set
+# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
+# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
+CONFIG_FEATURE_TOP_SMP_CPU=y
+CONFIG_FEATURE_TOP_DECIMALS=y
+CONFIG_FEATURE_TOP_SMP_PROCESS=y
+CONFIG_FEATURE_TOPMEM=y
+CONFIG_UPTIME=y
+# CONFIG_WATCH is not set
+
+#
+# Runit Utilities
+#
+# CONFIG_RUNSV is not set
+# CONFIG_RUNSVDIR is not set
+# CONFIG_FEATURE_RUNSVDIR_LOG is not set
+# CONFIG_SV is not set
+CONFIG_SV_DEFAULT_SERVICE_DIR=""
+# CONFIG_SVLOGD is not set
+# CONFIG_CHPST is not set
+# CONFIG_SETUIDGID is not set
+# CONFIG_ENVUIDGID is not set
+# CONFIG_ENVDIR is not set
+# CONFIG_SOFTLIMIT is not set
+# CONFIG_CHCON is not set
+# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
+# CONFIG_GETENFORCE is not set
+# CONFIG_GETSEBOOL is not set
+# CONFIG_LOAD_POLICY is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RESTORECON is not set
+# CONFIG_RUNCON is not set
+# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
+# CONFIG_SELINUXENABLED is not set
+# CONFIG_SETENFORCE is not set
+# CONFIG_SETFILES is not set
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_SETSEBOOL is not set
+# CONFIG_SESTATUS is not set
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+CONFIG_ASH_BASH_COMPAT=y
+CONFIG_ASH_JOB_CONTROL=y
+CONFIG_ASH_READ_NCHARS=y
+CONFIG_ASH_READ_TIMEOUT=y
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_GETOPTS=y
+CONFIG_ASH_BUILTIN_ECHO=y
+CONFIG_ASH_BUILTIN_PRINTF=y
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_HUSH is not set
+# CONFIG_HUSH_BASH_COMPAT is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_INTERACTIVE is not set
+# CONFIG_HUSH_JOB is not set
+# CONFIG_HUSH_TICK is not set
+# CONFIG_HUSH_IF is not set
+# CONFIG_HUSH_LOOPS is not set
+# CONFIG_HUSH_CASE is not set
+# CONFIG_HUSH_FUNCTIONS is not set
+# CONFIG_HUSH_LOCAL is not set
+# CONFIG_HUSH_EXPORT_N is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+CONFIG_SH_MATH_SUPPORT=y
+# CONFIG_SH_MATH_SUPPORT_64 is not set
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE is not set
+# CONFIG_FEATURE_SH_NOFORK is not set
+# CONFIG_CTTYHACK is not set
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+# CONFIG_FEATURE_SYSLOGD_DUP is not set
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
--- /dev/null
+diff -Naur busybox-1.11.3/networking/udhcp/dhcpc.c busybox-1.11.3_dhcp-hostname/networking/udhcp/dhcpc.c
+--- busybox-1.11.3/networking/udhcp/dhcpc.c 2008-06-25 14:51:14.000000000 +0200
++++ busybox-1.11.3_dhcp-hostname/networking/udhcp/dhcpc.c 2008-12-05 11:41:36.000000000 +0100
+@@ -145,6 +145,7 @@
+ struct timeval tv;
+ struct dhcpMessage packet;
+ fd_set rfds;
++ char hostbuf[256]; /* SUSv2: hostnames are <= 255 bytes */
+
+ #if ENABLE_GETOPT_LONG
+ static const char udhcpc_longopts[] ALIGN1 =
+@@ -210,6 +211,13 @@
+ USE_FEATURE_UDHCP_PORT(CLIENT_PORT = 68;)
+ client_config.interface = "eth0";
+ client_config.script = DEFAULT_SCRIPT;
++ if (gethostname (hostbuf, sizeof (hostbuf)) == 0) {
++ int len = strlen (hostbuf);
++ client_config.hostname = xmalloc (len + 2);
++ client_config.hostname[OPT_CODE] = DHCP_HOST_NAME;
++ client_config.hostname[OPT_LEN] = len;
++ strncpy(client_config.hostname + 2, hostbuf, len);
++ }
+
+ /* Parse command line */
+ /* Cc: mutually exclusive; O: list; -T,-t,-A take numeric param */
--- /dev/null
+--- busybox-1.15.3-org/miscutils/hdparm.c 2009-12-12 22:13:28.000000000 +0100
++++ busybox-1.15.3/miscutils/hdparm.c 2010-02-22 21:17:06.000000000 +0100
+@@ -288,6 +288,7 @@
+ smallint set_sleepnow;
+ smallint get_powermode;
+ smallint getset_apmmode;
++ smallint getset_acoustic;
+ int xfermode_requested;
+ unsigned long dkeep;
+ unsigned long standby_requested; /* 0..255 */
+@@ -297,6 +298,7 @@
+ unsigned long wcache;
+ unsigned long doorlock;
+ unsigned long apmmode;
++ unsigned long acoustic;
+ #endif
+ IF_FEATURE_HDPARM_GET_IDENTITY( smallint get_IDentity;)
+ IF_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( smallint getset_busstate;)
+@@ -361,6 +363,7 @@
+ #define set_sleepnow (G.set_sleepnow )
+ #define get_powermode (G.get_powermode )
+ #define getset_apmmode (G.getset_apmmode )
++#define getset_acoustic (G.getset_acoustic )
+ #define xfermode_requested (G.xfermode_requested )
+ #define dkeep (G.dkeep )
+ #define standby_requested (G.standby_requested )
+@@ -370,6 +373,7 @@
+ #define wcache (G.wcache )
+ #define doorlock (G.doorlock )
+ #define apmmode (G.apmmode )
++#define acoustic (G.acoustic )
+ #define get_IDentity (G.get_IDentity )
+ #define getset_busstate (G.getset_busstate )
+ #define perform_reset (G.perform_reset )
+@@ -1680,6 +1684,14 @@
+ ioctl_or_warn(fd, HDIO_DRIVE_CMD, &args);
+ args[1] = 0;
+ }
++ if (getset_acoustic == IS_SET) {
++ printf(" setting AAM level to 0x%02lX (%ld)\n", acoustic, acoustic);
++ ioctl_or_warn(fd, HDIO_SET_ACOUSTIC, (int*)acoustic);
++ }
++ if (getset_acoustic) {
++ ioctl_or_warn(fd, HDIO_GET_ACOUSTIC, (unsigned long*)&parm);
++ printf(" acoustic = %2ld (128=quiet ... 254=fast)\n", parm);
++ }
+ if (getset_wcache == IS_SET) {
+ #ifdef DO_FLUSHCACHE
+ #ifndef WIN_FLUSHCACHE
+@@ -1986,7 +1998,7 @@
+ IF_FEATURE_HDPARM_GET_IDENTITY("iI")
+ IF_FEATURE_HDPARM_HDIO_GETSET_DMA("d::")
+ #ifdef HDIO_DRIVE_CMD
+- "S:D:P:X:K:A:L:W:CyYzZ"
++ "S:D:P:X:K:A:L:W:CyYzZM:"
+ #endif
+ IF_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF("U:")
+ #ifdef HDIO_GET_QDMA
+@@ -2026,6 +2038,7 @@
+ if (c == 'k') getset_keep = parse_opts_0_1(&keep);
+ if (c == 'a') getset_readahead = parse_opts_0_INTMAX(&Xreadahead);
+ if (c == 'B') getset_apmmode = parse_opts(&apmmode, 1, 255);
++ if (c == 'M') getset_acoustic = parse_opts(&acoustic, 1, 254);
+ do_flush |= do_timings |= (c == 't');
+ do_flush |= do_ctimings |= (c == 'T');
+ #ifdef HDIO_DRIVE_CMD
--- /dev/null
+diff -Naur busybox-1.11.3/console-tools/dumpkmap.c busybox-1.11.3_keymap-endianess/console-tools/dumpkmap.c
+--- busybox-1.11.3/console-tools/dumpkmap.c 2008-06-25 14:51:18.000000000 +0200
++++ busybox-1.11.3_keymap-endianess/console-tools/dumpkmap.c 2008-12-05 11:36:21.000000000 +0100
+@@ -10,6 +10,7 @@
+ /* no options, no getopt */
+
+ #include "libbb.h"
++#include <endian.h>
+
+ /* From <linux/kd.h> */
+ struct kbentry {
+@@ -56,6 +57,9 @@
+ (char *)&ke.kb_table,
+ &ke.kb_value)
+ ) {
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ ke.kb_value = ((ke.kb_value&0xFF) << 8) | ((ke.kb_value&0xFF00) >> 8);
++#endif
+ write(STDOUT_FILENO, (void*)&ke.kb_value, 2);
+ }
+ }
+diff -Naur busybox-1.11.3/console-tools/loadkmap.c busybox-1.11.3_keymap-endianess/console-tools/loadkmap.c
+--- busybox-1.11.3/console-tools/loadkmap.c 2008-06-25 14:51:18.000000000 +0200
++++ busybox-1.11.3_keymap-endianess/console-tools/loadkmap.c 2008-12-05 11:36:53.000000000 +0100
+@@ -9,6 +9,7 @@
+ */
+
+ #include "libbb.h"
++#include <endian.h>
+
+ #define BINARY_KEYMAP_MAGIC "bkeymap"
+
+@@ -49,6 +50,9 @@
+ for (j = 0; j < NR_KEYS; j++) {
+ ke.kb_index = j;
+ ke.kb_table = i;
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ ibuff[j] = ((ibuff[j]&0xFF) << 8) | ((ibuff[j]&0xFF00) >> 8);
++#endif
+ ke.kb_value = ibuff[j];
+ ioctl(fd, KDSKBENT, &ke);
+ }
--- /dev/null
+--- busybox-1.15.3-org/include/libbb.h 2010-04-23 16:11:13.000000000 +0200
++++ busybox-1.15.3/include/libbb.h 2010-04-23 15:07:04.000000000 +0200
+@@ -1279,6 +1279,8 @@
+ DIR *dir;
+ uint8_t shift_pages_to_bytes;
+ uint8_t shift_pages_to_kb;
++ DIR *taskdir;
++ unsigned parentpid;
+ /* Fields are set to 0/NULL if failed to determine (or not requested) */
+ uint16_t argv_len;
+ char *argv0;
+--- busybox-1.15.3-org/libbb/procps.c 2010-04-23 16:11:13.000000000 +0200
++++ busybox-1.15.3/libbb/procps.c 2010-04-23 16:06:55.000000000 +0200
+@@ -178,7 +178,7 @@
+ {
+ struct dirent *entry;
+ char buf[PROCPS_BUFSIZE];
+- char filename[sizeof("/proc//cmdline") + sizeof(int)*3];
++ char filename[sizeof("/proc//task//cmdline//") + sizeof(int)*6];
+ char *filename_tail;
+ long tasknice;
+ unsigned pid;
+@@ -188,11 +188,14 @@
+ if (!sp)
+ sp = alloc_procps_scan();
+
+- for (;;) {
+- entry = readdir(sp->dir);
+- if (entry == NULL) {
+- free_procps_scan(sp);
+- return NULL;
++ for(;;) {
++ if (!sp->taskdir)
++ break;
++ entry = readdir(sp->taskdir);
++ if(entry == NULL) {
++ closedir(sp->taskdir);
++ sp->taskdir = 0;
++ break;
+ }
+ pid = bb_strtou(entry->d_name, NULL, 10);
+ if (errno)
+@@ -216,7 +219,7 @@
+ }
+ #endif
+
+- filename_tail = filename + sprintf(filename, "/proc/%u/", pid);
++ filename_tail = filename + sprintf(filename, "/proc/%u/task/%u/", sp->parentpid, pid);
+
+ if (flags & PSSCAN_UIDGID) {
+ if (stat(filename, &sb))
+@@ -468,6 +471,33 @@
+ break;
+ } /* for (;;) */
+
++ if(sp->taskdir)
++ return sp;
++
++ for (;;) {
++ entry = readdir(sp->dir);
++ if (entry == NULL) {
++ free_procps_scan(sp);
++ return NULL;
++ }
++ pid = bb_strtou(entry->d_name, NULL, 10);
++ if (errno)
++ continue;
++
++ filename_tail = filename + sprintf(filename, "/proc/%u/", pid);
++
++ if (!sp->taskdir) {
++ strcpy(filename_tail, "task");
++ sp->taskdir = opendir(filename);
++ if(!sp->taskdir) {
++ // ignore processes without taskdir
++ continue;
++ }
++ sp->parentpid = pid;
++ return procps_scan(sp, flags);
++ }
++ }
++
+ return sp;
+ }
+
--- /dev/null
+#!/bin/sh
+
+# udhcpc script edited by Tim Riker <Tim@Rikers.org>
+
+[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
+
+RESOLV_CONF="/etc/resolv.conf"
+[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
+[ -n "$subnet" ] && NETMASK="netmask $subnet"
+
+# return 0 if root is mounted on a network filesystem
+root_is_nfs() {
+ grep -qe '^/dev/root.*\(nfs\|smbfs\|ncp\|coda\) .*' /proc/mounts
+}
+
+have_bin_ip=0
+if [ -x /bin/ip ]; then
+ have_bin_ip=1
+fi
+
+case "$1" in
+ deconfig)
+ if ! root_is_nfs ; then
+ if [ $have_bin_ip -eq 1 ]; then
+ ip addr flush dev $interface
+ ip link set dev $interface up
+ else
+ /sbin/ifconfig $interface 0.0.0.0
+ fi
+ fi
+ ;;
+
+ renew|bound)
+ if [ $have_bin_ip -eq 1 ]; then
+ ip addr add dev $interface local $ip/$mask $BROADCAST
+ else
+ /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
+ fi
+
+ if [ -n "$router" ] ; then
+ if ! root_is_nfs ; then
+ if [ $have_bin_ip -eq 1 ]; then
+ while ip route del default dev $interface 2>/dev/null ; do
+ :
+ done
+ else
+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do
+ :
+ done
+ fi
+ fi
+
+ metric=0
+ if [ -e /etc/default_gw ]; then
+ default_gw=`cat /etc/default_gw`
+ else
+ default_gw=$interface
+ fi
+ if [ "$interface" == "$default_gw" ]; then
+ for i in $router ; do
+ if [ $have_bin_ip -eq 1 ]; then
+ ip route add default dev $interface via $i metric $((metric++)) 2>/dev/null
+ else
+ route add default gw $i dev $interface metric $((metric++)) 2>/dev/null
+ fi
+ done
+ fi
+
+ fi
+
+ echo -n > $RESOLV_CONF
+ [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
+ for i in $dns ; do
+ echo adding dns $i
+ echo nameserver $i >> $RESOLV_CONF
+ done
+ ;;
+esac
+
+exit 0
--- /dev/null
+DESTINATION="file" # log destinations (buffer file remote)
+MARKINT=20 # interval between --mark-- entries [min]
+REDUCE=no # reduced-size logging
+BUFFERSIZE=64 # buffer: size of circular buffer [kByte]
+LOGFILE=/var/log/messages # file: where to log
+ROTATESIZE=32 # file: rotate log if grown beyond X [kByte] (busybox 1.2+)
+ROTATEGENS=1 # file: keep X generations of rotated logs (busybox 1.2+)
+REMOTE=loghost:514 # remote: where to log
+FOREGROUND=no # run in foreground (don't use!)
require busybox.inc
PR = "${INC_PR}.4"
+PR_vuplus = "${INC_PR}.2"
SRC_URI = "\
http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://keymap_endianess.patch;patch=1 \
file://nptl_task.patch;patch=1 \
"
+SRC_URI_append_vuplus = "\
+ file://hdparm_M.patch;patch=1 \
+ file://dhcp-hostname.patch;patch=1 \
+ file://keymap_endianess.patch;patch=1 \
+ file://nptl_task.patch;patch=1 \
+"
EXTRA_OEMAKE += "V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}"
--- /dev/null
+#!/bin/sh
+# hwclock.sh Set system clock to hardware clock, according to the UTC
+# setting in /etc/default/rcS (see also rcS(5)).
+#
+# WARNING: If your hardware clock is not in UTC/GMT, this script
+# must know the local time zone. This information is
+# stored in /etc/localtime. This might be a problem if
+# your /etc/localtime is a symlink to something in
+# /usr/share/zoneinfo AND /usr isn't in the root
+# partition! The workaround is to define TZ either
+# in /etc/default/rcS, or in the proper place below.
+
+[ ! -x /sbin/hwclock ] && exit 0
+
+. /etc/default/rcS
+
+case "$1" in
+ start)
+ if [ "$VERBOSE" != no ]
+ then
+ echo "System time was `date`."
+ echo "Setting the System Clock using the Hardware Clock as reference..."
+ fi
+
+ if [ "$HWCLOCKACCESS" != no ]
+ then
+ if [ -z "$TZ" ]
+ then
+ hwclock --hctosys
+ else
+ TZ="$TZ" hwclock --hctosys
+ fi
+ fi
+
+ if [ "$VERBOSE" != no ]
+ then
+ echo "System Clock set. System local time is now `date`."
+ fi
+ ;;
+ stop|restart|reload|force-reload)
+ #
+ # Updates the Hardware Clock with the System Clock time.
+ # This will *override* any changes made to the Hardware Clock.
+ #
+ # WARNING: If you disable this, any changes to the system
+ # clock will not be carried across reboots.
+ #
+ if [ "$VERBOSE" != no ]
+ then
+ echo "Saving the System Clock time to the Hardware Clock..."
+ fi
+ if [ "$HWCLOCKACCESS" != no ]
+ then
+ hwclock --systohc
+ fi
+ if [ "$VERBOSE" != no ]
+ then
+ echo "Hardware Clock updated to `date`."
+ fi
+ exit 0
+ ;;
+ show)
+ if [ "$HWCLOCKACCESS" != no ]
+ then
+ hwclock --show
+ fi
+ ;;
+ *)
+ echo "Usage: hwclock.sh {start|stop|show|reload|restart}" >&2
+ echo " start sets kernel (system) clock from hardware (RTC) clock" >&2
+ echo " stop and reload set hardware (RTC) clock from kernel (system) clock" >&2
+ exit 1
+ ;;
+esac
file://xconfig.patch;patch=1"
SRC_URI_append_opendreambox = " file://cdrkit-1.1.9-glibc-2.10-3.patch;patch=1"
+SRC_URI_append_vuplus = " file://cdrkit-1.1.9-glibc-2.10-3.patch;patch=1"
S="${WORKDIR}/cdrkit-${PV}"
PR = "r3"
LICENSE = "GPL"
DEPENDS = "expat glib-2.0 virtual/libintl libsm libice virtual/libx11"
DEPENDS_opendreambox = "expat glib-2.0 virtual/libintl"
+DEPENDS_vuplus = "expat glib-2.0 virtual/libintl"
INC_PR = "r18"
EXTRA_OECONF_X = "--with-x"
EXTRA_OECONF_X_opendreambox = ""
+EXTRA_OECONF_X_vuplus = ""
EXTRA_OECONF = "\
--disable-qt \
INITSCRIPT_NAME = "dbus-1"
INITSCRIPT_PARAMS = "start 02 5 2 . stop 20 0 1 6 ."
INITSCRIPT_PARAMS_opendreambox = "start 05 S 2 3 5 . stop 20 0 1 6 ."
+INITSCRIPT_PARAMS_vuplus = "start 05 S 2 3 5 . stop 20 0 1 6 ."
PACKAGE_ARCH = "${MACHINE_ARCH}"
SRC_URI = "http://sources.dreamboxupdate.com/download/opendreambox/dreambox-blindscan-utils-${MACHINE}-${PV}.tar.bz2"
+SRC_URI_vuplus = "http://sources.dreamboxupdate.com/download/opendreambox/dreambox-blindscan-utils-dm8000-${PV}.tar.bz2"
S = "${WORKDIR}/blindscan-utils"
rm -rf ${D}${datadir}/zoneinfo/*
}
+do_install_append_vuplus() {
+ rm -rf ${D}${datadir}/zoneinfo/*
+}
+
TMP_LOCALE="/tmp/locale${libdir}/locale"
locale_base_postinst() {
MAINTAINER = "tmbinc@elitedvb.net"
PR = "r4"
+PR_vuplus = "r5"
SRC_URI = "file://*"
PACKAGES_DYNAMIC = "enigma2-plugin-*"
SRCDATE = "20100213"
+SRCDATE_vuplus = "20100621"
+
# if you want the 2.7.0 release, use
#TAG = ";tag=enigma2-plugins_rel27"
TAG = ""
PV = "experimental-cvs${SRCDATE}"
+#if vuplus
+TAG_vuplus = ";tag=enigma2-plugins_rel28"
+PV_vuplus = "2.8cvs${SRCDATE}"
+
SRC_URI = "cvs://anonymous@cvs.schwerkraft.elitedvb.net/cvsroot/enigma2-plugins;module=enigma2-plugins;method=pserver${TAG};date=${SRCDATE}"
+SRC_URI_append_vuplus = " \
+ file://dreamboxweb.png \
+ file://favicon.ico"
+
FILES_${PN} += " /usr/share/enigma2 /usr/share/fonts "
FILES_${PN}-meta = "${datadir}/meta"
PACKAGES += "${PN}-meta"
DEPENDS = "python-pyopenssl python-gdata streamripper python-mutagen"
DEPENDS += "enigma2"
+
+def modify_po():
+ import os
+ try:
+ os.system("find ./ -name \"*.po\" > ./po_list")
+ os.system("find ./ -name \"*.pot\" >> ./po_list")
+ po_list = []
+ po_list = open('po_list','r+').readlines()
+ for x in po_list:
+ changeword1(x)
+ changeword1('enigma2-plugins/networkwizard/src/networkwizard.xml ')
+ changeword2('enigma2-plugins/webinterface/src/web-data/tpl/default/index.html ')
+ os.system('rm po_list')
+ except:
+ print 'word patch error '
+ return
+
+def changeword1(file):
+ fn = file[:-1]
+ fnn = file[:-1]+'_n'
+ cmd = "sed s/Dreambox/STB/g "+fn+" > "+fnn
+ os.system(cmd)
+ cmd1 = "mv "+fnn+" "+fn
+ os.system(cmd1)
+
+def changeword2(file):
+ fn = file[:-1]
+ fnn = file[:-1]+'_n'
+ cmd = "sed s/Dreambox/Vu+/g "+fn+" > "+fnn
+ os.system(cmd)
+ cmd1 = "mv "+fnn+" "+fn
+ os.system(cmd1)
+
+do_unpack_append(){
+ modify_po()
+}
+
+
+do_install_append_vuplus() {
+ install -m 0644 ${WORKDIR}/dreamboxweb.png ${D}/usr/lib/enigma2/python/Plugins/Extensions/WebInterface/web-data/img/
+ install -m 0644 ${WORKDIR}/favicon.ico ${D}/usr/lib/enigma2/python/Plugins/Extensions/WebInterface/web-data/img/
+}
+
python populate_packages_prepend () {
enigma2_plugindir = bb.data.expand('${libdir}/enigma2/python/Plugins', d)
PACKAGES_DYNAMIC = "enigma2-skin-*"
SRCDATE = "20100213"
+SRCDATE_vuplus = "20100621"
# if you want the 2.7 release, use
#TAG = ";tag=enigma2-skins_rel27"
TAG = ""
PV = "experimental-cvs${SRCDATE}"
+# if vuplus
+TAG_vuplus = ";tag=enigma2-skins_rel28"
+PV_vuplus = "2.8cvs${SRCDATE}"
+
SRC_URI = "cvs://anonymous@cvs.schwerkraft.elitedvb.net/cvsroot/enigma2-skins;module=enigma2-skins;method=pserver${TAG};date=${SRCDATE}"
+
FILES_${PN} += " /usr/share/enigma2 /usr/share/fonts "
FILES_${PN}-meta = "${datadir}/meta"
PACKAGES += "${PN}-meta"
RDEPENDS_append_dm500hd = " gst-plugin-alsa alsa-conf gst-plugin-avi gst-plugin-matroska \
gst-plugin-qtdemux gst-plugin-cdxaparse gst-plugin-cdio gst-plugin-vcdsrc gst-plugin-vorbis \
${RTSP_RDEPENDS}"
+RDEPENDS_append_vusolo = " gst-plugin-alsa alsa-conf gst-plugin-avi gst-plugin-matroska \
+ gst-plugin-qtdemux gst-plugin-cdxaparse gst-plugin-cdio gst-plugin-vcdsrc gst-plugin-vorbis \
+ ${RTSP_RDEPENDS}"
+RDEPENDS_append_bm750 = " gst-plugin-alsa alsa-conf gst-plugin-avi gst-plugin-matroska \
+ gst-plugin-qtdemux gst-plugin-cdxaparse gst-plugin-cdio gst-plugin-vcdsrc gst-plugin-vorbis \
+ ${RTSP_RDEPENDS}"
RDEPENDS_append_dm800se = " gst-plugin-alsa alsa-conf gst-plugin-avi gst-plugin-matroska \
gst-plugin-qtdemux gst-plugin-cdxaparse gst-plugin-cdio gst-plugin-vcdsrc gst-plugin-vorbis \
${RTSP_RDEPENDS}"
PR = "r0"
SRCDATE = "20100318"
+SRCDATE_vuplus = "20100719"
#SRCDATE is NOT used by git to checkout a specific revision
#but we need it to build a ipk package version
#when you like to checkout a specific revision of e2 you need
#SRCREV = "d5a16c6e9d0ee1cc2dc0d65b4321842dea4b0891"
####################################################
+# if you want a vuplus release, use
+####################################################
+#BRANCH_vuplus = "vuplus"
+#PV_vuplus = "2.8git${SRCDATE}"
+#SRCREV_vuplus = "4186f8c308d9450353520a88eb5a5ee3940281d3"
+####################################################
+
+#if you want a vuplus experimental, use
+####################################################
+BRANCH_vuplus = "vuplus_experimental"
+PV_vuplus = "experimental-git${SRCDATE}"
+SRCREV_vuplus = ""
+####################################################
+
SRC_URI = "git://git.opendreambox.org/git/enigma2.git;protocol=git;branch=${BRANCH};tag=${SRCREV} \
file://new-hotplug.patch;patch=1;pnum=1 \
file://enigma2.sh"
+SRC_URI_bm750 = "git://archive.vuplus.com/git/enigma2.git;protocol=http;branch=${BRANCH};tag=${SRCREV} \
+ file://enigma2_vuplus_duo.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_skin.patch;patch=1;pnum=1 \
+ file://MyriadPro-Regular.otf \
+ file://MyriadPro-Semibold.otf \
+ file://MyriadPro-SemiboldIt.otf \
+ file://750S \
+ file://Vu_HD \
+ file://number_key \
+ file://enigma2.sh"
+
+SRC_URI_vusolo = "git://archive.vuplus.com/git/enigma2.git;protocol=http;branch=${BRANCH};tag=${SRCREV} \
+ file://enigma2_vuplus_skin.patch;patch=1;pnum=1 \
+ file://MyriadPro-Regular.otf \
+ file://MyriadPro-Semibold.otf \
+ file://MyriadPro-SemiboldIt.otf \
+ file://750S \
+ file://Vu_HD \
+ file://number_key \
+ file://enigma2.sh"
+
+def change_po():
+ import os
+ try:
+ os.system("find ./ -name \"*.po\" > ./po_list")
+ os.system("find ./ -name \"*.pot\" >> ./po_list")
+ po_list = []
+ po_list = open('po_list','r+').readlines()
+ for x in po_list:
+ changeword(x)
+ os.system('rm po_list')
+ except:
+ print 'word patch error '
+ return
+
+def changeword(file):
+ fn = file[:-1]
+ fnn = file[:-1]+'_n'
+ cmd = "sed s/Dreambox/STB/g "+fn+" > "+fnn
+ os.system(cmd)
+ cmd1 = "mv "+fnn+" "+fn
+ os.system(cmd1)
+
+do_unpack_append(){
+ change_po()
+}
+
S = "${WORKDIR}/git"
FILES_${PN} += "${datadir}/fonts"
EXTRA_OECONF = "--with-target=native --with-libsdl=no"
+do_compile_prepend_vuplus() {
+ install -m 0755 ${WORKDIR}/MyriadPro-Regular.otf ${S}/data/fonts/
+ install -m 0755 ${WORKDIR}/MyriadPro-Semibold.otf ${S}/data/fonts/
+ install -m 0755 ${WORKDIR}/MyriadPro-SemiboldIt.otf ${S}/data/fonts/
+ install -m 0755 ${WORKDIR}/750S/*.png ${S}/data/750S/
+ install -m 0755 ${WORKDIR}/750S/buttons/*.png ${S}/data/750S/buttons/
+ install -m 0755 ${WORKDIR}/750S/countries/*.png ${S}/data/750S/countries/
+ install -m 0755 ${WORKDIR}/750S/icons/*.png ${S}/data/750S/icons/
+ install -m 0755 ${WORKDIR}/750S/menu/*.png ${S}/data/750S/menu/
+ install -m 0755 ${WORKDIR}/750S/spinner/*.png ${S}/data/skin_default/spinner/
+ install -m 0755 ${WORKDIR}/Vu_HD/*.png ${S}/data/Vu_HD/
+ install -m 0755 ${WORKDIR}/Vu_HD/buttons/*.png ${S}/data/Vu_HD/buttons/
+ install -m 0755 ${WORKDIR}/Vu_HD/countries/*.png ${S}/data/Vu_HD/countries/
+ install -m 0755 ${WORKDIR}/Vu_HD/icons/*.png ${S}/data/Vu_HD/icons/
+ install -m 0755 ${WORKDIR}/Vu_HD/menu/*.png ${S}/data/Vu_HD/menu/
+ install -m 0755 ${WORKDIR}/number_key/*.png ${S}/data/skin_default/buttons/
+}
+
do_install_append() {
install -m 0755 ${WORKDIR}/enigma2.sh ${D}/usr/bin/
}
--- /dev/null
+diff --git a/acinclude.m4 b/acinclude.m4
+index ab3835e..dd6ef07 100755
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -159,6 +159,8 @@ fi
+
+ #csh
+ AC_DEFINE(BUILD_VUPLUS,1,[Define to 1 for 750])
++ # ikseong
++AC_DEFINE(BUILD_VUPLUS_DUO,1,[Define to 1 for 750])
+
+ if test "$DVB_API_VERSION"; then
+ AC_DEFINE(HAVE_DVB,1,[Define to 1 if you have the dvb includes])
+diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
+index 6b09d3d..40c2289 100755
+--- a/lib/dvb/frontend.cpp
++++ b/lib/dvb/frontend.cpp
+@@ -2730,3 +2730,45 @@ arg_error:
+ "eDVBFrontend::setSlotInfo must get a tuple with first param slotid, second param slot description and third param enabled boolean");
+ return false;
+ }
++
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++#ifndef SW_LOOP_THROUGH
++#define SW_LOOP_THROUGH _IOW('o',103,int)
++#endif
++/*
++* by ikseong
++* for loopthrough
++* onoff 1 - on
++* 0 - off
++*/
++RESULT eDVBFrontend::setLoopthrough(int onoff)
++{
++ char filename[128];
++ int result;
++ int fd;
++ if ( m_fd<0)
++ {
++ sprintf(filename, "/dev/dvb/adapter0/frontend%d",m_slotid);
++ fd = ::open(filename, O_RDWR|O_NONBLOCK);
++ }
++ else
++ {
++ eDebug("fd = %d",m_fd);
++ fd=m_fd;
++ }
++ if(fd > 0)
++ {
++ result = ::ioctl(fd, SW_LOOP_THROUGH, &onoff);
++ eDebug("\n slot %d Loopthrough %d ->",m_slotid,onoff);
++ if (result < 0)
++ eDebugNoNewLine(" %d = %m",result);
++ else
++ eDebugNoNewLine("ok");
++ if(m_fd<0)
++ ::close(fd);
++ }
++ else
++ eDebug("eDVBFrontend::setLoopthrough %d open error",m_slotid);
++ return 0;
++}
++#endif
+diff --git a/lib/dvb/frontend.h b/lib/dvb/frontend.h
+index bef4a18..9aebc71 100644
+--- a/lib/dvb/frontend.h
++++ b/lib/dvb/frontend.h
+@@ -152,6 +152,11 @@ public:
+ int closeFrontend(bool force=false, bool no_delayed=false);
+ const char *getDescription() const { return m_description; }
+ bool is_simulate() const { return m_simulate; }
++
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++ RESULT setLoopthrough(int onoff);
++#endif
++
+ };
+
+ #endif // SWIG
+diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp
+index 58fc5e3..6ece243 100644
+--- a/lib/dvb/sec.cpp
++++ b/lib/dvb/sec.cpp
+@@ -1018,6 +1018,9 @@ RESULT eDVBSatelliteEquipmentControl::clear()
+ }
+ }
+ it->m_frontend->setData(eDVBFrontend::SATPOS_DEPENDS_PTR, -1);
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++ it->m_frontend->setLoopthrough(0);
++#endif
+ it->m_frontend->setData(eDVBFrontend::LINKED_PREV_PTR, -1);
+ it->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, -1);
+ it->m_frontend->setData(eDVBFrontend::ROTOR_POS, -1);
+@@ -1028,6 +1031,9 @@ RESULT eDVBSatelliteEquipmentControl::clear()
+ for (eSmartPtrList<eDVBRegisteredFrontend>::iterator it(m_avail_simulate_frontends.begin()); it != m_avail_simulate_frontends.end(); ++it)
+ {
+ it->m_frontend->setData(eDVBFrontend::SATPOS_DEPENDS_PTR, -1);
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++ it->m_frontend->setLoopthrough(0);
++#endif
+ it->m_frontend->setData(eDVBFrontend::LINKED_PREV_PTR, -1);
+ it->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, -1);
+ it->m_frontend->setData(eDVBFrontend::ROTOR_POS, -1);
+@@ -1459,6 +1465,9 @@ RESULT eDVBSatelliteEquipmentControl::setTunerLinked(int tu1, int tu2)
+ fclose(f);
+ }
+ }
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++ p1->m_frontend->setLoopthrough(1);
++#endif
+ }
+
+ p1=p2=NULL;
+@@ -1474,6 +1483,9 @@ RESULT eDVBSatelliteEquipmentControl::setTunerLinked(int tu1, int tu2)
+ {
+ p1->m_frontend->setData(eDVBFrontend::LINKED_PREV_PTR, (long)p2);
+ p2->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, (long)p1);
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++ p1->m_frontend->setLoopthrough(1);
++#endif
+ return 0;
+ }
+ }
+diff --git a/lib/gdi/glcddc.cpp b/lib/gdi/glcddc.cpp
+index 096705e..bcf0f5f 100755
+--- a/lib/gdi/glcddc.cpp
++++ b/lib/gdi/glcddc.cpp
+@@ -34,6 +34,16 @@ void gLCDDC::exec(gOpcode *o)
+ {
+ switch (o->opcode)
+ {
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++ case gOpcode::renderText:
++ if (o->parm.renderText->text)
++ {
++ lcd->updates(gDC::m_current_offset,o->parm.renderText->text);
++ free(o->parm.renderText->text);
++ delete o->parm.renderText;
++ }
++ break;
++#endif
+ case gOpcode::flush:
+ // if (update)
+ #ifndef BUILD_VUPLUS /* ikseong */
+diff --git a/lib/gdi/lcd.cpp b/lib/gdi/lcd.cpp
+index 9cb657c..51af908 100755
+--- a/lib/gdi/lcd.cpp
++++ b/lib/gdi/lcd.cpp
+@@ -228,3 +228,32 @@ void eDBoxLCD::update()
+ }
+ }
+
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++char *eDBoxLCD::remaketext(char *text)
++{
++ int len = strlen(text);
++ int i;
++ char *result;
++ for(i=0;i<len;i++)
++ {
++ if(text[i]==0x0a)
++ result[i] = 0x20;
++ else
++ result[i]=text[i];
++ }
++ return text;
++}
++
++void eDBoxLCD::updates(ePoint start,char *text)
++{
++ char *result;
++ if((lcdfd >= 0) && (start.y() < 5))
++ {
++// eDebug("vfd output - %s",text);
++ result = remaketext(text);
++// eDebug("vfd output - %s",result);
++ //write(lcdfd,text,strlen(text));
++ write(lcdfd,result,strlen(result));
++ }
++}
++#endif
+diff --git a/lib/gdi/lcd.h b/lib/gdi/lcd.h
+index e7b4c2c..561e3b0 100644
+--- a/lib/gdi/lcd.h
++++ b/lib/gdi/lcd.h
+@@ -36,6 +36,9 @@ public:
+ int stride() { return _stride; }
+ eSize size() { return res; }
+ virtual void update()=0;
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++ virtual void updates(ePoint start,char *text) = 0;
++#endif
+ #endif
+ };
+
+@@ -59,6 +62,10 @@ public:
+ void setInverted( unsigned char );
+ bool isOled() const { return !!is_oled; }
+ void update();
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++ char *remaketext(char *text);
++ void updates(ePoint start,char *text);
++#endif
+ };
+
+ #endif
+diff --git a/lib/python/Screens/ChoiceBox.py b/lib/python/Screens/ChoiceBox.py
+index 7c8b142..39e70d4 100644
+--- a/lib/python/Screens/ChoiceBox.py
++++ b/lib/python/Screens/ChoiceBox.py
+@@ -31,7 +31,9 @@ class ChoiceBox(Screen):
+ pos += 1
+ self["list"] = ChoiceList(list = self.list, selection = selection)
+ self["summary_list"] = StaticText()
+- self.updateSummary()
++# ikseong
++# self.updateSummary()
++ self.updateSummary(selection)
+
+ self["actions"] = NumberActionMap(["WizardActions", "InputActions", "ColorActions", "DirectionActions"],
+ {
+@@ -120,14 +122,21 @@ class ChoiceBox(Screen):
+ def updateSummary(self, curpos=0):
+ pos = 0
+ summarytext = ""
++# ikseong
++# for entry in self.summarylist:
++# if pos > curpos-2 and pos < curpos+5:
++# if pos == curpos:
++# summarytext += ">"
++# else:
++# summarytext += entry[0]
++# summarytext += ' ' + entry[1] + '\n'
++# pos += 1
+ for entry in self.summarylist:
+- if pos > curpos-2 and pos < curpos+5:
+- if pos == curpos:
+- summarytext += ">"
+- else:
+- summarytext += entry[0]
+- summarytext += ' ' + entry[1] + '\n'
++ if pos == curpos:
++ summarytext += entry[1] +'\n'
++ break
+ pos += 1
++#
+ self["summary_list"].setText(summarytext)
+
+ def cancel(self):
+diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i
+index 0bddce1..040952d 100755
+--- a/lib/python/enigma_python.i
++++ b/lib/python/enigma_python.i
+@@ -131,6 +131,7 @@ is usually caused by not marking PSignals as immutable.
+
+ #define DEBUG
+ #define BUILD_VUPLUS
++#define BUILD_VUPLUS_DUO
+ typedef long time_t;
+ %include "typemaps.i"
+ %include "std_string.i"
--- /dev/null
+diff --git a/configure.ac b/configure.ac
+index 0953e4c..85b8f78 100755
+--- a/configure.ac
++++ b/configure.ac
+@@ -98,6 +98,16 @@ data/skin_default/menu/Makefile
+ data/skin_default/icons/Makefile
+ data/skin_default/buttons/Makefile
+ data/skin_default/spinner/Makefile
++data/750S/Makefile
++data/750S/menu/Makefile
++data/750S/icons/Makefile
++data/750S/buttons/Makefile
++data/750S/countries/Makefile
++data/Vu_HD/Makefile
++data/Vu_HD/menu/Makefile
++data/Vu_HD/icons/Makefile
++data/Vu_HD/buttons/Makefile
++data/Vu_HD/countries/Makefile
+ include/Makefile
+ lib/Makefile
+ lib/actions/Makefile
+diff --git a/data/750S/Makefile.am b/data/750S/Makefile.am
+new file mode 100644
+index 0000000..a516e82
+--- /dev/null
++++ b/data/750S/Makefile.am
+@@ -0,0 +1,6 @@
++SUBDIRS = menu icons buttons countries
++
++installdir = $(DATADIR)/enigma2/750S
++
++install_DATA = \
++ *.xml *.png
+diff --git a/data/750S/buttons/Makefile.am b/data/750S/buttons/Makefile.am
+new file mode 100644
+index 0000000..eb83d1c
+--- /dev/null
++++ b/data/750S/buttons/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(DATADIR)/enigma2/750S/buttons
++
++install_DATA = \
++ *.png
+diff --git a/data/750S/countries/Makefile.am b/data/750S/countries/Makefile.am
+new file mode 100644
+index 0000000..4517ada
+--- /dev/null
++++ b/data/750S/countries/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(DATADIR)/enigma2/750S/countries
++
++install_DATA = \
++ *.png
+diff --git a/data/750S/icons/Makefile.am b/data/750S/icons/Makefile.am
+new file mode 100644
+index 0000000..9277cc5
+--- /dev/null
++++ b/data/750S/icons/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(DATADIR)/enigma2/750S/icons
++
++install_DATA = \
++ *.png
+diff --git a/data/750S/menu/Makefile.am b/data/750S/menu/Makefile.am
+new file mode 100644
+index 0000000..ff165af
+--- /dev/null
++++ b/data/750S/menu/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(DATADIR)/enigma2/750S/menu
++
++install_DATA = \
++ *.png
+diff --git a/data/750S/skin.xml b/data/750S/skin.xml
+new file mode 100755
+index 0000000..7be3bca
+--- /dev/null
++++ b/data/750S/skin.xml
+@@ -0,0 +1,2489 @@
++<skin>
++ <!-- VU+ skin (skin.xml) -->
++ <output id="0">
++ <resolution xres="720" yres="576" bpp="32" />
++ </output>
++ <!-- Colors (#AARRGGBB) -->
++ <colors>
++ <color name="white" value="#ffffff" />
++ <color name="black" value="#000000" />
++ <color name="dark" value="#25062748" />
++ <color name="menu" value="#25062748" />
++ <color name="red" value="#f23d21" />
++ <color name="green" value="#389416" />
++ <color name="blue" value="#0064c7" />
++ <color name="yellow" value="#bab329" />
++ <color name="transparent" value="#ffffffff" />
++ <color name="transpBlack" value="#80000000" />
++ <color name="transpWhite" value="#80ffffff" />
++ <color name="background" value="#25e6e6e6" />
++ <color name="foreground" value="#ffffff" />
++ </colors>
++ <!-- Main screen colors (id=0 Framebuffer) -->
++ <windowstyle type="skinned" id="0">
++ <title offset="33,14" font="Regular;20" />
++ <color name="Background" color="#371e1c1a" />
++ <color name="LabelForeground" color="#ffffff" />
++ <color name="ListboxBackground" color="#371e1c1a" />
++ <color name="ListboxForeground" color="#ffffff" />
++<!-- <color name="ListboxSelectedBackground" color="#11252525" /> -->
++ <color name="ListboxSelectedBackground" color="#336c5f38" />
++ <color name="ListboxSelectedForeground" color="#ffffff" />
++ <color name="ListboxMarkedBackground" color="#ff0000" />
++ <color name="ListboxMarkedForeground" color="#ffffff" />
++ <color name="ListboxMarkedAndSelectedBackground" color="#800000" />
++ <color name="ListboxMarkedAndSelectedForeground" color="#ffffff" />
++ <color name="WindowTitleForeground" color="#ffffff" />
++ <color name="WindowTitleBackground" color="#25062748" />
++ <!-- Main screen border png's -->
++ <borderset name="bsWindow">
++ <pixmap pos="bpTopLeft" filename="750S/b_tl.png" />
++ <pixmap pos="bpTop" filename="750S/b_t.png" />
++ <pixmap pos="bpTopRight" filename="750S/b_tr.png" />
++ <pixmap pos="bpLeft" filename="750S/b_l.png" />
++ <pixmap pos="bpRight" filename="750S/b_r.png" />
++ <pixmap pos="bpBottomLeft" filename="750S/b_bl.png" />
++ <pixmap pos="bpBottom" filename="750S/b_b.png" />
++ <pixmap pos="bpBottomRight" filename="750S/b_br.png" />
++ </borderset>
++ </windowstyle>
++ <!-- Main screen colors (id=1 LCD) -->
++ <windowstyle type="skinned" id="1">
++ <color name="Background" color="#000000" />
++ <color name="LabelForeground" color="#ffffff" />
++ <color name="ListboxBackground" color="#000000" />
++ <color name="ListboxForeground" color="#ffffff" />
++ <color name="ListboxSelectedBackground" color="#000000" />
++ <color name="ListboxSelectedForeground" color="#ffffff" />
++ <color name="ListboxMarkedBackground" color="#000000" />
++ <color name="ListboxMarkedForeground" color="#ffffff" />
++ <color name="ListboxMarkedAndSelectedBackground" color="#000000" />
++ <color name="ListboxMarkedAndSelectedForeground" color="#ffffff" />
++ <color name="WindowTitleForeground" color="#ffffff" />
++ <color name="WindowTitleBackground" color="#000000" />
++ </windowstyle>
++ <!-- Fonts -->
++ <fonts>
++ <font filename="MyriadPro-Regular.otf" name="Regular" scale="90" />
++ <font filename="lcd.ttf" name="LCD" scale="100" />
++ <font filename="ae_AlMateen.ttf" name="Replacement" scale="90" replacement="1" />
++ <font filename="tuxtxt.ttf" name="Console" scale="100" />
++ <font filename="nmsbd.ttf" name="Subtitlefont" scale="90" />
++ </fonts>
++ <subtitles>
++ <sub name="Subtitle_TTX" font="Subtitlefont;30" shadowColor="#40101010" shadowOffset="3,3" />
++ <sub name="Subtitle_Regular" font="Subtitlefont;30" foregroundColor="#DCDCDC" shadowColor="#40101010" shadowOffset="3,3" />
++ <sub name="Subtitle_Bold" font="Replacement;30" foregroundColor="#DCDCDC" shadowColor="#40101010" shadowOffset="3,3" />
++ <sub name="Subtitle_Italic" font="Subtitlefont;30" foregroundColor="#DCAAAA" shadowColor="#40101010" shadowOffset="3,3" />
++ <!-- omitting foregroundColor attribute will enable auto-assignment of color -->
++ </subtitles>
++ <!-- Main infobar -->
++ <screen name="InfoBar" flags="wfNoBorder" position="0,380" size="720,164" title="InfoBar" backgroundColor="transparent">
++ <!-- Background -->
++ <ePixmap position="40,0" zPosition="-1" size="640,164" pixmap="750S/info-bg.png" />
++ <!-- Signal Quality -->
++ <eLabel text="SNR" position="320,6" size="40,22" font="Regular;18" backgroundColor="#102e59" foregroundColor="#cccccc" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1" />
++ <widget source="session.FrontendStatus" render="Label" position="360,6" size="80,22" font="Regular;18" backgroundColor="#102e59" foregroundColor="#e7e7e7" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1">
++ <convert type="FrontendInfo">SNRdB</convert>
++ </widget>
++ <!-- Signal Strength -->
++ <eLabel text="AGC" position="440,6" size="40,22" font="Regular;18" backgroundColor="#102e59" foregroundColor="#cccccc" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1" />
++ <widget source="session.FrontendStatus" render="Label" position="485,6" size="40,22" font="Regular;18" backgroundColor="#102e59" foregroundColor="#e7e7e7" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <!-- Bit error rate -->
++<!-- <eLabel text="BER" position="595,6" size="40,22" font="Regular;18" backgroundColor="#102e59" foregroundColor="#cccccc" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1" />
++ <widget source="session.FrontendStatus" render="Label" position="640,6" size="35,22" font="Regular;18" backgroundColor="#102e59" foregroundColor="#e7e7e7" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1">
++ <convert type="FrontendInfo">BER</convert>
++ </widget> -->
++ <!-- Service name -->
++ <widget source="session.CurrentService" render="Label" position="130,30" size="360,27" font="Regular;21" valign="center" halign="left" noWrap="1" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <!-- tuners in use? -->
++ <widget source="session.FrontendInfo" render="Pixmap" position="290,9" size="8,9" pixmap="750S/nim_active.png" alphatest="on">
++ <convert type="FrontendInfo">NUMBER</convert>
++ <convert type="ValueRange">0,0</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.FrontendInfo" render="Pixmap" position="290,9" size="8,9" pixmap="750S/nim_active.png" alphatest="on">
++ <convert type="FrontendInfo">NUMBER</convert>
++ <convert type="ValueRange">1,1</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.FrontendInfo" render="Pixmap" position="350,32" size="8,9" pixmap="750S/nim_active.png" alphatest="on">
++ <convert type="FrontendInfo">NUMBER</convert>
++ <convert type="ValueRange">2,2</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.FrontendInfo" render="Pixmap" position="350,45" size="8,9" pixmap="750S/nim_active.png" alphatest="on">
++ <convert type="FrontendInfo">NUMBER</convert>
++ <convert type="ValueRange">3,3</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.TunerInfo" render="FixedLabel" text="A" position="265,6" size="20,13" font="Regular;18" backgroundColor="#4e5a74" transparent="1">
++ <convert type="TunerInfo">TunerUseMask</convert>
++ <convert type="ValueBitTest">1</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.TunerInfo" render="FixedLabel" text="B" position="277,6" size="20,13" font="Regular;18" backgroundColor="#4e5a74" transparent="1">
++ <convert type="TunerInfo">TunerUseMask</convert>
++ <convert type="ValueBitTest">2</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.TunerInfo" render="FixedLabel" text="C" position="265,30" size="20,13" font="Regular;18" backgroundColor="#4e5a74" transparent="1">
++ <convert type="TunerInfo">TunerUseMask</convert>
++ <convert type="ValueBitTest">4</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.TunerInfo" render="FixedLabel" text="D" position="265,43" size="20,13" font="Regular;18" backgroundColor="#4e5a74" transparent="1">
++ <convert type="TunerInfo">TunerUseMask</convert>
++ <convert type="ValueBitTest">8</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <ePixmap pixmap="750S/icons/clock.png" position="568,4" zPosition="1" size="16,16" alphatest="on" />
++ <widget source="global.CurrentTime" render="Label" position="580,5" zPosition="1" size="50,20" font="Regular;19" halign="right">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <!--
++ <widget source="global.CurrentTime" render="Label" position="633,6" zPosition="1" size="26,18" font="Regular;16" valign="top">
++ <convert type="ClockToText">Format:%S</convert>
++ </widget> -->
++ <!-- Crypt icon (encrypted service?) -->
++ <ePixmap position="559,36" zPosition="0" size="70,15" pixmap="750S/icons/icons_off.png" alphatest="on" />
++ <widget source="session.CurrentService" render="Pixmap" pixmap="750S/icons/icon_crypt.png" position="559,36" zPosition="1" size="11,15" alphatest="on">
++ <convert type="ServiceInfo">IsCrypted</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Teletext icon (is teletext available?) -->
++ <widget source="session.CurrentService" render="Pixmap" pixmap="750S/icons/icon_txt.png" position="576,36" zPosition="1" size="18,15" alphatest="on">
++ <convert type="ServiceInfo">HasTelext</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Videoformat icon (16:9?) -->
++ <widget source="session.CurrentService" render="Pixmap" pixmap="750S/icons/icon_format.png" position="600,36" zPosition="1" size="28,15" alphatest="on">
++ <convert type="ServiceInfo">IsWidescreen</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Audio icon (is there multichannel audio?) -->
++ <widget source="session.CurrentService" render="Pixmap" pixmap="750S/icons/icon_dolby.png" position="634,36" zPosition="1" size="25,15" alphatest="on">
++ <convert type="ServiceInfo">IsMultichannel</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Progressbar (current event duration)-->
++ <ePixmap pixmap="750S/progress_bg.png" position="60,77" size="84,7" transparent="1" alphatest="on" />
++ <widget source="session.Event_Now" render="Progress" pixmap="750S/progress_small.png" position="62,78" zPosition="1" size="80,5" transparent="1">
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <!-- Blinking pixmap (recording in progress?) -->
++ <ePixmap pixmap="750S/icons/icon_rec_off.png" position="525,36" size="34,21" alphatest="on" />
++ <widget source="session.RecordState" render="Pixmap" pixmap="750S/icons/icon_rec.png" position="525,36" zPosition="1" size="34,21" alphatest="on" >
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ <!-- Event (now) -->
++ <ePixmap pixmap="750S/nim_active.png" position="182,78" size="15,10" alphatest="on" />
++ <widget source="session.Event_Now" render="Label" position="205,73" size="60,24" font="Regular;20" backgroundColor="#34406f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="265,73" size="310,24" font="Regular;20" noWrap="1" backgroundColor="#34406f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="575,73" size="85,24" font="Regular;20" backgroundColor="#34406f" shadowColor="#1d354c" shadowOffset="-1,-1" halign="right" transparent="1">
++ <convert type="EventTime">Remaining</convert>
++ <convert type="RemainingToText">InMinutes</convert>
++ </widget>
++ <!-- Event (next) -->
++ <widget source="session.Event_Next" render="Label" position="205,97" size="60,24" font="Regular;20" backgroundColor="#071f38" foregroundColor="#c3c3c9" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="265,97" size="310,24" font="Regular;20" noWrap="1" backgroundColor="#071f38" foregroundColor="#c3c3c9" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="575,97" size="85,24" font="Regular;20" backgroundColor="#071f38" foregroundColor="#c3c3c9" halign="right" transparent="1">
++ <convert type="EventTime">Duration</convert>
++ <convert type="ClockToText">InMinutes</convert>
++ </widget>
++ <!-- Red button (is recording possible?) -->
++ <ePixmap pixmap="750S/buttons/button_red_off.png" position="60,132" size="22,22" alphatest="on" />
++ <widget source="RecordingPossible" render="Pixmap" pixmap="750S/buttons/button_red.png" position="60,132" zPosition="1" size="22,22" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="ShowRecordOnRed" render="FixedLabel" text="Record" position="90,132" zPosition="1" size="80,22" font="Regular;20" foregroundColor="#7f848d" backgroundColor="#182946" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="RecordingPossible" render="FixedLabel" text="Record" position="90,132" zPosition="1" size="80,22" font="Regular;20" backgroundColor="#182946" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Green button (is subservices available?) -->
++ <ePixmap pixmap="750S/buttons/button_green_off.png" position="220,132" size="22,22" alphatest="on" />
++ <widget source="session.CurrentService" render="Pixmap" pixmap="750S/buttons/button_green.png" position="220,132" zPosition="1" size="22,22" alphatest="on">
++ <convert type="ServiceInfo">SubservicesAvailable</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <eLabel text="Subservices" position="260,132" size="100,22" font="Regular;20" foregroundColor="#7f848d" backgroundColor="#182946" transparent="1" />
++ <widget source="session.CurrentService" render="FixedLabel" text="Subservices" position="250,132" zPosition="1" size="100,22" font="Regular;20" backgroundColor="#182946" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ServiceInfo">SubservicesAvailable</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Yellow button (is timeshift possible?) -->
++ <ePixmap pixmap="750S/buttons/button_yellow_off.png" position="380,132" size="22,22" alphatest="on" />
++ <widget source="TimeshiftPossible" render="Pixmap" pixmap="750S/buttons/button_yellow.png" position="380,132" zPosition="1" size="22,22" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="ShowTimeshiftOnYellow" render="FixedLabel" text="Timeshift" position="410,132" zPosition="1" size="85,22" font="Regular;20" foregroundColor="#7f848d" backgroundColor="#182946" shadowOffset="-1,-1" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="TimeshiftPossible" render="FixedLabel" text="Timeshift" position="410,132" zPosition="1" size="85,22" font="Regular;20" backgroundColor="#182946" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++
++ <!-- Yellow button (used for audio on boxes with new rc?) -->
++ <widget source="ShowAudioOnYellow" render="Pixmap" pixmap="750S/buttons/button_yellow.png" position="380,132" zPosition="1" size="22,22" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="ShowAudioOnYellow" render="FixedLabel" text="Audio" position="410,132" zPosition="1" size="85,22" font="Regular;20" backgroundColor="#182946" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Blue button (is extensions available?) -->
++ <ePixmap pixmap="750S/buttons/button_blue_off.png" position="540,132" size="22,22" alphatest="on" />
++ <widget source="ExtensionsAvailable" render="Pixmap" pixmap="750S/buttons/button_blue.png" position="540,132" zPosition="1" size="22,22" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <eLabel text="Extensions" position="570,132" size="110,22" font="Regular;20" foregroundColor="#7f848d" backgroundColor="#182946" transparent="1" />
++ <widget source="ExtensionsAvailable" render="FixedLabel" text="Extensions" position="570,132" zPosition="1" size="110,22" font="Regular;20" backgroundColor="#182946" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ </screen>
++ <!-- Main menu -->
++ <screen name="menu_mainmenu" position="0,0" size="720,576" title="Main menu" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_main.png" zPosition="-1" position="94,85" size="530,415" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_mainmenu.png" position="110,100" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="Main menu" position="170,113" size="200,30" font="Regular;30" foregroundColor="#e1e1e1" backgroundColor="#371e1c1a" transparent="1" />
++ <widget source="menu" render="Listbox" selectionPixmap="750S/buttons/Selected_bar_250x32px.png" backgroundColorSelected="#371e1c1a" position="130,176" size="250,315" transparent="1" backgroundColor="#371e1c1a" scrollbarMode="showNever">
++ <convert type="TemplatedMultiContent">
++ {"template": [ MultiContentEntryText(pos = (20, 5), size = (230, 30), flags = RT_HALIGN_LEFT, text = 0) ],
++ "fonts": [gFont("Regular", 25)],
++ "itemHeight": 39
++ }
++ </convert>
++ </widget>
++ <eLabel text=" " position="130,210" zPosition="-1" size="250,3" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,249" zPosition="-1" size="250,3" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,288" zPosition="-1" size="250,3" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,327" zPosition="-1" size="250,3" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,366" zPosition="-1" size="250,3" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,405" zPosition="-1" size="250,3" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,444" zPosition="-1" size="250,3" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,483" zPosition="-1" size="250,3" backgroundColor="#021a1816" />
++
++ <widget source="menu" render="Pixmap" pixmap="750S/menu/subtitles.png" position="400,190" size="155,140" alphatest="blend">
++ <convert type="MenuEntryCompare">subtitle_selection</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="750S/menu/setup.png" position="400,190" size="155,140" alphatest="blend">
++ <convert type="MenuEntryCompare">setup_selection</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="750S/menu/shutdown.png" position="400,190" size="155,140" alphatest="blend">
++ <convert type="MenuEntryCompare">standby_restart_list</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="750S/menu/plugins.png" position="400,190" size="155,140" alphatest="blend">
++ <convert type="MenuEntryCompare">plugin_selection</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="750S/menu/information.png" position="400,190" size="155,140" alphatest="blend">
++ <convert type="MenuEntryCompare">info_screen</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="750S/menu/scart.png" position="400,190" size="155,140" alphatest="blend">
++ <convert type="MenuEntryCompare">scart_switch</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="750S/menu/timer.png" position="400,190" size="155,140" alphatest="blend">
++ <convert type="MenuEntryCompare">timer_edit</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="750S/menu/media_player.png" position="400,190" size="155,140" alphatest="blend">
++ <convert type="MenuEntryCompare">media_player</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="FixedLabel" text="You can view available subtitles from current event." position="410,324" zPosition="1" size="190,130" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">subtitle_selection</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="-Service Searching" position="410,324" zPosition="1" size="195,22" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">setup_selection</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="-System" position="410,349" zPosition="1" size="195,22" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">setup_selection</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="-Parental control" position="410,374" zPosition="1" size="195,22" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">setup_selection</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="-Factory reset" position="410,399" zPosition="1" size="195,22" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">setup_selection</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="-Standby" position="410,324" zPosition="1" size="195,22" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">standby_restart_list</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="-Restart" position="410,349" zPosition="1" size="195,22" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">standby_restart_list</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="-Deep Standby" position="410,374" zPosition="1" size="195,22" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">standby_restart_list</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="This show the list of plug-ins you have installed." position="410,324" zPosition="1" size="200,120" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">plugin_selection</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="Your software version, memory usages and other Box information can be found from here." position="410,324" zPosition="1" size="200,120" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">info_screen</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="-Switch to VCR scart" position="410,324" zPosition="1" size="195,22" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">scart_switch</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="You can record or schedule to watch an event with this Timer function." position="410,324" zPosition="1" size="200,130" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">timer_edit</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="FixedLabel" text="This box can play various of multimedia file formats." position="410,324" zPosition="1" size="200,130" font="Regular;19" backgroundColor="#182946" foregroundColor="#998462" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="MenuEntryCompare">media_player</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++<!--
++ <widget source="menu" render="Pixmap" pixmap="750S/menu/dvd_player.png" position="400,190" size="218,202" alphatest="blend">
++ <convert type="MenuEntryCompare">dvd_player</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++-->
++ </screen>
++ <!-- Movieplayer infobar -->
++ <screen name="MoviePlayer" flags="wfNoBorder" position="0,380" size="720,164" title="InfoBar" backgroundColor="transparent">
++ <!-- Background -->
++ <ePixmap position="40,0" pixmap="750S/info-bg_mp.png" zPosition="-1" size="640,164" />
++ <!-- colorbuttons -->
++ <ePixmap position="275,120" pixmap="750S/icons/mp_buttons.png" size="169,30" alphatest="blend" />
++ <!-- Servicename -->
++ <widget source="session.CurrentService" render="Label" position="65,30" size="475,30" font="Regular;28" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <!-- movie length -->
++ <widget source="session.CurrentService" render="Label" position="565,30" size="90,24" font="Regular;20" halign="right" backgroundColor="#4e5a74" transparent="1">
++ <convert type="ServicePosition">Length</convert>
++ </widget>
++ <!-- Elapsed time -->
++ <widget source="session.CurrentService" render="Label" position="35,75" size="100,24" font="Regular;20" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ServicePosition">Position</convert>
++ </widget>
++ <!-- Progressbar (movie position)-->
++ <widget source="session.CurrentService" render="PositionGauge" position="130,80" size="460,20" zPosition="2" pointer="750S/position_pointer.png:460,0" transparent="1">
++ <convert type="ServicePosition">Gauge</convert>
++ </widget>
++ <!-- Remaining time -->
++ <widget source="session.CurrentService" render="Label" position="580,75" size="100,20" font="Regular;20" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ServicePosition">Remaining</convert>
++ </widget>
++ </screen>
++
++ <!-- 750S skin (750S.xml) -->
++ <!-- About screen -->
++ <screen name="About" position="0,0" size="720,576" title="Serviceinfo" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_main.png" zPosition="-1" position="90,70" size="530,415" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_mainmenu.png" position="110,85" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="Main menu > Information > " position="160,105" size="230,30" font="Regular;20" foregroundColor="#676767" backgroundColor="#371e1c1a" transparent="1" />
++ <eLabel text="About" position="380,100" size="200,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <widget source="EnigmaVersion" render="Label" position="110,150" size="380,20" font="Regular;20" />
++ <widget source="ImageVersion" render="Label" position="110,180" size="380,20" font="Regular;20" />
++ <widget source="FPVersion" render="Label" position="110,210" size="380,20" font="Regular;20" />
++ <widget source="TunerHeader" render="Label" position="110,240" size="380,20" font="Regular;20" />
++ <widget source="Tuner0" render="Label" position="110,265" size="400,20" font="Regular;20" />
++ <widget source="Tuner1" render="Label" position="110,285" size="400,20" font="Regular;20" />
++ <widget source="Tuner2" render="Label" position="110,305" size="400,20" font="Regular;20" />
++ <widget source="Tuner3" render="Label" position="110,325" size="400,20" font="Regular;20" />
++ <widget source="HDDHeader" render="Label" position="110,355" size="380,20" font="Regular;20" />
++ <widget source="hddA" render="Label" position="110,380" size="380,40" font="Regular;20" />
++ </screen>
++ <!-- Adapter setup -->
++ <screen name="AdapterSetup" position="110,115" size="500,415" title="Network Setup" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,375" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="360,375" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,375" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_blue" render="Label" position="380,375" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++
++ <widget name="config" position="10,10" transparent="1" backgroundColor="#371e1c1a" size="480,125" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="750S/div-h.png" position="0,140" zPosition="1" size="550,2" />
++ <widget source="DNS1text" render="Label" position="10,145" size="190,21" zPosition="1" font="Regular;19" />
++ <widget source="DNS2text" render="Label" position="10,175" size="190,21" zPosition="1" font="Regular;19" />
++ <widget source="DNS1" render="Label" position="380,145" size="120,21" zPosition="1" font="Regular;17" />
++ <widget source="DNS2" render="Label" position="380,175" size="120,21" zPosition="1" font="Regular;17" />
++ <ePixmap pixmap="750S/div-h.png" position="0,200" zPosition="1" size="550,2" />
++
++ <widget source="introduction" render="Label" position="10,205" size="440,20" font="Regular;19" halign="center" />
++ <widget source="IPtext" render="Label" position="100,240" size="190,21" zPosition="1" font="Regular;19" />
++ <widget source="Netmasktext" render="Label" position="100,265" size="190,21" zPosition="1" font="Regular;19" />
++ <widget source="Gatewaytext" render="Label" position="100,290" size="190,21" zPosition="1" font="Regular;19" />
++ <widget source="IP" render="Label" position="300,240" size="440,21" zPosition="1" font="Regular;19" />
++ <widget source="Mask" render="Label" position="300,265" size="440,21" zPosition="1" font="Regular;19" />
++ <widget source="Gateway" render="Label" position="300,290" size="440,21" zPosition="1" font="Regular;19" />
++
++ <widget source="Adaptertext" render="Label" position="20,325" size="100,21" zPosition="10" font="Regular;19" transparent="1" />
++ <widget source="Adapter" render="Label" position="110,325" size="300,21" zPosition="10" font="Regular;19" transparent="1" />
++ <widget source="introduction2" render="Label" position="110,355" size="300,20" zPosition="10" font="Regular;21" halign="center" transparent="1" />
++ <widget name="VKeyIcon" pixmap="750S/buttons/key_text.png" position="10,380" zPosition="10" size="35,25" transparent="1" alphatest="on" />
++ <widget name="HelpWindow" pixmap="750S/vkey_icon.png" position="160,315" zPosition="1" size="1,1" transparent="1" alphatest="on" />
++ </screen>
++ <screen name="AdapterSetupConfiguration" position="110,120" size="500,400" title="Network Configuration..." >
++ <ePixmap pixmap="750S/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="30,360" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <ePixmap pixmap="750S/div-h.png" position="0,350" zPosition="1" size="560,2" />
++ <ePixmap pixmap="750S/border_menu_a.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
++ <widget name="menulist" position="20,20" size="230,260" selectionPixmap="750S/buttons/Selected_bar_230x23px.png" transparent="1" backgroundColor="#371e1c1a" zPosition="10" scrollbarMode="showOnDemand" />
++ <widget source="description" render="Label" position="305,10" size="195,300" font="Regular;19" halign="center" valign="center" />
++ <widget source="IFtext" render="Label" position="20,325" size="100,21" zPosition="10" font="Regular;19" transparent="1" />
++ <widget source="IF" render="Label" position="110,325" size="300,21" zPosition="10" font="Regular;19" transparent="1" />
++ <widget source="Statustext" render="Label" position="340,325" size="115,21" zPosition="10" font="Regular;19" transparent="1"/>
++ <widget name="statuspic" pixmaps="750S/buttons/button_green.png,750S/buttons/button_green_off.png" position="460,322" zPosition="10" size="22,22" transparent="1" alphatest="on"/>
++ </screen>
++ <!-- Audio selection -->
++ <screen name="AudioSelection" position="center,center" size="560,330" title="Audio">
++ <widget name="config" position="50,10" size="500,110" scrollbarMode="showOnDemand" />
++
++ <widget source="key_red" render="Pixmap" pixmap="750S/buttons/button_red.png" position="10,10" size="22,22" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="key_green" render="Pixmap" pixmap="750S/buttons/button_green.png" position="10,35" size="22,22" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="key_yellow" render="Pixmap" pixmap="750S/buttons/button_yellow.png" position="10,60" size="22,22" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="key_blue" render="Pixmap" pixmap="750S/buttons/button_blue.png" position="10,85" size="22,22" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++
++ <ePixmap pixmap="skin_default/div-h.png" position="10,112" zPosition="10" size="540,2" />
++
++ <widget source="streams" render="Listbox" scrollbarMode="showOnDemand" position="10,120" size="540,200" zPosition="3" transparent="1" >
++ <convert type="TemplatedMultiContent">
++ {"templates":
++ {"default": (25, [
++ MultiContentEntryText(pos = (0, 0), size = (35, 25), font = 0, flags = RT_HALIGN_LEFT, text = 1), # key,
++ MultiContentEntryText(pos = (40, 0), size = (60, 25), font = 0, flags = RT_HALIGN_LEFT, text = 2), # number,
++ MultiContentEntryText(pos = (110, 0), size = (120, 25), font = 0, flags = RT_HALIGN_LEFT, text = 3), # description,
++ MultiContentEntryText(pos = (240, 0), size = (200, 25), font = 0, flags = RT_HALIGN_LEFT, text = 4), # language,
++ MultiContentEntryText(pos = (450, 4), size = (90, 25), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # selection,
++ ], True, "showNever"),
++ "notselected": (25, [
++ MultiContentEntryText(pos = (0, 0), size = (35, 25), font = 0, flags = RT_HALIGN_LEFT, text = 1), # key,
++ MultiContentEntryText(pos = (40, 0), size = (60, 25), font = 0, flags = RT_HALIGN_LEFT, text = 2), # number,
++ MultiContentEntryText(pos = (110, 0), size = (120, 25), font = 0, flags = RT_HALIGN_LEFT, text = 3), # description,
++ MultiContentEntryText(pos = (240, 0), size = (200, 25), font = 0, flags = RT_HALIGN_LEFT, text = 4), # language,
++ MultiContentEntryText(pos = (450, 4), size = (90, 25), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # selection,
++ ], False, "showNever")
++ },
++ "fonts": [gFont("Regular", 20), gFont("Regular", 16)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ </screen>
++ <!-- Bouquet selector -->
++ <screen name="BouquetSelector" position="210,160" size="300,240" title="Choose bouquet">
++ <widget name="menu" position="10,10" transparent="1" size="290,225" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Channel context menu -->
++ <screen name="ChannelContextMenu" position="210,163" size="300,255" title="Channellist menu">
++ <widget name="menu" position="10,10" transparent="1" size="290,230" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Channel selection - TV -->
++ <screen name="ChannelSelection" position="0, 0" size="720,576" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_list.png" position="60,25" size="600,520" zPosition="-1" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_channelselection_tv.png" position="90,35" size="44,44" alphatest="blend" transparent="1" />
++ <widget name="etitle" position="140,50" size="450,30" font="Regular;30" halign="left" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="80,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="220,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,125" size="136,40" alphatest="on" />
++ <widget name="key_red" position="100,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="240,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="380,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="520,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="list" position="80,185" size="555,228" scrollbarMode="showOnDemand" transparent="1" />
++ <widget source="ServiceEvent" render="Label" position="95,422" zPosition="1" size="460,20" font="Regular;19" noWrap="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <ePixmap pixmap="750S/icons/clock.png" position="565,422" zPosition="1" size="16,16" alphatest="on" />
++ <widget source="global.CurrentTime" render="Label" position="585,422" zPosition="1" size="50,20" font="Regular;19" halign="right">
++ <convert type="ClockToText"></convert>
++ </widget>
++ <widget source="ServiceEvent" render="Label" position="295,442" zPosition="1" size="340,20" font="Regular;19" halign="right" noWrap="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="ServiceEvent" render="Label" position="95,442" zPosition="1" size="50,22" font="Regular;19">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText"></convert>
++ </widget>
++ <widget source="ServiceEvent" render="Label" position="145,442" zPosition="1" size="70,22" font="Regular;19">
++ <convert type="EventTime">EndTime</convert>
++ <convert type="ClockToText">Format:- %H:%M</convert>
++ </widget>
++ <widget source="ServiceEvent" render="Progress" position="210,445" zPosition="1" pixmap="750S/progress_medium.png" size="80,11" borderWidth="2" borderColor="#cccccc">
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="ServiceEvent" render="Label" position="95,463" zPosition="1" size="540,56" font="Regular;18" foregroundColor="#cccccc">
++ <convert type="EventName">ExtendedDescription</convert>
++ </widget>
++ </screen>
++ <!-- Channel selection - Radio -->
++ <screen name="ChannelSelectionRadio" position="0,0" size="720,576" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_list.png" position="60,25" size="600,520" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="750S/icons/icon_channelselection_radio.png" position="90,35" size="44,44" alphatest="blend" transparent="1" />
++ <widget name="etitle" position="140,50" size="450,30" font="Regular;30" halign="left" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="80,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="220,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,125" size="136,40" alphatest="on" />
++ <widget name="key_red" position="100,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="240,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="380,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="520,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="list" position="80,185" size="555,200" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Choice box -->
++ <screen name="ChoiceBox" position="150,120" size="550,400" title="Input">
++ <widget name="text" position="10,10" size="550,25" font="Regular;20" />
++ <widget name="list" position="0,50" size="550,335" transparent="1" scrollbarMode="showOnDemand" />
++ <applet type="onLayoutFinish">
++# this should be factored out into some helper code, but currently demonstrates applets.
++from enigma import eSize, ePoint
++
++orgwidth = self.instance.size().width()
++orgpos = self.instance.position()
++textsize = self["text"].getSize()
++
++# y size still must be fixed in font stuff...
++textsize = (textsize[0] + 50, textsize[1] + 50)
++count = len(self.list)
++if count > 10:
++ count = 10
++offset = 25 * count
++wsizex = textsize[0] + 60
++wsizey = textsize[1] + offset
++
++if (520 > wsizex):
++ wsizex = 520
++wsize = (wsizex, wsizey)
++
++# resize
++self.instance.resize(eSize(*wsize))
++
++# resize label
++self["text"].instance.resize(eSize(*textsize))
++
++# move list
++listsize = (wsizex, 25 * count)
++self["list"].instance.move(ePoint(0, textsize[1]))
++self["list"].instance.resize(eSize(*listsize))
++
++# center window
++newwidth = wsize[0]
++self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count > 7 and 2 or 3)))
++
++ </applet>
++ </screen>
++ <!-- Common interface -->
++ <screen name="MMIDialog" position="135,153" size="450,270">
++ <widget name="title" position="10,10" size="430,25" font="Regular;23" />
++ <widget name="subtitle" position="10,35" size="430,25" font="Regular;23" />
++ <widget name="entries" position="10,70" size="430,150" scrollbarMode="showOnDemand" />
++ <widget name="bottom" position="10,230" size="430,25" font="Regular;23" />
++ </screen>
++ <!-- Common interface - selection -->
++ <screen name="CiSelection" position="140,226" size="440,160" title="Common Interface">
++ <widget name="text" position="10,10" size="430,25" font="Regular;23" />
++ <widget name="entries" position="10,55" size="420,100" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Console -->
++ <screen name="Console" position="110,120" size="500,400" title="Command execution...">
++ <widget name="text" position="10,10" size="480,380" font="Console;14" />
++ </screen>
++ <!-- Clock display -->
++ <screen name="clockDisplay" position="300,120" size="300,300">
++ <widget name="okbutton" position="10,10" size="280,40" />
++ <widget name="title" position="10,120" size="280,50" />
++ <widget name="theClock" position="10,60" size="280,50" />
++ </screen>
++ <!-- Config OSD -->
++ <screen name="configOSD" position="130,120" size="460,350" title="OSD Settings">
++ <widget name="okbutton" position="20,270" size="205,40" />
++ <widget name="txt_alpha" position="20,20" size="110,20" />
++ <widget name="sld_alpha" position="150,20" size="290,20" />
++ <widget name="txt_brightness" position="20,60" size="120,20" />
++ <widget name="sld_brightness" position="150,20" size="290,20" />
++ <widget name="txt_gamma" position="20,100" size="120,20" />
++ <widget name="sld_gamma" position="150,100" size="290,20" />
++ </screen>
++ <!-- Config test -->
++ <screen name="configTest" position="300,100" size="300,300" title="config menu">
++ <widget name="config" position="10,30" size="420,220" />
++ </screen>
++ <!-- Default wizard -->
++ <screen name="DefaultWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="153,50" size="340,270" font="Regular;23" />
++ <widget source="list" render="Listbox" selectionPixmap="750S/buttons/Selected_bar_440x23px.png" backgroundColor="#371e1c1a" position="50,300" size="440,200" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <ePixmap pixmap="750S/buttons/button_red.png" position="40,227" size="22,22" alphatest="on" />
++ <widget name="languagetext" position="66,230" size="95,30" font="Regular;18" />
++ <widget name="config" backgroundColor="#371e1c1a" position="50,300" zPosition="1" size="440,200" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="rc" pixmap="750S/rc.png" position="520,600" zPosition="10" size="154,471" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="-100,-150" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-150" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-150" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <screen name="DefaultSatLists" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="153,50" size="340,270" font="Regular;23" />
++ <widget source="list" render="Listbox" transparent="1" position="50,300" size="440,200" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <ePixmap pixmap="750S/buttons/button_red.png" position="40,227" size="22,22" alphatest="on" />
++ <widget name="languagetext" position="66,230" size="95,30" font="Regular;18" />
++ <widget name="config" position="50,300" zPosition="1" size="440,200" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="rc" pixmap="750S/rc.png" position="520,600" zPosition="10" size="154,471" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <screen name="DreamPackageWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="153,50" size="340,270" font="Regular;23" />
++ <widget source="list" render="Listbox" position="50,300" size="440,200" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <ePixmap pixmap="750S/buttons/button_red.png" position="40,227" size="22,22" alphatest="on" />
++ <widget name="languagetext" position="66,230" size="95,30" font="Regular;18" />
++ <widget name="config" position="50,300" zPosition="1" size="440,200" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="rc" pixmap="750S/rc.png" position="520,600" zPosition="10" size="154,471" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <!-- Dish -->
++ <screen name="Dish" flags="wfNoBorder" position="300,110" size="130,160" title="Dish" zPosition="-1" backgroundColor="transparent">
++ <widget name="Dishpixmap" pixmap="750S/icons/dish.png" position="0,0" size="130,160" alphatest="off" />
++ </screen>
++ <!-- unhandled key pressed -->
++ <screen name="UnhandledKey" flags="wfNoBorder" position="620,50" size="34,45" title="UnhandledKey" zPosition="100" backgroundColor="transparent">
++ <widget name="UnhandledKeyPixmap" pixmap="750S/unhandled-key.png" position="0,0" size="34,45" alphatest="off" />
++ </screen>
++ <!-- EPG Selection - Single -->
++ <screen name="EPGSelection" position="0,0" size="720,576" title="EPG Selection" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_list.png" position="60,25" size="600,520" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="750S/icons/icon_epg.png" position="90,35" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="EPG Selection" position="140,45" size="220,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="80,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="220,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,125" size="136,40" alphatest="on" />
++ <widget name="key_red" position="100,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="240,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="380,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="520,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="list" position="80,180" size="555,350" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- EPG Selection - Multi -->
++ <screen name="EPGSelectionMulti" position="0,0" size="720,576" title="EPG Selection" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_list.png" zPosition="-1" position="60,25" size="600,520" alphatest="on" />
++ <ePixmap pixmap="750S/icons/icon_epg.png" position="90,35" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="EPG Selection Multi" position="140,45" size="250,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="80,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="220,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,125" size="136,40" alphatest="on" />
++ <widget name="key_red" position="100,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="240,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="380,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="520,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="now_button_sel" pixmap="750S/epg_now.png" position="90,175" zPosition="1" size="320,25" alphatest="on" />
++ <widget name="next_button_sel" pixmap="750S/epg_next.png" position="90,175" zPosition="1" size="320,25" alphatest="on" />
++ <widget name="more_button_sel" pixmap="750S/epg_more.png" position="90,175" zPosition="1" size="320,25" alphatest="on" />
++ <widget name="now_text" position="90,175" zPosition="2" size="108,22" text="NOW" font="Regular;16" halign="center" valign="center" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="next_text" position="196,175" zPosition="2" size="108,22" text="NEXT" font="Regular;16" halign="center" valign="center" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="more_text" position="301,175" zPosition="2" size="108,22" text="MORE" font="Regular;16" halign="center" valign="center" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="date" position="495,160" size="110,45" font="Regular;18" valign="center" halign="right" />
++ <widget name="list" position="96,203" size="520,320" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Eventview -->
++ <screen name="EventView" position="0,0" size="720,576" title="Eventview" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_list.png" zPosition="-1" position="60,25" size="600,520" alphatest="on" />
++ <ePixmap pixmap="750S/icons/icon_epg.png" position="90,35" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="Eventview" position="140,45" size="250,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="80,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="220,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,125" size="136,40" alphatest="on" />
++ <widget name="key_red" position="100,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="240,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="380,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="520,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="epg_description" position="95,175" size="530,325" font="Regular;22" />
++ <widget name="datetime" position="95,500" size="120,25" font="Regular;22" />
++ <widget name="duration" position="215,500" size="90,25" font="Regular;22" />
++ <widget name="channel" position="335,500" size="280,25" font="Regular;22" halign="right" />
++ </screen>
++ <!-- Graphical Multi EPG -->
++ <screen name="GraphMultiEPG" position="0,0" size="720,576" title="Electronic Program Guide" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_list.png" zPosition="-1" position="60,25" size="600,520" alphatest="on" />
++ <ePixmap pixmap="750S/icons/icon_epg.png" position="90,35" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="Electronic Program Guide" position="140,45" size="300,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="80,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="220,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,125" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,125" size="136,40" alphatest="on" />
++ <widget name="key_red" position="100,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="240,125" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="timeline_text" position="85,166" size="520,20" />
++ <widget name="list" position="80,190" size="550,270" transparent="1" backgroundColor="#371e1c1a" EntryBorderColor="#071930" EntryBackgroundColor="#2f4964" EntryBackgroundColorSelected="#25688caf" scrollbarMode="showOnDemand" />
++ <widget name="timeline0" position="85,190" zPosition="1" size="1,270" pixmap="750S/timeline.png" />
++ <widget name="timeline1" position="85,190" zPosition="1" size="1,270" pixmap="750S/timeline.png" />
++ <widget name="timeline2" position="85,190" zPosition="1" size="1,270" pixmap="750S/timeline.png" />
++ <widget name="timeline3" position="85,190" zPosition="1" size="1,270" pixmap="750S/timeline.png" />
++ <widget name="timeline4" position="85,190" zPosition="1" size="1,270" pixmap="750S/timeline.png" />
++ <widget name="timeline5" position="85,190" zPosition="1" size="1,270" pixmap="750S/timeline.png" />
++ <widget name="timeline_now" position="80,189" zPosition="2" size="19,273" pixmap="750S/timeline-now.png" alphatest="on" />
++ <ePixmap pixmap="750S/border_multiepg.png" position="80,167" zPosition="1" size="520,358" transparent="1" alphatest="on" />
++ <widget source="Event" render="Label" position="90,462" zPosition="1" size="450,20" font="Regular;19" noWrap="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <ePixmap pixmap="750S/icons/clock.png" position="550,462" zPosition="1" size="16,16" alphatest="on" />
++ <widget source="global.CurrentTime" render="Label" position="566,462" zPosition="1" size="50,20" font="Regular;18" halign="right">
++ <convert type="ClockToText"></convert>
++ </widget>
++ <widget source="Event" render="Label" position="90,482" zPosition="1" size="50,22" font="Regular;18">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText"></convert>
++ </widget>
++ <widget source="Event" render="Label" position="140,482" zPosition="1" size="70,22" font="Regular;18">
++ <convert type="EventTime">EndTime</convert>
++ <convert type="ClockToText">Format:- %H:%M</convert>
++ </widget>
++ <widget source="Event" render="Progress" position="200,485" zPosition="1" pixmap="750S/progress_medium.png" size="65,11" borderWidth="2" borderColor="#cccccc">
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="Event" render="Label" position="280,482" zPosition="1" size="320,20" font="Regular;18" noWrap="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Format:(%A)</convert>
++ </widget>
++ <widget source="Event" render="Label" position="90,502" zPosition="1" size="500,40" font="Regular;18" foregroundColor="#cccccc">
++ <convert type="EventName">ExtendedDescription</convert>
++ </widget>
++ </screen>
++ <!-- Harddisk selection -->
++ <screen name="HarddiskSelection" position="100,150" size="540,285" title="Select HDD">
++ <widget name="hddlist" position="10,10" size="520,275" />
++ </screen>
++ <!-- Harddisk setup -->
++ <screen name="HarddiskSetup" position="140,200" size="420,160" title="Harddisk">
++ <widget name="model" position="20,10" size="380,25" font="Regular;23" />
++ <widget name="capacity" position="20,40" size="380,25" font="Regular;23" />
++ <widget name="bus" position="20,70" size="380,25" font="Regular;23" />
++ <widget name="initialize" pixmap="750S/buttons/red.png" position="140,110" size="136,40" alphatest="on" />
++ <widget name="initializetext" position="160,110" size="115,40" zPosition="1" font="Regular;20" halign="center" valign="center" transparent="1" />
++ </screen>
++ <!-- Harddisk wait -->
++ <screen name="HarddiskWait" position="100,150" size="540,60">
++ <widget name="wait" position="20,10" size="500,25" font="Regular;23" />
++ </screen>
++ <!-- Help menu -->
++ <screen name="HelpMenu" position="0,0" size="720,576" title="Menu" flags="wfNoBorder">
++ <eLabel text="help..." position="400,40" size="220,60" font="Regular;40" />
++ <widget name="list" position="50,100" size="440,380" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="rc" pixmaps="750S/rc.png,750S/rcold.png" position="550,40" zPosition="10" size="154,500" alphatest="blend" />
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowdown2" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="long_key" position="320,520" size="350,50" font="Regular;25" halign="right" foregroundColor="yellow" />
++ </screen>
++ <!-- Image Wizard -->
++ <screen name="ImageWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder">
++ <widget name="text" position="50,100" size="440,250" font="Regular;22" />
++ <widget name="list" position="50,350" zPosition="1" size="440,200" />
++ <widget name="config" position="50,350" zPosition="1" size="440,200" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Inputbox -->
++ <screen name="InputBox" position="80,250" size="550,90" title="Input">
++ <widget name="text" position="10,20" size="550,25" font="Regular;23" />
++ <widget name="input" position="10,55" size="550,25" font="Regular;20" />
++ </screen>
++ <!-- IPKG -->
++ <screen name="Ipkg" position="100,120" size="550,200" title="Installing Software...">
++ <widget name="activityslider" position="0,0" size="550,5" pixmap="750S/progress_small.png" />
++ <widget name="package" position="10,30" size="550,20" font="Regular;18" />
++ <widget name="status" position="10,60" size="550,45" font="Regular;18" />
++ <widget name="slider" position="10,100" size="530,15" pixmap="750S/progress_big.png" borderWidth="2" borderColor="#cccccc" />
++ </screen>
++ <!-- Language selection -->
++ <screen name="LanguageSelection" position="170,143" size="380,300" title="Language selection">
++ <widget source="languages" render="Listbox" position="0,0" size="380,300" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (80, 10), size = (200, 50), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the language name,
++# MultiContentEntryPixmap(pos = (10, 5), size = (53, 35), png = 2), # index 2 is the pixmap
++ MultiContentEntryPixmap(pos = (7, 5), size = (60, 40), png = 2), # index 2 is the pixmap
++ ],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 50
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="LanguageWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder">
++ <widget name="text" position="153,50" size="340,240" font="Regular;23" />
++ <widget source="languages" render="Listbox" position="50,300" size="440,200" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (80, 10), size = (200, 50), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the language name,
++# MultiContentEntryPixmap(pos = (10, 5), size = (53, 35), png = 2), # index 2 is the pixmap
++ MultiContentEntryPixmap(pos = (7, 5), size = (60, 40), png = 2), # index 2 is the pixmap
++ ],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 50
++ }
++ </convert>
++ </widget>
++ <widget name="rc" pixmaps="750S/rc.png,750S/rcold.png" position="520,50" zPosition="10" size="154,500" alphatest="blend" />
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowdown2" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ </screen>
++ <!-- Location Box -->
++ <screen name="LocationBox" position="100,120" size="540,460" >
++ <widget name="text" position="0,2" size="540,22" font="Regular;22" />
++ <widget name="target" position="0,23" size="540,22" valign="center" font="Regular;22" />
++ <widget name="filelist" position="0,55" zPosition="1" size="540,210" scrollbarMode="showOnDemand" selectionDisabled="1" />
++ <widget name="textbook" position="0,272" size="540,22" font="Regular;22" />
++ <widget name="booklist" position="5,302" zPosition="2" size="535,100" scrollbarMode="showOnDemand" />
++ <widget name="red" position="0,415" zPosition="1" size="136,40" pixmap="750S/buttons/red.png" transparent="1" alphatest="on" />
++ <widget name="key_red" position="20,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="green" position="135,415" zPosition="1" size="136,40" pixmap="750S/buttons/green.png" transparent="1" alphatest="on" />
++ <widget name="key_green" position="155,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="yellow" position="270,415" zPosition="1" size="136,40" pixmap="750S/buttons/yellow.png" transparent="1" alphatest="on" />
++ <widget name="key_yellow" position="290,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="blue" position="405,415" zPosition="1" size="136,40" pixmap="750S/buttons/blue.png" transparent="1" alphatest="on" />
++ <widget name="key_blue" position="425,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <!-- Mediaplayer -->
++ <screen name="MediaPlayer" position="0,0" size="720,576" title="MediaPlayer" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_setup_650.png" zPosition="-1" position="48,20" size="630,525" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_media.png" position="80,35" size="44,44" alphatest="blend" transparent="1" />
++ <ePixmap pixmap="750S/mediaplayer_bg.png" position="70,100" zPosition="-1" size="594,390" alphatest="on" />
++ <eLabel name="thistory" position="140,55" size="300,30" text = "Main menu > " font="Regular;20" foregroundColor="#676767" backgroundColor="#371e1c1a" transparent="1" />
++ <eLabel name="title1" position="245,50" size="200,30" text="Media player" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="artisttext" position="85,105" size="74,22" font="Regular;20" valign="top" foregroundColor="#cccccc" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="artist" position="160,105" size="339,22" font="Regular;20" valign="top" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="albumtext" position="85,138" size="74,22" font="Regular;20" valign="top" foregroundColor="#cccccc" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="album" position="160,138" size="339,22" font="Regular;20" valign="top" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="yeartext" position="85,170" size="74,22" font="Regular;20" valign="top" foregroundColor="#cccccc" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="year" position="160,170" size="150,22" font="Regular;20" valign="top" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="genretext" position="315,170" size="74,22" font="Regular;20" valign="top" foregroundColor="#cccccc" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="genre" position="390,170" size="150,22" font="Regular;20" valign="top" backgroundColor="#371e1c1a" transparent="1" />
++ <eLabel name="nowPlaying" position="84,210" size="130,22" text="Now Playing :" font="Regular;22" foregroundColor="#ffc435" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="title" position="200,210" size="430,24" font="Regular;22" valign="top" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="coverArt" pixmap="750S/no_coverArt.png" position="553,100" size="111,96" transparent="1" alphatest="blend" />
++ <ePixmap pixmap="750S/icons/mp_buttons.png" position="275,510" size="169,30" alphatest="blend" />
++<!-- <widget name="PositionGauge" position="120,493" size="500,10" pointer="750S/position_pointer.png:660,0" seek_pointer="750S/position_pointer.png:660,0" transparent="1" />-->
++ <widget name="PositionGauge" position="77,493" size="580,10" pointer="750S/position_pointer_580.png:580,0" seek_pointer="750S/position_pointer_580.png:580,0" transparent="1" />
++ <widget name="filelist" position="115,245" transparent="1" size="545,117" scrollbarMode="showOnDemand" />
++ <widget name="playlist" position="115,370" transparent="1" size="545,117" scrollbarMode="showOnDemand" selectionDisabled="1" />
++ <widget name="currenttext" position="65,80" size="0,0" />
++ <widget name="titletext" position="65,80" size="0,0" />
++ </screen>
++ <!-- Menu screens -->
++ <screen name="Menu" position="0,0" size="720,576" title="Main menu" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_main.png" zPosition="-1" position="94,85" size="530,415" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_mainmenu.png" position="110,100" size="44,44" alphatest="blend" transparent="1" />
++ <widget source="thistory" render="Label" position="170,120" size="300,30" font="Regular;20" foregroundColor="#676767" backgroundColor="#371e1c1a" transparent="1" />
++ <widget source="title1" render="Label" position="340,113" size="200,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <widget source="title2" render="Label" position="410,113" size="200,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <widget source="title0" render="Label" position="275,113" size="200,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <widget source="menu" render="Listbox" selectionPixmap="750S/buttons/Selected_bar_450x32px.png" backgroundColorSelected="#371e1c1a" backgroundColor="#371e1c1a" transparent="1" position="125, 176" size="480,315" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [ MultiContentEntryText(pos = (20, 5), size = (450, 25), flags = RT_HALIGN_LEFT, text = 0) ],
++ "fonts": [gFont("Regular", 25)],
++ "itemHeight": 35
++ }
++ </convert>
++ </widget>
++ <eLabel text=" " position="130,207" zPosition="-1" size="440,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,242" zPosition="-1" size="440,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,277" zPosition="-1" size="440,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,312" zPosition="-1" size="440,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,347" zPosition="-1" size="440,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,382" zPosition="-1" size="440,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,417" zPosition="-1" size="440,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,452" zPosition="-1" size="440,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="130,487" zPosition="-1" size="440,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ </screen>
++ <!-- Messagebox -->
++ <screen name="MessageBox" position="110,245" size="500,10" title="Message">
++ <widget name="text" position="65,8" size="420,0" font="Regular;22" />
++ <widget name="ErrorPixmap" pixmap="750S/icons/input_error.png" position="5,5" size="53,53" alphatest="blend" />
++ <widget name="QuestionPixmap" pixmap="750S/icons/input_question.png" position="5,5" size="53,53" alphatest="blend" />
++ <widget name="InfoPixmap" pixmap="750S/icons/input_info.png" position="5,5" size="53,53" alphatest="blend" />
++ <widget name="list" position="100,100" size="380,375" transparent="1" backgroundColor="#371e1c1a" />
++ <applet type="onLayoutFinish">
++# this should be factored out into some helper code, but currently demonstrates applets.
++from enigma import eSize, ePoint
++
++orgwidth = self.instance.size().width()
++orgpos = self.instance.position()
++textsize = self["text"].getSize()
++
++# y size still must be fixed in font stuff...
++textsize = (textsize[0] + 50, textsize[1] + 50)
++offset = 0
++if self.type == self.TYPE_YESNO:
++ offset = 60
++wsizex = textsize[0] + 60
++wsizey = textsize[1] + offset
++if (280 > wsizex):
++ wsizex = 280
++wsize = (wsizex, wsizey)
++
++
++# resize
++self.instance.resize(eSize(*wsize))
++
++# resize label
++self["text"].instance.resize(eSize(*textsize))
++
++# move list
++listsize = (wsizex, 50)
++self["list"].instance.move(ePoint(0, textsize[1]))
++self["list"].instance.resize(eSize(*listsize))
++
++# center window
++newwidth = wsize[0]
++self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
++ </applet>
++ </screen>
++ <!-- Minute input -->
++ <screen name="MinuteInput" position="200,140" size="280,60" title="Seek">
++ <widget name="minutes" position="80,15" size="160,25" halign="right" font="Regular;23" />
++ </screen>
++ <!-- Movie context menu -->
++ <screen name="MovieContextMenu" position="150,160" size="400,260" title="Movielist menu">
++ <widget name="menu" position="10,10" size="380,250" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Movieselection -->
++ <screen name="MovieSelection" position="0, 0" size="720,576" title="Channel Selection" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_list.png" position="60,25" size="600,520" zPosition="-1" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_recorded.png" position="90,35" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="Recorded files..." position="140,45" size="220,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="80,110" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="220,110" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,110" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,110" size="136,40" alphatest="on" />
++ <widget name="key_red" position="100,110" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="240,110" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="380,110" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="520,110" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="list" position="80,160" size="555,328" zPosition="2" scrollbarMode="showOnDemand" transparent="1" />
++ <widget name="DescriptionBorder" pixmap="750S/border_eventinfo.png" position="75,388" zPosition="1" size="560,103" transparent="1" alphatest="on" />
++ <widget source="Service" render="Label" position="80,390" zPosition="1" size="480,35" font="Regular;17" foregroundColor="#cccccc">
++ <convert type="MovieInfo">ShortDescription</convert>
++ </widget>
++ <widget source="Service" render="Label" position="570,390" zPosition="1" size="60,22" font="Regular;17" halign="right">
++ <convert type="ServiceTime">Duration</convert>
++ <convert type="ClockToText">AsLength</convert>
++ </widget>
++ <widget source="Service" render="Label" position="455,410" zPosition="2" size="175,22" font="Regular;17" halign="right">
++ <convert type="MovieInfo">RecordServiceName</convert>
++ </widget>
++ <widget source="Service" render="Label" position="80,430" zPosition="1" size="550,58" font="Regular;19">
++ <convert type="EventName">ExtendedDescription</convert>
++ </widget>
++ <widget name="freeDiskSpace" position="75,500" size="540,20" font="Regular;19" valign="center" halign="right" />
++ </screen>
++ <!-- Mute -->
++ <screen name="Mute" position="50,50" zPosition="10" size="40,24" backgroundColor="transparent" title="Mute" flags="wfNoBorder">
++ <ePixmap position="0,0" size="40,24" pixmap="750S/mute.png" transparent="1" alphatest="on" />
++ </screen>
++ <!-- Nameserver -->
++ <screen name="NameserverSetup" position="110,120" size="500,400" title="Nameserver Setup" >
++ <widget name="config" position="10,10" transparent="1" backgroundColor="#371e1c1a" size="480,175" scrollbarMode="showOnDemand" />
++ <widget source="key_red" render="Label" position="430,330" size="120,21" zPosition="10" font="Regular;21" transparent="1" />
++ <widget source="key_green" render="Label" position="60,330" size="150,21" zPosition="10" font="Regular;21" transparent="1" />
++ <widget source="key_yellow" render="Label" position="60,360" size="150,21" zPosition="10" font="Regular;21" transparent="1" />
++ <ePixmap pixmap="750S/buttons/button_red.png" position="400,328" zPosition="10" size="22,22" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/button_green.png" position="20,328" zPosition="10" size="22,22" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/button_yellow.png" position="20,358" zPosition="10" size="22,22" transparent="1" alphatest="on" />
++ <widget name="introduction" position="140,360" size="300,20" zPosition="10" font="Regular;21" halign="center" transparent="1" />
++ </screen>
++ <!-- Network adapter selection -->
++ <screen name="NetworkAdapterSelection" position="110,120" size="500,400" title="Select Network Adapter">
++ <widget source="key_red" render="Label" position="430,330" size="120,21" zPosition="10" font="Regular;21" transparent="1" />
++ <widget source="key_green" render="Label" position="60,330" size="150,21" zPosition="10" font="Regular;21" transparent="1" />
++ <widget source="key_yellow" render="Label" position="60,360" size="150,21" zPosition="10" font="Regular;21" transparent="1" />
++ <ePixmap pixmap="750S/buttons/button_red.png" position="400,328" zPosition="10" size="22,22" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/button_green.png" position="20,328" zPosition="10" size="22,22" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/button_yellow.png" position="20,358" zPosition="10" size="22,22" transparent="1" alphatest="on" />
++ <widget source="list" render="Listbox" position="10,10" size="550,280" zPosition="10" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent"> <!-- iface, name, description, interfacepng, defaultpng, activepng, divpng -->
++ {"template": [
++ MultiContentEntryText(pos = (85, 6), size = (440, 28), font=0, flags = RT_HALIGN_LEFT|RT_VALIGN_TOP, text = 1), # index 1 is the interfacename
++ MultiContentEntryText(pos = (85, 43), size = (440, 20), font=1, flags = RT_HALIGN_LEFT|RT_VALIGN_BOTTOM, text = 2), # index 2 is the description
++ MultiContentEntryPixmapAlphaTest(pos = (2, 8), size = (54, 54), png = 3), # index 3 is the interface pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (63, 46), size = (15, 16), png = 4), # index 4 is the default pixmap
++ ],
++ "fonts": [gFont("Regular", 28),gFont("Regular", 20)],
++ "itemHeight": 70
++ }
++ </convert>
++ </widget>
++ <widget source="introduction" render="Label" position="140,360" size="300,21" zPosition="10" font="Regular;21" halign="center" transparent="1" />
++ </screen>
++ <!-- Network adapter test Black = "#000000" Grey = "#8c8c93" Green = "#1cff1c" Red = #f23d21-->
++ <screen name="NetworkAdapterTest" position="110,120" size="520,400" title="Network test..." >
++ <ePixmap pixmap="750S/buttons/button_red.png" position="380,328" zPosition="10" size="22,22" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/button_green.png" position="30,328" zPosition="10" size="22,22" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/button_yellow.png" position="30,358" zPosition="10" size="22,22" transparent="1" alphatest="on" />
++ <widget source="key_red" render="Label" position="420,330" size="120,21" zPosition="10" font="Regular;21" transparent="1" />
++ <widget source="key_green" render="Label" position="70,330" size="250,21" zPosition="10" font="Regular;21" transparent="1" />
++ <widget source="key_yellow" render="Label" position="70,360" size="250,21" zPosition="10" font="Regular;21" transparent="1" />
++ <widget name="Adaptertext" position="10,20" size="120,21" zPosition="1" font="Regular;19" foregroundColors="#8c8c93,#1cff1c" />
++ <widget name="Adapter" position="120,20" size="270,21" zPosition="1" font="Regular;19" halign="center" foregroundColors="#8c8c93,#f23d21,#1cff1c" />
++ <widget name="AdapterInfo" pixmaps="750S/buttons/blue.png,750S/buttons/blue_pressed.png" position="370,10" zPosition="1" size="140,40" transparent="1" alphatest="on" />
++ <widget name="AdapterInfo_Text" position="410,20" size="110,21" zPosition="2" font="Regular;19" transparent="1" foregroundColors="#8c8c93,#7fafaf,#1cff1c" />
++ <widget name="AdapterInfo_OK" pixmap="750S/icons/lock_on.png" position="345,15" size="38,31" alphatest="on" zPosition="2" />
++ <widget name="Networktext" position="10,70" size="120,21" zPosition="1" font="Regular;19" foregroundColors="#8c8c93,#1cff1c" />
++ <widget name="Network" position="150,70" size="240,21" zPosition="1" font="Regular;19" halign="center" foregroundColors="#8c8c93,#f23d21,#1cff1c" />
++ <widget name="NetworkInfo" pixmaps="750S/buttons/blue.png,750S/buttons/blue_pressed.png" position="370,60" zPosition="1" size="140,40" transparent="1" alphatest="on" />
++ <widget name="NetworkInfo_Text" position="410,70" size="110,21" zPosition="2" font="Regular;19" transparent="1" foregroundColors="#8c8c93,#7fafaf,#1cff1c" />
++ <widget name="NetworkInfo_Check" pixmaps="750S/icons/lock_on.png,750S/icons/lock_error.png" position="345,65" size="38,31" alphatest="on" zPosition="2" />
++ <widget name="Dhcptext" position="10,120" size="120,21" zPosition="1" font="Regular;19" foregroundColors="#8c8c93,#1cff1c" />
++ <widget name="Dhcp" position="150,120" size="240,21" zPosition="1" font="Regular;19" halign="center" foregroundColors="#8c8c93,#f23d21,#1cff1c" />
++ <widget name="DhcpInfo" pixmaps="750S/buttons/blue.png,750S/buttons/blue_pressed.png" position="370,110" zPosition="1" size="140,40" transparent="1" alphatest="on" />
++ <widget name="DhcpInfo_Text" position="410,120" size="110,21" zPosition="2" font="Regular;19" transparent="1" foregroundColors="#8c8c93,#7fafaf,#1cff1c" />
++ <widget name="DhcpInfo_Check" pixmaps="750S/icons/lock_on.png,750S/icons/lock_error.png" position="345,115" size="38,31" alphatest="on" zPosition="2" />
++ <widget name="IPtext" position="10,170" size="120,21" zPosition="1" font="Regular;19" foregroundColors="#8c8c93,#1cff1c" />
++ <widget name="IP" position="150,170" size="210,21" zPosition="1" font="Regular;19" halign="center" foregroundColors="#8c8c93,#f23d21,#1cff1c" />
++ <widget name="IPInfo" pixmaps="750S/buttons/blue.png,750S/buttons/blue_pressed.png" position="370,160" zPosition="1" size="140,40" transparent="1" alphatest="on" />
++ <widget name="IPInfo_Text" position="410,170" size="110,21" zPosition="2" font="Regular;19" transparent="1" foregroundColors="#8c8c93,#7fafaf,#1cff1c" />
++ <widget name="IPInfo_Check" pixmaps="750S/icons/lock_on.png,750S/icons/lock_error.png" position="345,165" size="38,31" alphatest="on" zPosition="2" />
++ <widget name="DNStext" position="10,220" size="120,21" zPosition="1" font="Regular;19" foregroundColors="#8c8c93,#1cff1c" />
++ <widget name="DNS" position="150,220" size="210,21" zPosition="1" font="Regular;19" halign="center" foregroundColors="#8c8c93,#f23d21,#1cff1c" />
++ <widget name="DNSInfo" pixmaps="750S/buttons/blue.png,750S/buttons/blue_pressed.png" position="370,210" zPosition="1" size="140,40" transparent="1" alphatest="on" />
++ <widget name="DNSInfo_Text" position="410,220" size="110,21" zPosition="2" font="Regular;19" transparent="1" foregroundColors="#8c8c93,#7fafaf,#1cff1c" />
++ <widget name="DNSInfo_Check" pixmaps="750S/icons/lock_on.png,750S/icons/lock_error.png" position="345,215" size="38,31" alphatest="on" zPosition="2" />
++ <widget name="EditSettingsButton" pixmaps="750S/buttons/blue.png,750S/buttons/blue_pressed.png" position="350,260" zPosition="1" size="130,40" transparent="1" alphatest="on" />
++ <widget name="EditSettings_Text" position="370,270" size="110,21" zPosition="2" font="Regular;17" halign="center" transparent="1" foregroundColors="#7fafaf,#8c8c93,#1cff1c" />
++
++ <widget name="InfoText" position="5,5" size="515,290" zPosition="25" font="Regular;21" />
++ </screen>
++ <!-- Network setup -->
++ <screen name="NetworkSetup" position="130,140" size="510,330" title="Network Setup">
++ <widget name="menu" position="10,10" selectionPixmap="750S/buttons/Selected_bar_440x23px.png" transparent="1" backgroundColor="#371e1c1a" size="440,310" />
++ </screen>
++ <!-- Nim selection -->
++ <screen name="NimSelection" position="150,123" size="420,330" title="Choose Tuner">
++ <widget source="nimlist" render="Listbox" transparent="1" position="0,0" size="420,300" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (10, 5), size = (400, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name,
++ MultiContentEntryText(pos = (50, 30), size = (320, 30), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings,
++ ],
++ "fonts": [gFont("Regular", 20), gFont("Regular", 15)],
++ "itemHeight": 70
++ }
++ </convert>
++ </widget>
++ </screen>
++ <!-- Nim setup -->
++ <screen name="NimSetup" position="110,120" size="500,412" title="Reception Settings">
++ <widget name="config" position="10,10" transparent="1" size="480,402" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Numberzap -->
++ <screen name="NumberZap" position="235,255" size="250,60" title="Channel">
++ <widget name="channel" position="35,15" size="110,25" font="Regular;23" />
++ <widget name="number" position="145,15" size="80,25" halign="right" font="Regular;23" />
++ </screen>
++ <!-- Numerical help dialog -->
++ <screen name="NumericalTextInputHelpDialog" position="170,420" zPosition="2" size="394,94" backgroundColor="#202020" flags="wfNoBorder">
++ <eLabel position="0,0" size="392,92" backgroundColor="#c0c0c0" zPosition="-1" />
++ <widget name="key1" position="2,2" size="130,30" font="Console;16" halign="center" valign="center" />
++ <widget name="key2" position="132,2" size="130,30" font="Console;16" halign="center" valign="center" />
++ <widget name="key3" position="262,2" size="130,30" font="Console;16" halign="center" valign="center" />
++ <widget name="key4" position="2,32" size="130,30" font="Console;16" halign="center" valign="center" />
++ <widget name="key5" position="132,32" size="130,30" font="Console;16" halign="center" valign="center" />
++ <widget name="key6" position="262,32" size="130,30" font="Console;16" halign="center" valign="center" />
++ <widget name="key7" position="2,62" size="130,30" font="Console;16" halign="center" valign="center" />
++ <widget name="key8" position="132,62" size="130,30" font="Console;16" halign="center" valign="center" />
++ <widget name="key9" position="262,62" size="130,30" font="Console;16" halign="center" valign="center" />
++ </screen>
++ <!-- Parental control - change pin -->
++ <screen name="ParentalControlChangePin" position="100,200" size="520,160" title="Change pin code">
++ <widget name="config" position="10,10" size="500,350" transparent="1" backgroundColor="#371e1c1a" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Parental control - editor -->
++ <screen name="ParentalControlEditor" position="100,120" size="520,400" title="Parental control services Editor">
++ <widget name="servicelist" position="10,10" size="500,350" selectionPixmap="750S/buttons/Selected_bar_500x23px.png" transparent="1" backgroundColorSelected="#371e1c1a" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Parental control - setup -->
++ <screen name="ParentalControlSetup" position="100,120" size="520,400" title="Parental control setup">
++ <widget name="config" position="10,10" transparent="1" backgroundColor="#371e1c1a" size="500,350" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Picture in picture -->
++ <screen name="PictureInPicture" position="400,60" zPosition="-1" size="240,192" flags="wfNoBorder">
++ <widget name="video" position="0,0" size="240,192" backgroundColor="transparent" />
++ </screen>
++ <!-- Pin input -->
++ <screen name="PinInput" position="110,205" size="500,170" title="Pin code needed">
++ <widget name="service" position="10,10" size="480,25" font="Regular;20" />
++ <widget name="text" position="10,40" size="480,25" font="Regular;20" halign="center" />
++ <widget name="tries" position="10,70" size="480,25" font="Regular;20" halign="center" />
++ <widget name="input" position="10,110" size="480,40" font="Regular;50" halign="center" />
++ </screen>
++ <!-- Picture in picture setup -->
++ <screen name="PiPSetup" position="70,400" size="600,150" backgroundColor="transparent" flags="wfNoBorder" title="PiPSetup">
++ <widget name="text" position="0,0" size="600,150" font="Regular;23" />
++ </screen>
++ <!-- Plugin browser -->
++ <screen name="PluginBrowser" position="150,120" size="410,410" title="Plugin browser">
++ <ePixmap pixmap="750S/buttons/red-big.png" position="0,0" size="200,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green-big.png" position="210,0" size="200,40" alphatest="on" />
++ <widget name="red" position="30,0" zPosition="1" size="170,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="green" position="240,0" zPosition="1" size="170,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="list" position="0,45" size="410,355" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Plugin downloads -->
++ <screen name="PluginDownloadBrowser" position="110,120" size="500,420" title="Downloadable plugins">
++ <widget name="text" position="0,0" zPosition="1" size="500,430" font="Regular;20" halign="center" valign="center" />
++ <widget name="list" position="10,10" zPosition="2" size="480,405" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- PVR state -->
++ <screen name="PVRState" position="70,70" zPosition="2" size="150,30" backgroundColor="transpBlack" flags="wfNoBorder">
++ <widget name="state" position="0,0" size="150,30" font="Regular;25" halign="center" backgroundColor="transpBlack" foregroundColor="white" />
++ </screen>
++ <!-- Radio infobar -->
++ <screen name="RadioInfoBar" position="75,408" size="560,120" zPosition="1" flags="wfNoBorder" title="Radio">
++ <widget source="session.CurrentService" render="Label" position="5,1" size="325,26" font="Regular;20" noWrap="1" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="RdsDecoder" render="Pixmap" pixmap="750S/icons/rass_logo.png" position="330,1" size="50,21" alphatest="on">
++ <convert type="RdsInfo">RasInteractiveAvailable</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.RecordState" render="Pixmap" pixmap="750S/icons/record.png" position="480,3" zPosition="2" size="14,14" alphatest="on" >
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ <ePixmap pixmap="750S/icons/clock.png" position="478,0" zPosition="1" size="16,16" alphatest="on" />
++ <widget source="session.Event_Now" render="Progress" pixmap="750S/progress_medium.png" position="395,5" zPosition="2" size="71,11" borderWidth="2" borderColor="#cccccc" transparent="1">
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="500,1" size="55,28" font="Regular;20" halign="right" transparent="1">
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="5,25" size="60,22" font="Regular;20" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="73,25" size="390,22" font="Regular;20" valign="top" noWrap="1" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="465,25" size="90,22" font="Regular;20" halign="right" transparent="1">
++ <convert type="EventTime">Remaining</convert>
++ <convert type="RemainingToText">InMinutes</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="5,47" size="60,22" font="Regular;20" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="73,47" size="390,22" font="Regular;20" valign="top" noWrap="1" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="465,47" size="90,22" font="Regular;20" halign="right" transparent="1">
++ <convert type="EventTime">Duration</convert>
++ <convert type="ClockToText">InMinutes</convert>
++ </widget>
++ <eLabel position="5,68" size="550,1" backgroundColor="#384472" />
++ <eLabel position="5,69" size="550,1" backgroundColor="#04060a" />
++ <widget source="RdsDecoder" render="Label" position="5,71" size="550,50" font="LCD;20" foregroundColor="#80ffff">
++ <convert type="RdsInfo">RadioText</convert>
++ </widget>
++ </screen>
++ <!-- RASS -->
++ <screen name="RassInteractive" position="50,180" size="100,275" backgroundColor="transpWhite" flags="wfNoBorder">
++ <ePixmap pixmap="750S/icons/rass_logo.png" position="25,0" size="50,21" transparent="1" alphatest="on" />
++ <eLabel text="Index" position="36,25" size="60,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <eLabel text="0" position="5,25" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="Marker" position="21,25" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <eLabel text="1" position="5,50" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_1" position="35,50" size="36,20" alphatest="on" />
++ <eLabel text="2" position="5,75" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_2" position="35,75" size="36,20" alphatest="on" />
++ <eLabel text="3" position="5,100" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_3" position="35,100" size="36,20" alphatest="on" />
++ <eLabel text="4" position="5,125" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_4" position="35,125" size="36,20" alphatest="on" />
++ <eLabel text="5" position="5,150" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_5" position="35,150" size="36,20" alphatest="on" />
++ <eLabel text="6" position="5,175" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_6" position="35,175" size="36,20" alphatest="on" />
++ <eLabel text="7" position="5,200" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_7" position="35,200" size="36,20" alphatest="on" />
++ <eLabel text="8" position="5,225" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_8" position="35,225" size="36,20" alphatest="on" />
++ <eLabel text="9" position="5,250" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_9" position="35,250" size="36,20" alphatest="on" />
++ </screen>
++ <!-- RDS info -->
++ <screen name="RdsInfoDisplay" position="0,0" zPosition="-2" size="720,576" backgroundColor="transparent" flags="wfNoBorder">
++ <widget name="RadioText" position="50,481" size="620,29" font="Regular;21" noWrap="1" backgroundColor="#003258" shadowOffset="-2,-2" shadowColor="transpBlack" />
++ <widget name="RtpText" position="50,510" size="620,29" font="Regular;21" halign="right" noWrap="1" backgroundColor="#003258" shadowOffset="-2,-2" shadowColor="transpBlack" />
++ <widget name="RassLogo" pixmap="750S/icons/rass_logo.png" position="50,445" size="50,21" />
++ </screen>
++ <!-- Satfinder -->
++ <screen name="Satfinder" position="90,120" size="520,400" title="Satfinder">
++ <widget name="introduction" position="0,0" size="0,0" font="Regular;23" />
++ <ePixmap pixmap="750S/icons/dish_scan.png" position="5,25" zPosition="0" size="119,110" transparent="1" alphatest="on" />
++ <widget source="Frontend" render="Label" position="190,10" zPosition="2" size="260,20" font="Regular;19" halign="center" valign="center" transparent="1">
++ <convert type="FrontendInfo">SNRdB</convert>
++ </widget>
++ <eLabel name="snr" text="SNR:" position="120,35" size="60,22" font="Regular;21" halign="right" transparent="1" />
++ <widget source="Frontend" render="Progress" position="190,35" size="260,20" pixmap="750S/bar_snr.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">SNR</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="460,35" size="60,22" font="Regular;21">
++ <convert type="FrontendInfo">SNR</convert>
++ </widget>
++ <eLabel name="agc" text="AGC:" position="120,60" size="60,22" font="Regular;21" halign="right" transparent="1" />
++ <widget source="Frontend" render="Progress" position="190,60" size="260,20" pixmap="750S/bar_snr.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="460,60" size="60,22" font="Regular;21">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <eLabel name="ber" text="BER:" position="120,85" size="60,22" font="Regular;21" halign="right" transparent="1" />
++ <widget source="Frontend" render="Progress" position="190,85" size="260,20" pixmap="750S/bar_ber.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">BER</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="460,85" size="60,22" font="Regular;21">
++ <convert type="FrontendInfo">BER</convert>
++ </widget>
++ <eLabel name="lock" text="Lock:" position="120,115" size="60,22" font="Regular;21" halign="right" />
++ <widget source="Frontend" render="Pixmap" pixmap="750S/icons/lock_on.png" position="190,110" zPosition="1" size="38,31" alphatest="on">
++ <convert type="FrontendInfo">LOCK</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="Frontend" render="Pixmap" pixmap="750S/icons/lock_off.png" position="190,110" zPosition="1" size="38,31" alphatest="on">
++ <convert type="FrontendInfo">LOCK</convert>
++ <convert type="ConditionalShowHide">Invert</convert>
++ </widget>
++ <ePixmap pixmap="750S/div-h.png" position="10,152" zPosition="1" size="500,2" />
++ <widget name="config" position="10,165" transparent="1" backgroundColor="#371e1c1a" size="500,240" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Scan setup -->
++ <screen name="ScanSetup" position="100,120" size="520,405" title="Service scan">
++ <widget name="config" position="10,10" transparent="1" backgroundColor="#371e1c1a" size="500,350" scrollbarMode="showOnDemand" />
++ <widget name="introduction" position="10,365" size="500,40" font="Regular;20" halign="center" />
++ </screen>
++ <!-- Scan simple -->
++ <screen name="ScanSimple" position="150,130" size="420,350" title="Service scan">
++ <widget name="header" position="10,10" size="400,25" font="Regular;23" />
++ <widget name="config" position="10,55" transparent="1" backgroundColor="#371e1c1a" size="400,250" scrollbarMode="showOnDemand" />
++ <widget name="footer" position="10,310" size="400,20" font="Regular;20" halign="center" />
++ </screen>
++ <!-- Scart -->
++ <screen name="Scart" position="0,0" size="720,576" backgroundColor="transparent" />
++ <!-- Service info -->
++ <screen name="ServiceInfo" position="0,0" size="720,576" title="Serviceinfo" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_setup_600.png" zPosition="-1" position="65,35" size="600,500" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_mainmenu.png" position="95,50" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="Main menu > Information > " position="150,70" size="230,30" font="Regular;20" foregroundColor="#676767" backgroundColor="#371e1c1a" transparent="1" />
++ <eLabel text="Serviceinfo" position="370,65" size="200,30" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="80,130" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="220,130" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,130" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,130" size="136,40" alphatest="on" />
++ <widget name="red" position="100,130" zPosition="1" size="115,40" font="Regular;17" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="green" position="240,130" zPosition="1" size="115,40" font="Regular;17" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="yellow" position="380,130" zPosition="1" size="115,40" font="Regular;17" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="blue" position="520,130" zPosition="1" size="115,40" font="Regular;17" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="infolist" position="110,175" size="510,340" selectionDisabled="1" />
++ </screen>
++ <!-- Service scan -->
++ <screen name="ServiceScan" position="150,120" size="420,390" title="Service Scan">
++ <widget source="FrontendInfo" render="Pixmap" pixmap="750S/icons/scan-s.png" position="5,5" size="64,64" transparent="1" alphatest="blend">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">0,0</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="FrontendInfo" render="Pixmap" pixmap="750S/icons/scan-c.png" position="5,5" size="64,64" transparent="1" alphatest="on">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">1,1</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="FrontendInfo" render="Pixmap" pixmap="750S/icons/scan-t.png" position="5,5" size="64,64" transparent="1" alphatest="on">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">2,2</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget name="network" position="80,15" size="330,20" font="Regular;20" />
++ <widget name="transponder" position="80,40" size="330,20" font="Regular;20" />
++ <widget name="scan_state" position="10,80" zPosition="2" size="400,20" font="Regular;18" />
++ <widget name="pass" position="10,80" size="400,20" font="Regular;18" />
++ <widget name="scan_progress" position="10,105" size="400,15" pixmap="750S/progress_big.png" borderWidth="2" borderColor="#cccccc" />
++ <widget name="servicelist" position="10,135" size="400,265" selectionDisabled="1" />
++ </screen>
++ <!-- Setup -->
++ <screen name="Setup" position="0,0" size="720,576" title="Setup" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_setup_650.png" zPosition="-1" position="40,25" size="630,525" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_mainmenu.png" position="80,40" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="Main menu > Setup > System > " position="130,60" size="300,30" font="Regular;20" foregroundColor="#676767" backgroundColor="#371e1c1a" transparent="1" />
++ <widget source="Title" render="Label" position="380,55" size="220,35" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="70,110" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="210,110" size="136,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="90,110" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="230,110" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="350,110" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="490,110" size="136,40" alphatest="on" />
++ <widget name="config" position="80,165" itemHeight="30" backgroundColor="#371e1c1a" transparent="1" size="520,360" scrollbarMode="showNever" />
++ <eLabel text=" " position="80,192" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,222" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,252" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,282" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,312" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,342" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,372" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,402" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,432" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,462" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,492" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ <eLabel text=" " position="80,522" zPosition="-1" size="520,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ </screen>
++ <!-- Simple channelselection -->
++ <screen name="SimpleChannelSelection" position="90,120" size="550,430" title="Channel Selection">
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" size="136,40" alphatest="on" />
++ <widget name="key_red" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="list" position="00,45" size="555,364" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Skin Selector -->
++ <screen name="SkinSelector" position="0,0" size="720,576" title="Choose your Skin" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_main.png" zPosition="-1" position="90,70" size="530,415" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_mainmenu.png" position="110,80" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel text="Main menu > Setup > System > " position="160,105" size="300,30" font="Regular;20" foregroundColor="#676767" backgroundColor="#371e1c1a" transparent="1" />
++ <eLabel text="Choose your Skin" position="405,100" size="200,35" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="480,435" size="140,40" zPosition="1" alphatest="on" />
++ <widget source="key_red" render="Label" position="500,435" zPosition="2" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="introduction" render="Label" position="90,435" size="380,30" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
++ <widget name="SkinList" position="98,160" size="230,250" selectionPixmap="750S/buttons/Selected_bar_230x23px.png" backgroundColor="#371e1c1a" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="Preview" position="332,210" size="280,210" alphatest="on" />
++ </screen>
++ <!-- Sleeptimer edit -->
++ <screen name="SleepTimerEdit" position="110,215" size="520,200" title="Sleep Timer">
++ <widget name="current_status" position="40,40" size="400,30" valign="center" font="Regular;20" />
++ <widget name="red" pixmap="750S/buttons/button_red.png" position="2,84" size="22,22" alphatest="on" />
++ <widget name="green" pixmap="750S/buttons/button_green.png" position="2,123" size="22,22" alphatest="on" />
++ <widget name="yellow" pixmap="750S/buttons/button_yellow.png" position="2,163" size="22,22" alphatest="on" />
++ <widget name="blue" pixmap="750S/buttons/button_blue.png" position="2,163" size="22,22" alphatest="on" />
++ <widget name="red_text" position="40,80" size="400,30" valign="center" font="Regular;20" />
++ <widget name="green_text" position="40,120" size="400,30" valign="center" font="Regular;20" />
++ <widget name="yellow_text" position="40,160" size="400,30" valign="center" font="Regular;20" />
++ <widget name="blue_text" position="40,200" size="400,30" valign="center" font="Regular;20" />
++ <widget name="pretext" position="15,10" size="235,25" font="Regular;19" />
++ <widget name="input" position="260,10" size="40,25" font="Regular;19" />
++ <widget name="aftertext" position="305,10" size="100,25" font="Regular;19" />
++ <ePixmap pixmap="750S/sleeptimer.png" position="390,17" size="116,142" alphatest="blend" />
++ </screen>
++ <!-- Standby mode -->
++ <screen name="Standby" flags="wfNoBorder" position="0,0" size="720,576" title="Standby" />
++ <!-- Start Wizard -->
++ <screen name="StartWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder">
++ <widget name="text" position="153,50" size="340,270" font="Regular;23" />
++ <widget source="list" render="Listbox" transparent="1" position="50,300" size="440,200" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <widget name="config" position="50,300" size="440,200" scrollbarMode="showOnDemand" zPosition="1" transparent="1" />
++ <ePixmap pixmap="750S/buttons/button_red.png" position="40,227" size="22,22" alphatest="on" />
++ <widget name="languagetext" position="66,230" size="95,30" font="Regular;18" />
++ <widget name="rc" pixmaps="750S/rc.png,750S/rcold.png" position="520,50" zPosition="10" size="154,500" alphatest="blend" />
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowdown2" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ </screen>
++ <!-- Network Wizard -->
++ <screen name="NetworkWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="153,40" size="340,300" font="Regular;22" />
++ <widget source="list" render="Listbox" position="53,340" size="440,180" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <widget name="config" position="53,340" zPosition="1" size="440,180" transparent="1" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="750S/buttons/button_red.png" position="40,222" zPosition="0" size="22,22" transparent="1" alphatest="on" />
++ <widget name="languagetext" position="66,225" size="95,30" font="Regular;18" />
++ <widget name="rc" pixmaps="750S/rc.png,skin_default/rcold.png" position="530,50" zPosition="10" size="154,500" alphatest="blend" />
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowdown2" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget source="VKeyIcon" render="Pixmap" pixmap="750S/buttons/key_text.png" position="40,260" zPosition="0" size="35,25" transparent="1" alphatest="on" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget name="HelpWindow" pixmap="750S/buttons/key_text.png" position="125,170" zPosition="1" size="1,1" transparent="1" alphatest="on" />
++ </screen>"""
++ <!-- Subservice quickzap -->
++ <screen name="SubservicesQuickzap" position="124,470" size="512,200" title="Subservices" backgroundColor="transparent" flags="wfNoBorder">
++ <widget source="session.RecordState" render="Pixmap" pixmap="750S/icons/record.png" position="450,0" zPosition="2" size="14,14" alphatest="on" >
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ <eLabel text="Subservices" position="0,0" size="470,20" font="Regular;13" backgroundColor="#33294a6b" />
++ <widget name="CurrentSubserviceNumber" position="0,20" size="50,34" font="Regular;22" backgroundColor="#33294a6b" shadowColor="black" shadowOffset="-1,-1" />
++ <widget source="session.CurrentService" render="Label" position="50,20" size="420,34" font="Regular;22" backgroundColor="#33294a6b" shadowColor="black" shadowOffset="-1,-1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ </screen>
++ <!-- Subtitle selection -->
++ <screen name="Subtitles" position="170,150" size="380,285" title="Subtitle selection">
++ <widget name="config" position="10,10" backgroundColor="#371e1c1a" transparent="1" zPosition="1" size="360,275" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Subtitle area -->
++ <screen name="SubtitleDisplay" position="0,0" size="720,576" zPosition="-1" flags="wfNoBorder" backgroundColor="transparent" />
++ <!-- Time & date input -->
++ <screen name="TimeDateInput" position="160,150" size="400,200" title="Time/Date Input">
++ <widget name="cancel" pixmap="750S/buttons/red.png" position="10,0" size="136,40" alphatest="on" />
++ <widget name="ok" pixmap="750S/buttons/green.png" position="260,0" size="136,40" alphatest="on" />
++ <widget name="canceltext" position="30,0" zPosition="1" size="115,40" font="Regular;19" halign="center" valign="center" transparent="1" />
++ <widget name="oktext" position="280,0" zPosition="1" size="115,40" font="Regular;19" halign="center" valign="center" transparent="1" />
++ <widget name="config" position="10,40" transparent="1" size="380,150" />
++ </screen>
++ <!-- Timer edit -->
++ <screen name="TimerEdit" position="70,130" size="590,335" title="Timer Edit">
++ <widget name="description" position="10,10" size="580,40" font="Regular;25" />
++ <widget name="lbegin" position="405,102" size="103,30" font="Regular;25" foregroundColor="red" />
++ <widget name="lend" position="405,158" size="103,30" font="Regular;25" foregroundColor="green" />
++ <widget name="begin" position="508,105" size="72,35" font="Regular;25" />
++ <widget name="end" position="508,150" size="72,35" font="Regular;25" />
++ <widget name="apply" position="10,240" size="250,35" />
++ </screen>
++ <!-- Timer edit list -->
++ <screen name="TimerEditList" position="0,0" size="720,576" title="Timer Editor" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_setup_650.png" zPosition="-1" position="48,20" size="630,525" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_timerlist.png" position="80,35" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel name="title1" position="140,45" size="200,30" text="Timer List" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <ePixmap pixmap="750S/buttons/red.png" position="80,100" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="220,100" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,100" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,100" size="136,40" alphatest="on" />
++ <widget name="key_red" position="100,100" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="240,100" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="380,100" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="520,100" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="timerlist" position="80,160" transparent="1" size="555,350" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Timer entry -->
++ <screen name="TimerEntry" position="0,0" size="720,576" title="Timer entry" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="750S/bg_setup_650.png" zPosition="-1" position="48,20" size="630,525" alphatest="on" transparent="1" />
++ <ePixmap pixmap="750S/icons/icon_timerlist.png" position="80,35" size="44,44" alphatest="blend" transparent="1" />
++ <eLabel name="title1" position="130,50" size="200,30" text="Timer entry" font="Regular;30" foregroundColor="#d1a256" backgroundColor="#371e1c1a" transparent="1" />
++ <widget name="cancel" pixmap="750S/buttons/red.png" position="80,100" size="136,40" alphatest="on" />
++ <widget name="ok" pixmap="750S/buttons/green.png" position="220,100" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="360,100" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="500,100" size="136,40" alphatest="on" />
++ <widget name="canceltext" position="100,100" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;21" backgroundColor="#9f1313" transparent="1" />
++ <widget name="oktext" position="240,100" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;21" backgroundColor="#1f771f" transparent="1" />
++ <widget name="config" position="90,145" transparent="1" backgroundColor="#371e1c1a" size="520,385" scrollbarMode="showOnDemand" />
++ <eLabel text=" " position="80,382" zPosition="-1" size="540,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#021a1816" />
++ </screen>
++ <!-- Timer log -->
++ <screen name="TimerLog" position="90,120" size="550,380" title="Timer log">
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="136,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" size="136,40" alphatest="on" />
++ <widget name="key_red" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="loglist" position="0,45" size="555,250" scrollbarMode="showOnDemand" />
++ <widget name="logentry" position="0,300" size="555,130" font="Regular;20" />
++ </screen>
++ <!-- Timer sanity conflict -->
++ <screen name="TimerSanityConflict" position="90,120" size="550,430" title="Timer sanity error">
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" zPosition="0" size="136,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" zPosition="0" size="136,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="0,120" zPosition="0" size="136,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="140,120" zPosition="0" size="136,40" transparent="1" alphatest="on" />
++ <widget name="key_red" position="20,0" zPosition="1" size="115,40" font="Regular;20" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_green" position="160,0" zPosition="1" size="115,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="key_yellow" position="20,120" zPosition="1" size="115,40" font="Regular;20" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="key_blue" position="160,120" zPosition="1" size="115,40" font="Regular;20" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="timer1" position="0,45" size="555,75" scrollbarMode="showNever" />
++ <widget name="timer2" position="0,165" size="555,75" scrollbarMode="showNever" />
++ <widget name="list" position="0,260" size="555,144" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Timer Selection -->
++ <screen name="TimerSelection" position="90,120" size="550,430" title="Timer selection">
++ <widget name="timerlist" position="0,45" size="550,350" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Timeshift state -->
++ <screen name="TimeshiftState" position="70,70" zPosition="2" size="150,60" backgroundColor="transpBlack" flags="wfNoBorder">
++ <widget name="state" position="0,0" size="150,30" font="Regular;25" halign="center" backgroundColor="transpBlack" />
++ <widget source="session.CurrentService" render="Label" position="0,30" size="150,30" font="Regular;25" halign="center" foregroundColor="white" backgroundColor="transpBlack">
++ <convert type="ServicePosition">Remaining</convert>
++ </widget>
++ </screen>
++ <!-- Translator Info -->
++ <screen name="TranslationInfo" position="150,130" size="420,350" title="Translation">
++ <eLabel position="10,20" size="380,23" font="Regular;23" text="Translation:" />
++ <widget source="TranslatorName" render="Label" position="10,55" size="380,20" font="Regular;20" />
++ <widget source="TranslationInfo" render="Label" position="10,100" size="380,250" font="Regular;20" />
++ </screen>
++ <!-- Tutorial Wizard -->
++ <screen name="TutorialWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder">
++ <widget name="text" position="50,100" size="440,200" font="Regular;23" />
++ <widget name="list" position="50,300" zPosition="1" size="440,200" />
++ <widget name="rc" pixmap="750S/rc.png" position="520,600" zPosition="10" size="154,475" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="0,0" zPosition="11" size="37,70" alphatest="blend"/>
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend"/>
++ </screen>
++ <!-- Volumebar -->
++ <screen name="Volume" position="92,40" zPosition="1" size="539,44" title="Volume" flags="wfNoBorder" >
++ <ePixmap pixmap="750S/volume.png" position="0,0" size="539,44" />
++ <widget name="Volume" pixmap="750S/volume_box.png" position="70,16" zPosition="1" size="452,12" transparent="1" />
++ </screen>
++ <screen name="JobView" position="84,122" size="520,350" title="Job View">
++ <widget source="job_name" render="Label" position="20,12" size="480,60" font="Regular;28" />
++ <widget source="job_task" render="Label" position="20,90" size="480,50" font="Regular;23" />
++ <widget source="job_progress" render="Progress" position="20,162" size="480,36" borderWidth="2" backgroundColor="#254f7497" />
++ <widget source="job_progress" render="Label" position="120,166" size="280,32" font="Regular;28" foregroundColor="#000000" zPosition="2" halign="center" transparent="1" >
++ <convert type="ProgressToText" />
++ </widget>
++ <widget source="job_status" render="Label" position="20,212" size="480,26" font="Regular;23" />
++ <widget name="config" position="20,254" size="480,20" />
++ <widget source="cancelable" render="Pixmap" pixmap="750S/buttons/red.png" position="20,300" size="136,40" alphatest="on" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="cancelable" render="FixedLabel" text="Cancel" position="40,300" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="finished" render="Pixmap" pixmap="750S/buttons/green.png" position="190,300" size="136,40" alphatest="on" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="finished" render="FixedLabel" text="OK" font="Regular;20" halign="center" valign="center" position="210,300" size="115,40" transparent="1" backgroundColor="#1f771f" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="backgroundable" render="Pixmap" pixmap="750S/buttons/blue.png" position="360,300" size="136,40" alphatest="on" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="backgroundable" render="FixedLabel" text="Continue in background" font="Regular;20" halign="center" valign="center" position="380,300" size="115,40" transparent="1" backgroundColor="#18188b" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ </screen>
++ <!-- VirtualKeyBoard -->
++ <screen name="VirtualKeyBoard" position="center,center" size="560,350" zPosition="99" title="Virtual KeyBoard">
++ <ePixmap pixmap="skin_default/vkey_text.png" position="9,35" zPosition="-4" size="542,52" alphatest="on" />
++ <widget name="header" position="10,10" size="500,20" font="Regular;20" transparent="1" noWrap="1" />
++ <widget name="text" position="12,35" size="536,46" font="Regular;46" transparent="1" noWrap="1" halign="right" />
++ <widget name="list" position="10,100" size="540,225" selectionDisabled="1" transparent="1" />
++ </screen>
++ <!-- FileBrowser -->
++ <screen name="FileBrowser" position="center,120" size="520,420" title="DVD File Browser" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="filelist" position="5,50" size="510,370" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="CutListEditor" position="0,0" size="720,576" title="Cutlist editor" flags="wfNoBorder">
++ <eLabel text="Cutlist editor" position="65,60" size="300,25" font="Regular;20" />
++ <widget source="global.CurrentTime" render="Label" position="268,60" size="394,20" font="Regular;20" halign="right">
++ <convert type="ClockToText">Format:%A %B %d, %H:%M</convert>
++ </widget>
++ <eLabel position="268,98" size="394,304" backgroundColor="#505555" />
++ <widget name="Video" position="270,100" zPosition="1" size="390,300" backgroundColor="transparent" />
++ <widget source="session.CurrentService" render="Label" position="135,405" size="450,50" font="Regular;22" halign="center" valign="center">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Label" position="320,450" zPosition="1" size="420,25" font="Regular;20" halign="left" valign="center">
++ <convert type="ServicePosition">Position,Detailed</convert>
++ </widget>
++ <widget name="SeekState" position="210,450" zPosition="1" size="100,25" halign="right" font="Regular;20" valign="center" />
++ <eLabel position="48,98" size="204,274" backgroundColor="#505555" />
++ <eLabel position="50,100" size="200,270" backgroundColor="#000000" />
++ <widget source="cutlist" position="50,100" zPosition="1" size="200,270" scrollbarMode="showOnDemand" transparent="1" render="Listbox" >
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(size=(125, 20), text = 1, backcolor = MultiContentTemplateColor(3)),
++ MultiContentEntryText(pos=(125,0), size=(50, 20), text = 2, flags = RT_HALIGN_RIGHT, backcolor = MultiContentTemplateColor(3))
++ ],
++ "fonts": [gFont("Regular", 18)],
++ "itemHeight": 20
++ }
++ </convert>
++ </widget>
++ <widget name="Timeline" position="50,485" size="615,20" backgroundColor="#505555" pointer="750S/position_arrow.png:3,5" foregroundColor="black" />
++ <ePixmap pixmap="750S/icons/mp_buttons.png" position="275,515" size="169,30" alphatest="blend" />
++ </screen>
++ <screen name="DVDToolbox" position="center,120" size="560,420" title="DVD media toolbox" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="info" render="Label" position="20,50" size="520,100" font="Regular;20" />
++ <widget name="details" position="20,180" size="520,200" font="Regular;16" />
++ <widget source="space_bar" render="Progress" position="10,390" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
++ <widget source="space_label" render="Label" position="20,394" size="520,22" zPosition="2" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
++ </screen>
++ <screen name="ProjectSettings" position="center,120" size="560,420" title="Collection settings" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="config" position="5,50" size="550,276" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="750S/div-h.png" position="0,330" zPosition="1" size="560,2" />
++ <widget source="info" render="Label" position="10,340" size="550,80" font="Regular;18" halign="center" valign="center" />
++ </screen>
++ <screen name="TitleList" position="center,120" size="560,425" title="DVD Tool" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="15,0" zPosition="1" size="120,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="155,0" zPosition="1" size="120,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="435,0" zPosition="1" size="120,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget source="title_label" render="Label" position="10,48" size="540,38" font="Regular;18" transparent="1" />
++ <widget source="error_label" render="Label" position="10,48" size="540,340" zPosition="3" font="Regular;20" transparent="1" />
++ <widget source="titles" render="Listbox" scrollbarMode="showOnDemand" position="10,86" size="540,277" zPosition="3" transparent="1" >
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (0, 0), size = (420, 20), font = 0, flags = RT_HALIGN_LEFT, text = 1), # index 1 Title,
++ MultiContentEntryText(pos = (0, 20), size = (328, 17), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 description,
++ MultiContentEntryText(pos = (420, 6), size = (120, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 3), # index 3 begin time,
++ MultiContentEntryText(pos = (328, 20), size = (154, 17), font = 1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 channel,
++ MultiContentEntryText(pos = (482, 20), size = (58, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # index 4 channel,
++ ],
++ "fonts": [gFont("Regular", 20), gFont("Regular", 14)],
++ "itemHeight": 37
++ }
++ </convert>
++ </widget>
++ <widget source="space_bar" render="Progress" position="10,390" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
++ <widget source="space_label" render="Label" position="40,394" size="480,22" zPosition="2" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
++ </screen>
++ <screen name="DVDMovieSelection" position="center,120" size="560,425" title="Select a movie">
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="waitingtext" position="0,45" size="560,375" zPosition="4" font="Regular;22" halign="center" valign="center" />
++ <widget name="list" position="5,40" size="550,355" zPosition="2" scrollbarMode="showOnDemand" />
++ <widget name="DescriptionBorder" pixmap="750S/border_eventinfo.png" position="0,296" zPosition="1" size="560,103" transparent="1" alphatest="on" />
++ <widget source="Service" render="Label" position="5,298" zPosition="1" size="480,35" font="Regular;17" foregroundColor="#cccccc">
++ <convert type="MovieInfo">ShortDescription</convert>
++ </widget>
++ <widget source="Service" render="Label" position="495,298" zPosition="1" size="60,22" font="Regular;17" halign="right">
++ <convert type="ServiceTime">Duration</convert>
++ <convert type="ClockToText">AsLength</convert>
++ </widget>
++ <widget source="Service" render="Label" position="380,317" zPosition="2" size="175,22" font="Regular;17" halign="right">
++ <convert type="MovieInfo">RecordServiceName</convert>
++ </widget>
++ <widget source="Service" render="Label" position="5,337" zPosition="1" size="550,58" font="Regular;19">
++ <convert type="EventName">ExtendedDescription</convert>
++ </widget>
++ <widget name="freeDiskSpace" position="10,405" size="540,20" font="Regular;19" valign="center" halign="right" />
++ </screen>
++ <screen name="TitleProperties" position="center,120" size="560,425" title="Properties of current title" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget source="serviceinfo" render="Label" position="10,46" size="350,144" font="Regular;18" />
++ <widget name="thumbnail" position="370,46" size="180,144" alphatest="on" />
++ <widget name="config" position="10,196" size="540,228" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="DVDPlayer" flags="wfNoBorder" position="0,380" size="720,165" title="InfoBar" backgroundColor="transparent" >
++ <!-- Background -->
++ <ePixmap position="40,0" pixmap="750S/info-bg_mp.png" zPosition="-1" size="640,164" />
++ <!-- colorbuttons -->
++ <ePixmap position="275,125" pixmap="750S/icons/mp_buttons.png" size="169,30" alphatest="blend" />
++ <!-- Servicename -->
++ <ePixmap pixmap="750S/icons/icon_event.png" position="65,30" zPosition="1" size="15,10" alphatest="on" />
++ <widget source="session.CurrentService" render="Label" position="95,25" size="300,22" font="Regular;20" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" noWrap="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <!-- Chapter info -->
++ <widget name="chapterLabel" position="95,50" size="360,22" font="Regular;20" foregroundColor="#c3c3c9" backgroundColor="#263c59" transparent="1" />
++ <!-- Audio track info -->
++ <ePixmap pixmap="750S/icons/icon_dolby.png" position="540,25" zPosition="1" size="26,16" alphatest="on"/>
++ <widget name="audioLabel" position="570,25" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
++ <!-- Subtitle track info -->
++ <widget source="session.CurrentService" render="Pixmap" pixmap="750S/icons/icon_txt.png" position="540,45" zPosition="1" size="26,16" alphatest="on" >
++ <convert type="ServiceInfo">HasTelext</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget name="subtitleLabel" position="570,45" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
++ <!-- Angle info -->
++ <widget name="anglePix" pixmap="750S/icons/icon_view.png" position="540,70" size="26,16" alphatest="on" />
++ <widget name="angleLabel" position="570,70" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
++ <!-- Elapsed time -->
++ <widget source="session.CurrentService" render="Label" position="40,100" size="90,20" font="Regular;18" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" >
++ <convert type="ServicePosition">Position,ShowHours</convert>
++ </widget>
++ <!-- Progressbar (movie position)-->
++ <widget source="session.CurrentService" render="PositionGauge" position="130,105" size="460,10" zPosition="2" pointer="750S/position_pointer.png:460,0" transparent="1" >
++ <convert type="ServicePosition">Gauge</convert>
++ </widget>
++ <!-- Remaining time -->
++ <widget source="session.CurrentService" render="Label" position="590,100" size="90,20" font="Regular;18" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" >
++ <convert type="ServicePosition">Remaining,Negate,ShowHours</convert>
++ </widget>
++ </screen>
++ <screen name="ModemSetup" position="180,100" size="320,300" title="Modem" >
++ <ePixmap pixmap="750S/buttons/green.png" position="10,10" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/red.png" position="160,10" size="140,40" alphatest="on" />
++ <widget name="key_green" position="30,10" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_red" position="180,10" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="list" position="10,60" size="300,120" />
++ <widget name="state" position="10,210" size="300,80" font="Regular;20" />
++ </screen>
++ <screen name="picshow" position="center,120" size="560,420" title="PicturePlayer" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget source="label" render="Label" position="5,55" size="350,140" font="Regular;19" backgroundColor="#25062748" transparent="1" />
++ <widget name="thn" position="360,40" size="180,160" alphatest="on" />
++ <widget name="filelist" position="5,205" zPosition="2" size="550,210" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="Pic_Exif" position="center,center" size="560,360" title="Info" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="menu" render="Listbox" position="5,50" size="550,310" scrollbarMode="showOnDemand" selectionDisabled="1" >
++ <convert type="TemplatedMultiContent">
++ {
++ "template": [ MultiContentEntryText(pos = (5, 5), size = (250, 30), flags = RT_HALIGN_LEFT, text = 0), MultiContentEntryText(pos = (260, 5), size = (290, 30), flags = RT_HALIGN_LEFT, text = 1)],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 30
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="CleanupWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="153,40" size="380,330" font="Regular;22" />
++ <widget source="list" render="Listbox" position="43,300" size="460,220" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <widget name="config" position="53,340" zPosition="1" size="440,180" transparent="1" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="750S/buttons/button_red.png" position="40,222" zPosition="0" size="22,22" transparent="1" alphatest="on" />
++ <widget name="languagetext" position="66,225" size="95,30" font="Regular;18" />
++ <widget name="rc" pixmaps="750S/rc.png,750S/rcold.png" position="530,50" zPosition="10" size="154,500" alphatest="on" />
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
++ <widget name="arrowdown2" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
++ </screen>
++ <screen name="CleanupWizardConfiguration" position="center,120" size="560,420" title="CleanupWizard settings" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="config" zPosition="2" position="5,50" size="550,300" scrollbarMode="showOnDemand" transparent="1" />
++ <ePixmap pixmap="750S/div-h.png" position="0,370" zPosition="10" size="560,2" transparent="1" alphatest="on" />
++ <widget source="status" render="Label" position="10,380" size="540,40" zPosition="10" font="Regular;20" halign="center" valign="center" backgroundColor="#25062748" transparent="1"/>
++ </screen>
++ <screen name="CIselectMainMenu" position="center,center" size="500,250" title="CI assignment" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="CiList" position="5,50" size="490,200" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="CIconfigMenu" position="center,120" size="560,420" title="CI assignment" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget source="CAidList_desc" render="Label" position="5,50" size="550,22" font="Regular;20" backgroundColor="#25062748" transparent="1" />
++ <widget source="CAidList" render="Label" position="5,80" size="550,45" font="Regular;20" backgroundColor="#25062748" transparent="1" />
++ <ePixmap pixmap="750S/div-h.png" position="0,125" zPosition="1" size="560,2" />
++ <widget source="ServiceList_desc" render="Label" position="5,130" size="550,22" font="Regular;20" backgroundColor="#25062748" transparent="1" />
++ <widget name="ServiceList" position="5,160" size="550,250" zPosition="1" scrollbarMode="showOnDemand" />
++ <widget source="ServiceList_info" render="Label" position="5,160" size="550,250" zPosition="2" font="Regular;20" backgroundColor="#25062748" transparent="1" />
++ </screen>
++ <screen name="easyCIconfigMenu" position="center,120" size="560,420" title="CI assignment" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="ServiceList_desc" render="Label" position="5,50" size="550,22" font="Regular;20" backgroundColor="#25062748" transparent="1" />
++ <widget name="ServiceList" position="5,80" size="550,300" zPosition="1" scrollbarMode="showOnDemand" />
++ <widget source="ServiceList_info" render="Label" position="5,80" size="550,300" zPosition="2" font="Regular;20" backgroundColor="#25062748" transparent="1" />
++ </screen>
++ <screen name="CAidSelect" position="center,120" size="450,420" title="select CAId's" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="list" position="5,50" size="440,310" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="750S/div-h.png" position="0,370" zPosition="1" size="450,2" />
++ <widget source="introduction" render="Label" position="0,380" size="450,40" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
++ </screen>
++ <screen name="myProviderSelection" position="center,120" size="560,420" title="Select provider to add...">
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="list" position="5,50" size="550,310" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="750S/div-h.png" position="0,370" zPosition="1" size="560,2" />
++ <widget source="introduction" render="Label" position="0,380" size="560,40" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
++ </screen>
++ <screen name="myChannelSelection" position="center,120" size="560,420" title="Select service to add...">
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="list" position="5,50" size="550,310" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="750S/div-h.png" position="0,370" zPosition="1" size="560,2" />
++ <widget source="introduction" render="Label" position="0,380" size="560,40" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
++ </screen>
++ <screen name="CrashlogAutoSubmitConfiguration" position="center,120" size="560,420" title="CrashlogAutoSubmit settings" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="config" zPosition="2" position="5,50" size="550,300" scrollbarMode="showOnDemand" transparent="1" />
++ <ePixmap pixmap="750S/div-h.png" position="0,360" zPosition="10" size="560,2" transparent="1" alphatest="on" />
++ <widget source="status" render="Label" position="10,370" size="540,40" zPosition="10" font="Regular;20" halign="center" valign="center" backgroundColor="#25062748" transparent="1"/>
++ <widget name="VKeyIcon" pixmap="750S/buttons/key_text.png" position="10,390" zPosition="10" size="35,25" transparent="1" alphatest="on" />
++ <widget name="HelpWindow" pixmap="750S/vkey_icon.png" position="160,300" zPosition="1" size="1,1" transparent="1" alphatest="on" />
++ </screen>
++ <screen name="DefaultServiceScan" position="150,115" size="420,390" title="Service Scan">
++ <widget source="FrontendInfo" render="Pixmap" pixmap="750S/icons/scan-s.png" position="5,5" size="64,64" transparent="1" alphatest="blend">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">0,0</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="FrontendInfo" render="Pixmap" pixmap="750S/icons/scan-c.png" position="5,5" size="64,64" transparent="1" alphatest="on">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">1,1</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="FrontendInfo" render="Pixmap" pixmap="750S/icons/scan-t.png" position="5,5" size="64,64" transparent="1" alphatest="on">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">2,2</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget name="network" position="80,15" size="330,20" font="Regular;20" />
++ <widget name="transponder" position="80,40" size="330,20" font="Regular;20" />
++ <widget name="scan_state" position="10,80" zPosition="2" size="400,20" font="Regular;18" />
++ <widget name="pass" position="10,80" size="400,20" font="Regular;18" />
++ <widget name="scan_progress" position="10,105" size="400,15" pixmap="750S/progress_big.png" borderWidth="2" borderColor="#cccccc" />
++ <widget name="servicelist" position="10,135" size="400,265" selectionDisabled="1" />
++ </screen>
++ <screen name="DiseqcTester" position="90,100" size="520,400" title="DiSEqC Tester" >
++ <!--ePixmap pixmap="750S/icons/dish_scan.png" position="5,25" zPosition="0" size="119,110" transparent="1" alphatest="on" />
++ <widget source="Frontend" render="Label" position="190,10" zPosition="2" size="260,20" font="Regular;19" halign="center" valign="center" transparent="1">
++ <convert type="FrontendInfo">SNRdB</convert>
++ </widget>
++ <eLabel name="snr" text="SNR:" position="120,35" size="60,22" font="Regular;21" halign="right" transparent="1" />
++ <widget source="Frontend" render="Progress" position="190,35" size="260,20" pixmap="750S/bar_snr.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">SNR</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="460,35" size="60,22" font="Regular;21">
++ <convert type="FrontendInfo">SNR</convert>
++ </widget>
++ <eLabel name="agc" text="AGC:" position="120,60" size="60,22" font="Regular;21" halign="right" transparent="1" />
++ <widget source="Frontend" render="Progress" position="190,60" size="260,20" pixmap="750S/bar_snr.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="460,60" size="60,22" font="Regular;21">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <eLabel name="ber" text="BER:" position="120,85" size="60,22" font="Regular;21" halign="right" transparent="1" />
++ <widget source="Frontend" render="Progress" position="190,85" size="260,20" pixmap="750S/bar_ber.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">BER</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="460,85" size="60,22" font="Regular;21">
++ <convert type="FrontendInfo">BER</convert>
++ </widget>
++ <eLabel name="lock" text="Lock:" position="120,115" size="60,22" font="Regular;21" halign="right" />
++ <widget source="Frontend" render="Pixmap" pixmap="750S/icons/lock_on.png" position="190,110" zPosition="1" size="38,31" alphatest="on">
++ <convert type="FrontendInfo">LOCK</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="Frontend" render="Pixmap" pixmap="skin_default/icons/lock_off.png" position="190,110" zPosition="1" size="38,31" alphatest="on">
++ <convert type="FrontendInfo">LOCK</convert>
++ <convert type="ConditionalShowHide">Invert</convert>
++ </widget-->
++ <widget source="progress_list" render="Listbox" position="0,0" size="510,150" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (10, 0), size = (330, 25), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the index name,
++ MultiContentEntryText(pos = (330, 0), size = (150, 25), flags = RT_HALIGN_RIGHT, text = 2) # index 2 is the status,
++ ],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ <eLabel name="overall_progress" text="Overall progress:" position="20,162" size="480,22" font="Regular;21" halign="center" transparent="1" />
++ <widget source="overall_progress" render="Progress" position="20,192" size="480,20" borderWidth="2" backgroundColor="#254f7497" />
++ <eLabel name="overall_progress" text="Progress:" position="20,222" size="480,22" font="Regular;21" halign="center" transparent="1" />
++ <widget source="sub_progress" render="Progress" position="20,252" size="480,20" borderWidth="2" backgroundColor="#254f7497" />
++
++ <eLabel name="" text="Failed:" position="20,282" size="140,22" font="Regular;21" halign="left" transparent="1" />
++ <widget source="failed_counter" render="Label" position="160,282" size="100,20" font="Regular;21" />
++
++ <eLabel name="" text="Succeeded:" position="20,312" size="140,22" font="Regular;21" halign="left" transparent="1" />
++ <widget source="succeeded_counter" render="Label" position="160,312" size="100,20" font="Regular;21" />
++
++ <eLabel name="" text="With errors:" position="20,342" size="140,22" font="Regular;21" halign="left" transparent="1" />
++ <widget source="witherrors_counter" render="Label" position="160,342" size="100,20" font="Regular;21" />
++
++ <eLabel name="" text="Not tested:" position="20,372" size="140,22" font="Regular;21" halign="left" transparent="1" />
++ <widget source="untestable_counter" render="Label" position="160,372" size="100,20" font="Regular;21" />
++
++ <widget source="CmdText" render="Label" position="300,282" size="180,200" font="Regular;21" />
++ </screen>
++ <screen name="DiseqcTesterNimSelection" position="160,123" size="400,330" title="Choose Tuner">
++ <widget source="nimlist" render="Listbox" position="0,0" size="380,300" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (10, 5), size = (360, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name,
++ MultiContentEntryText(pos = (50, 30), size = (320, 30), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings,
++ ],
++ "fonts": [gFont("Regular", 20), gFont("Regular", 15)],
++ "itemHeight": 70
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="FPUpgrade" position="150,200" size="450,200" title="FP upgrade required" >
++ <widget name="text" position="0,0" size="550,50" font="Regular;20" />
++ <widget name="oldversion_label" position="10,100" size="290,25" font="Regular;20" />
++ <widget name="newversion_label" position="10,125" size="290,25" font="Regular;20" />
++ <widget name="oldversion" position="300,100" size="50,25" font="Regular;20" />
++ <widget name="newversion" position="300,125" size="50,25" font="Regular;20" />
++ </screen>
++ <screen name="SystemMessage" position="150,200" size="450,200" title="System Message" >
++ <widget source="text" position="0,0" size="450,200" font="Regular;20" halign="center" valign="center" render="Label" />
++ <ePixmap pixmap="750S/icons/input_error.png" position="5,5" size="53,53" alphatest="on" />
++ </screen>
++ <screen name="NFIDownload" position="90,95" size="560,420" title="Image download utility">
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;19" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;19" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;19" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;19" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
++
++ <widget source="label_top" render="Label" position="10,44" size="240,20" font="Regular;16" />
++ <widget name="feedlist" position="10,66" size="250,222" scrollbarMode="showOnDemand" />
++ <widget name="destlist" position="0,66" size="260,222" scrollbarMode="showOnDemand" />
++
++ <widget source="label_bottom" render="Label" position="10,312" size="240,18" font="Regular;16"/>
++ <widget source="path_bottom" render="Label" position="10,330" size="250,42" font="Regular;18" />
++
++ <widget source="infolabel" render="Label" position="270,44" size="280,284" font="Regular;16" />
++ <widget source="job_progressbar" render="Progress" position="10,374" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
++ <widget source="job_progresslabel" render="Label" position="130,378" zPosition="2" font="Regular;18" halign="center" transparent="1" size="300,22" foregroundColor="#000000" />
++ <widget source="statusbar" render="Label" position="10,404" size="540,16" font="Regular;16" foregroundColor="#cccccc" />
++ </screen>
++ <screen name="NFIFlash" position="90,95" size="560,420" title="Image flash utility">
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
++ <widget source="listlabel" render="Label" position="16,44" size="200,21" valign="center" font="Regular;18" />
++ <widget name="filelist" position="0,68" size="260,260" scrollbarMode="showOnDemand" />
++ <widget source="infolabel" render="Label" position="270,44" size="280,284" font="Regular;16" />
++ <widget source="job_progressbar" render="Progress" position="10,374" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
++ <widget source="job_progresslabel" render="Label" position="180,378" zPosition="2" font="Regular;18" halign="center" transparent="1" size="200,22" foregroundColor="#000000" />
++ <widget source="statusbar" render="Label" position="10,404" size="540,16" font="Regular;16" foregroundColor="#cccccc" />
++ </screen>
++ <screen name="BackupSelection" position="center,130" size="560,400" title="Select files/folders to backup">
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="checkList" position="5,50" size="550,250" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="RestoreMenu" position="center,130" size="560,400" title="Restore backups" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="filelist" position="5,50" size="550,230" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="ImageWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="153,40" size="340,330" font="Regular;22" />
++ <widget source="list" render="Listbox" position="43,340" size="490,180" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <widget name="config" position="53,340" zPosition="1" size="440,180" transparent="1" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="750S/buttons/button_red.png" position="33,222" zPosition="0" size="22,22" transparent="1" alphatest="on" />
++ <widget name="languagetext" position="55,225" size="95,30" font="Regular;18" />
++<!-- <widget name="wizard" pixmap="skin_default/wizard.png" position="40,50" zPosition="10" size="110,174" alphatest="on" /> -->
++ <widget name="rc" pixmaps="750S/rc.png,750S/rcold.png" position="530,50" zPosition="10" size="154,500" alphatest="blend" />
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowdown2" pixmap="750S/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ </screen>
++ <screen name="UpdatePluginMenu" position="center,120" size="610,410" title="Software management" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <ePixmap pixmap="750S/border_menu_350.png" position="5,50" zPosition="1" size="350,300" transparent="1" alphatest="on" />
++ <widget source="menu" render="Listbox" position="15,60" size="330,290" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (2, 2), size = (330, 24), flags = RT_HALIGN_LEFT, text = 1), # index 0 is the MenuText,
++ ],
++ "fonts": [gFont("Regular", 22)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ <widget source="menu" render="Listbox" position="360,50" size="240,300" scrollbarMode="showNever" selectionDisabled="1">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (2, 2), size = (240, 300), flags = RT_HALIGN_CENTER|RT_VALIGN_CENTER|RT_WRAP, text = 2), # index 2 is the Description,
++ ],
++ "fonts": [gFont("Regular", 22)],
++ "itemHeight": 300
++ }
++ </convert>
++ </widget>
++ <widget source="status" render="Label" position="5,360" zPosition="10" size="600,50" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <screen name="PluginManager" position="center,120" size="560,420" title="Extensions management" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget source="list" render="Listbox" position="5,50" size="550,340" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"templates":
++ {"default": (51,[
++ MultiContentEntryText(pos = (30, 1), size = (470, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (30, 25), size = (470, 24), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
++ MultiContentEntryPixmapAlphaTest(pos = (475, 0), size = (48, 48), png = 5), # index 5 is the status pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 6), # index 6 is the div pixmap
++ ]),
++ "category": (40,[
++ MultiContentEntryText(pos = (30, 0), size = (500, 22), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (30, 22), size = (500, 16), font=2, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the description
++ MultiContentEntryPixmapAlphaTest(pos = (0, 38), size = (550, 2), png = 3), # index 3 is the div pixmap
++ ])
++ },
++ "fonts": [gFont("Regular", 22),gFont("Regular", 20),gFont("Regular", 16)],
++ "itemHeight": 52
++ }
++ </convert>
++ </widget>
++ <widget source="status" render="Label" position="5,390" zPosition="10" size="540,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <screen name="PluginManagerInfo" position="center,120" size="560,420" title="Plugin manager activity information" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="list" render="Listbox" position="5,60" size="550,300" scrollbarMode="showOnDemand" selectionDisabled="1">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (50, 0), size = (150, 26), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (50, 27), size = (540, 23), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
++ MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (0, 48), size = (550, 2), png = 3), # index 3 is the div pixmap
++ ],
++ "fonts": [gFont("Regular", 24),gFont("Regular", 22)],
++ "itemHeight": 50
++ }
++ </convert>
++ </widget>
++ <ePixmap pixmap="750S/div-h.png" position="0,370" zPosition="10" size="560,2" transparent="1" alphatest="on" />
++ <widget source="status" render="Label" position="5,375" zPosition="10" size="550,44" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <screen name="PluginManagerHelp" position="center,120" size="560,420" title="Plugin manager help" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="list" render="Listbox" position="5,60" size="550,300" scrollbarMode="showOnDemand" selectionDisabled="1">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (50, 0), size = (540, 26), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (50, 27), size = (540, 23), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
++ MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (0, 48), size = (550, 2), png = 3), # index 3 is the div pixmap
++ ],
++ "fonts": [gFont("Regular", 24),gFont("Regular", 22)],
++ "itemHeight": 50
++ }
++ </convert>
++ </widget>
++ <ePixmap pixmap="750S/div-h.png" position="0,370" zPosition="10" size="560,2" transparent="1" alphatest="on" />
++ <widget source="status" render="Label" position="5,375" zPosition="10" size="550,44" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <screen name="PluginDetails" position="center,120" size="600,420" title="Plugin details" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="author" render="Label" position="10,50" size="500,25" zPosition="10" font="Regular;21" transparent="1" />
++ <widget name="statuspic" position="550,40" size="48,48" alphatest="on"/>
++ <widget name="divpic" position="0,80" size="600,2" alphatest="on"/>
++ <widget name="detailtext" position="10,90" size="270,330" zPosition="10" font="Regular;21" transparent="1" halign="left" valign="top"/>
++ <widget name="screenshot" position="290,90" size="300,330" alphatest="on"/>
++ </screen>
++ <screen name="UpdatePlugin" position="center,center" size="550,200" title="Software update" >
++ <widget name="activityslider" position="0,0" size="550,5" />
++ <widget name="slider" position="0,150" size="550,30" />
++ <widget source="package" render="Label" position="10,30" size="540,20" font="Regular;18" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
++ <widget source="status" render="Label" position="10,60" size="540,45" font="Regular;20" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
++ </screen>
++ <screen name="IPKGMenu" position="center,130" size="560,400" title="Select upgrade source to edit." >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="filelist" position="5,50" size="550,340" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="IPKGSource" position="center,center" size="560,80" title="Edit upgrade source url." >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="text" position="5,50" size="550,25" font="Regular;20" backgroundColor="background" foregroundColor="#cccccc" />
++ </screen>
++ <screen name="PacketManager" position="center,120" size="530,420" title="Packet manager" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="list" render="Listbox" position="5,50" size="520,365" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (5, 1), size = (440, 28), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (5, 26), size = (440, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
++ MultiContentEntryPixmapAlphaTest(pos = (445, 2), size = (48, 48), png = 4), # index 4 is the status pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (5, 50), size = (510, 2), png = 5), # index 4 is the div pixmap
++ ],
++ "fonts": [gFont("Regular", 22),gFont("Regular", 14)],
++ "itemHeight": 52
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="IpkgInstaller" position="center,120" size="550,420" title="Install extensions" >
++ <ePixmap pixmap="750S/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
++ <ePixmap pixmap="750S/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="list" position="5,50" size="540,330" />
++ <ePixmap pixmap="750S/div-h.png" position="0,380" zPosition="10" size="560,2" transparent="1" alphatest="on" />
++ <widget source="introduction" render="Label" position="5,390" zPosition="10" size="550,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <screen name="VideoWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="153,50" size="340,270" font="Regular;23" />
++ <widget source="list" render="Listbox" position="200,300" size="290,200" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <widget name="config" position="50,300" zPosition="1" size="440,200" transparent="1" scrollbarMode="showOnDemand" />
++<!-- <widget name="wizard" pixmap="skin_default/wizard.png" position="40,50" zPosition="10" size="110,174" transparent="1" alphatest="on"/> -->
++ <ePixmap pixmap="750S/buttons/button_red.png" position="33,222" zPosition="0" size="22,22" transparent="1" alphatest="on" />
++ <widget name="languagetext" position="55,225" size="95,30" font="Regular;18" />
++ <widget name="portpic" position="50,300" zPosition="10" size="150,150" transparent="1" alphatest="on"/>
++ <widget name="rc" pixmaps="750S/rc.png,750S/rcold.png" position="500,50" zPosition="10" size="154,500" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="750S/arrowdown.png" position="0,0" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown2" pixmap="750S/arrowdown.png" position="0,0" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="750S/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <screen name="LocationBox" position="100,75" size="540,460" >
++ <widget name="text" position="0,2" size="540,22" font="Regular;22" />
++ <widget name="target" position="0,23" size="540,22" valign="center" font="Regular;22" />
++ <widget name="filelist" position="0,55" zPosition="1" size="540,210" scrollbarMode="showOnDemand" selectionDisabled="1" />
++ <widget name="textbook" position="0,272" size="540,22" font="Regular;22" />
++ <widget name="booklist" position="5,302" zPosition="2" size="535,100" scrollbarMode="showOnDemand" />
++ <widget name="red" position="0,415" zPosition="1" size="135,40" pixmap="750S/buttons/red.png" transparent="1" alphatest="on" />
++ <widget name="key_red" position="20,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="green" position="135,415" zPosition="1" size="135,40" pixmap="750S/buttons/green.png" transparent="1" alphatest="on" />
++ <widget name="key_green" position="155,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="yellow" position="270,415" zPosition="1" size="135,40" pixmap="750S/buttons/yellow.png" transparent="1" alphatest="on" />
++ <widget name="key_yellow" position="290,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="blue" position="405,415" zPosition="1" size="135,40" pixmap="750S/buttons/blue.png" transparent="1" alphatest="on" />
++ <widget name="key_blue" position="425,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <!-- LCD/OLED Screens -->
++
++ <!-- LCD screen (channelselection) -->
++ <screen name="ChannelSelection_summary" position="0,0" size="132,64" id="1">
++ <widget source="parent.ServiceEvent" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="parent.ServiceEvent" render="Progress" position="16,27" size="100,5" borderWidth="1">
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="6,32" size="90,32" font="Regular;32" halign="right" valign="top">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="100,34" zPosition="1" size="26,30" font="Regular;16" valign="top">
++ <convert type="ClockToText">Format:%S</convert>
++ </widget>
++ </screen>
++ <!-- Color OLED screen (ChannelSelection) -->
++ <screen name="ChannelSelection_summary" position="0,0" size="96,64" id="2">
++ <widget source="parent.ServiceEvent" render="Label" position="0,0" size="96,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="parent.ServiceEvent" render="Progress" position="0,27" size="96,5" borderWidth="1" >
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="0,32" size="96,32" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ </screen>
++ <!-- LCD screen (main) -->
++ <screen name="InfoBarSummary" position="0,0" size="132,64" id="1">
++ <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Progress" position="16,27" size="100,5" borderWidth="1">
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="6,32" size="90,32" font="Regular;32" halign="right" valign="top">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="100,34" zPosition="1" size="26,30" font="Regular;16" valign="top">
++ <convert type="ClockToText">Format:%S</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" text=" " position="6,30" zPosition="1" size="120,34">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- Color OLED screen (main) -->
++ <screen name="InfoBarSummary" position="0,0" size="96,64" id="2">
++ <widget source="session.CurrentService" render="Label" position="0,0" size="96,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Progress" position="0,27" size="96,5" borderWidth="1" >
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="0,32" size="96,32" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" text=" " position="0,32" zPosition="1" size="96,32">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- LCD screen (movieplayer) -->
++ <screen name="InfoBarMoviePlayerSummary" position="0,0" size="132,64" id="1">
++ <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Progress" position="16,27" size="100,5" borderWidth="1">
++ <convert type="ServicePosition">Position</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="6,32" size="120,32" font="Regular;32" halign="center" valign="center">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" text=" " position="6,32" zPosition="1" size="120,32">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- Color OLED screen (movieplayer) -->
++ <screen name="InfoBarMoviePlayerSummary" position="0,0" size="96,64" id="2">
++ <widget source="session.CurrentService" render="Label" position="0,0" size="96,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Progress" position="0,27" size="96,5" borderWidth="1" >
++ <convert type="ServicePosition">Position</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="0,32" size="96,32" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" text=" " position="0,32" zPosition="1" size="96,32">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- LCD screen (ChoiceBox) -->
++ <screen name="ChoiceBox_summary" position="0,0" size="132,64" id="1">
++ <widget source="parent.summary_list" render="Label" position="6,0" size="126,64" font="Regular;11" />
++ </screen>
++ <!-- Color OLED screen (ChoiceBox) -->
++ <screen name="ChoiceBox_summary" position="0,0" size="96,64" id="2">
++ <widget source="parent.summary_list" render="Label" position="0,0" size="96,64" font="Regular;10" />
++ </screen>
++ <!-- LCD screen (MessageBox) -->
++ <screen name="MessageBox_summary" position="0,0" size="132,64" id="1">
++ <widget source="parent.Text" render="Label" position="0,0" size="132,52" font="Regular;11" halign="center" valign="center" />
++ <widget source="parent.selectedChoice" render="Label" position="6,50" size="120,14" font="Regular;14" halign="center" valign="center" />
++ </screen>
++ <!-- Color OLED screen (MessageBox) -->
++ <screen name="MessageBox_summary" position="0,0" size="96,64" id="2">
++ <widget source="parent.Text" render="Label" position="0,0" size="96,52" font="Regular;10" halign="center" valign="center" />
++ <widget source="parent.selectedChoice" render="Label" position="0,50" size="96,14" font="Regular;12" halign="center" valign="center" />
++ </screen>
++
++ <!-- LCD screen (menus) -->
++ <screen name="MenuSummary" position="0,0" size="132,64" id="1">
++ <widget source="parent.title" render="Label" position="6,0" size="120,32" font="Regular;14" halign="center" valign="center"/>
++ <widget source="parent.menu" render="Label" position="6,32" size="120,32" font="Regular;16" halign="center" valign="center">
++ <convert type="StringListSelection" />
++ </widget>
++ </screen>
++ <!-- Color OLED screen (menus) -->
++ <screen name="MenuSummary" position="0,0" size="96,64" id="2">
++ <widget source="parent.title" render="Label" position="0,0" size="96,32" font="Regular;14" halign="center" valign="center"/>
++ <widget source="parent.menu" render="Label" position="0,32" size="96,32" font="Regular;14" halign="center" valign="center">
++ <convert type="StringListSelection" />
++ </widget>
++ </screen>
++ <!-- LCD screen (ServiceScan) -->
++ <screen name="ServiceScanSummary" position="0,0" size="132,64" id="1">
++ <widget name="Title" position="6,4" size="120,42" font="Regular;16" transparent="1" />
++ <widget name="Service" position="6,22" size="120,26" font="Regular;12" transparent="1" />
++ <widget name="scan_progress" position="6,50" zPosition="1" borderWidth="1" size="56,12" backgroundColor="dark" />
++ </screen>
++ <!-- Color OLED screen (ServiceScan) -->
++ <screen name="ServiceScanSummary" position="0,0" size="96,64" id="2">
++ <widget name="Title" position="0,0" size="96,30" font="Regular;14" transparent="1" />
++ <widget name="Service" position="0,30" size="96,20" font="Regular;10" transparent="1" />
++ <widget name="scan_progress" position="0,50" zPosition="1" borderWidth="1" size="96,12" backgroundColor="dark" />
++ </screen>
++ <!-- LCD screen (setup) -->
++ <screen name="SetupSummary" position="0,0" size="132,64" id="1">
++ <widget source="SetupTitle" render="Label" position="6,0" size="120,16" font="Regular;12" />
++ <widget source="SetupEntry" render="Label" position="6,16" size="120,32" font="Regular;12" />
++ <widget source="SetupValue" render="Label" position="6,48" size="120,16" font="Regular;12" />
++ </screen>
++ <!-- Color OLED screen (setup) -->
++ <screen name="SetupSummary" position="0,0" size="96,64" id="2">
++ <widget source="SetupTitle" render="Label" position="0,0" size="96,16" font="Regular;10" />
++ <widget source="SetupEntry" render="Label" position="0,16" size="96,32" font="Regular;10" />
++ <widget source="SetupValue" render="Label" position="0,48" size="96,16" font="Regular;10" />
++ </screen>
++ <!-- LCD screen (misc) -->
++ <screen name="SimpleSummary" position="0,0" size="132,64" id="1">
++ <widget source="parent.Title" render="Label" position="6,0" size="120,64" font="Regular;16" halign="center" valign="center" />
++ </screen>
++ <!-- Color OLED screen (misc) -->
++ <screen name="SimpleSummary" position="0,0" size="96,64" id="2">
++ <widget source="parent.Title" render="Label" position="0,0" size="96,64" font="Regular;14" halign="center" valign="center" />
++ </screen>
++ <!-- LCD screen (standby) -->
++ <screen name="StandbySummary" position="0,0" size="132,64" id="1">
++ <widget source="global.CurrentTime" render="Label" position="6,0" size="120,64" font="Regular;40" halign="center" valign="center">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" position="6,0" zPosition="1" size="120,64" text=" ">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- Color OLED screen (standby) -->
++ <screen name="StandbySummary" position="0,0" size="96,64" id="2">
++ <widget source="global.CurrentTime" render="Label" position="0,0" size="96,64" font="Regular;40" halign="center" valign="center">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" position="0,0" zPosition="1" size="96,64" text=" ">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- LCD screen (JobView) -->
++ <screen name="JobView_summary" position="0,0" size="132,64" id="1">
++ <widget source="parent.summary_job_name" render="Label" position="6,4" size="120,42" font="Regular;16" />
++ <widget source="parent.summary_job_task" render="Label" position="6,22" size="120,26" font="Regular;12" />
++ <widget source="parent.summary_job_progress" render="Progress" position="6,50" size="60,12" borderWidth="1" zPosition="1" />
++ <widget source="parent.summary_job_progress" render="Label" position="66,50" size="50,12" font="Regular;12" zPosition="2" halign="center" transparent="1" >
++ <convert type="ProgressToText" />
++ </widget>
++ </screen>
++ <!-- Color OLED screen (JobView) -->
++ <screen name="JobView_summary" position="0,0" size="96,64" id="2">
++ <widget source="parent.summary_job_name" render="Label" position="0,4" size="96,42" font="Regular;14" />
++ <widget source="parent.summary_job_task" render="Label" position="0,22" size="96,26" font="Regular;10" />
++ <widget source="parent.summary_job_progress" render="Progress" position="0,50" size="60,12" borderWidth="1" zPosition="1" />
++ <widget source="parent.summary_job_progress" render="Label" position="60,50" size="36,12" font="Regular;10" zPosition="2" halign="center" transparent="1" >
++ <convert type="ProgressToText" />
++ </widget>
++ </screen>
++ <!-- LCD screen (Wizard) -->
++ <screen name="WizardSummary" position="0,0" size="132,64" id="1">
++ <widget source="text" render="Label" position="6,0" size="120,16" font="Regular;16" transparent="1" />
++ <widget source="parent.list" render="Label" position="6,18" size="120,46" font="Regular;12">
++ <convert type="StringListSelection" />
++ </widget>
++ </screen>
++ <!-- Color OLED screen (Wizard) -->
++ <screen name="WizardSummary" position="0,0" size="96,64" id="2">
++ <widget source="text" render="Label" position="0,0" size="96,16" font="Regular;14" transparent="1" />
++ <widget source="parent.list" render="Label" position="0,18" size="96,46" font="Regular;12">
++ <convert type="StringListSelection" />
++ </widget>
++ </screen>
++
++</skin>
+diff --git a/data/Makefile.am b/data/Makefile.am
+index 1ed9444..d75b822 100644
+--- a/data/Makefile.am
++++ b/data/Makefile.am
+@@ -1,4 +1,4 @@
+-SUBDIRS = countries fonts defaults extensions skin_default
++SUBDIRS = countries fonts defaults extensions skin_default 750S Vu_HD
+
+ dist_pkgdata_DATA = \
+ defaultsatlists.xml \
+diff --git a/data/Vu_HD/Makefile.am b/data/Vu_HD/Makefile.am
+new file mode 100644
+index 0000000..ee39535
+--- /dev/null
++++ b/data/Vu_HD/Makefile.am
+@@ -0,0 +1,6 @@
++SUBDIRS = menu icons buttons countries
++
++installdir = $(DATADIR)/enigma2/Vu_HD
++
++install_DATA = \
++ *.xml *.png
+diff --git a/data/Vu_HD/buttons/Makefile.am b/data/Vu_HD/buttons/Makefile.am
+new file mode 100644
+index 0000000..cd14ba2
+--- /dev/null
++++ b/data/Vu_HD/buttons/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(DATADIR)/enigma2/Vu_HD/buttons
++
++install_DATA = \
++ *.png
+diff --git a/data/Vu_HD/countries/Makefile.am b/data/Vu_HD/countries/Makefile.am
+new file mode 100644
+index 0000000..9a025db
+--- /dev/null
++++ b/data/Vu_HD/countries/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(DATADIR)/enigma2/Vu_HD/countries
++
++install_DATA = \
++ *.png
+diff --git a/data/Vu_HD/icons/Makefile.am b/data/Vu_HD/icons/Makefile.am
+new file mode 100644
+index 0000000..0351458
+--- /dev/null
++++ b/data/Vu_HD/icons/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(DATADIR)/enigma2/Vu_HD/icons
++
++install_DATA = \
++ *.png
+diff --git a/data/Vu_HD/menu/Makefile.am b/data/Vu_HD/menu/Makefile.am
+new file mode 100644
+index 0000000..ed47ec9
+--- /dev/null
++++ b/data/Vu_HD/menu/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(DATADIR)/enigma2/Vu_HD/menu
++
++install_DATA = \
++ *.png
+diff --git a/data/Vu_HD/skin.xml b/data/Vu_HD/skin.xml
+new file mode 100755
+index 0000000..469b314
+--- /dev/null
++++ b/data/Vu_HD/skin.xml
+@@ -0,0 +1,3036 @@
++<skin>
++ <!-- VU+ skin (skin.xml) -->
++ <output id="0">
++ <resolution xres="1280" yres="720" bpp="32" />
++ </output>
++ <!-- Colors (#AARRGGBB) -->
++ <colors>
++ <color name="white" value="#ffffff" />
++ <color name="black" value="#000000" />
++ <color name="dark" value="#25062748" />
++ <color name="menu" value="#25062748" />
++ <color name="red" value="#f23d21" />
++ <color name="green" value="#389416" />
++ <color name="blue" value="#0064c7" />
++ <color name="yellow" value="#bab329" />
++ <color name="transparent" value="#ffffffff" />
++ <color name="transpBlack" value="#80000000" />
++ <color name="transpWhite" value="#80ffffff" />
++ <color name="background" value="#27d8dee2" />
++ <color name="foreground" value="#1c1c1c" />
++ <color name="darkgrey" value="#279e9fa4" />
++ </colors>
++ <!-- Main screen colors (id=0 Framebuffer) -->
++ <windowstyle type="skinned" id="0">
++ <title offset="33,14" font="Regular;20" />
++ <color name="Background" color="#279e9fa4" />
++ <color name="LabelForeground" color="#3c3c3c" />
++ <color name="ListboxBackground" color="#279e9fa4" />
++ <color name="ListboxForeground" color="#1c1c1c" />
++<!-- <color name="ListboxSelectedBackground" color="#11252525" /> -->
++ <color name="ListboxSelectedBackground" color="#1a53bb" />
++ <color name="ListboxSelectedForeground" color="#ffffff" />
++ <color name="ListboxMarkedBackground" color="#ff0000" />
++ <color name="ListboxMarkedForeground" color="#ffffff" />
++ <color name="ListboxMarkedAndSelectedBackground" color="#800000" />
++ <color name="ListboxMarkedAndSelectedForeground" color="#ffffff" />
++ <color name="WindowTitleForeground" color="#1c1c1c" />
++ <color name="WindowTitleBackground" color="#27dddfe1" />
++ <!-- Main screen border png's -->
++ <borderset name="bsWindow">
++ <pixmap pos="bpTopLeft" filename="Vu_HD/b_tl.png" />
++ <pixmap pos="bpTop" filename="Vu_HD/b_t.png" />
++ <pixmap pos="bpTopRight" filename="Vu_HD/b_tr.png" />
++ <pixmap pos="bpLeft" filename="Vu_HD/b_l.png" />
++ <pixmap pos="bpRight" filename="Vu_HD/b_r.png" />
++ <pixmap pos="bpBottomLeft" filename="Vu_HD/b_bl.png" />
++ <pixmap pos="bpBottom" filename="Vu_HD/b_b.png" />
++ <pixmap pos="bpBottomRight" filename="Vu_HD/b_br.png" />
++ </borderset>
++ </windowstyle>
++ <!-- Main screen colors (id=1 LCD) -->
++ <windowstyle type="skinned" id="1">
++ <color name="Background" color="#000000" />
++ <color name="LabelForeground" color="#ffffff" />
++ <color name="ListboxBackground" color="#000000" />
++ <color name="ListboxForeground" color="#ffffff" />
++ <color name="ListboxSelectedBackground" color="#000000" />
++ <color name="ListboxSelectedForeground" color="#ffffff" />
++ <color name="ListboxMarkedBackground" color="#000000" />
++ <color name="ListboxMarkedForeground" color="#ffffff" />
++ <color name="ListboxMarkedAndSelectedBackground" color="#000000" />
++ <color name="ListboxMarkedAndSelectedForeground" color="#ffffff" />
++ <color name="WindowTitleForeground" color="#ffffff" />
++ <color name="WindowTitleBackground" color="#000000" />
++ </windowstyle>
++ <!-- Fonts -->
++ <fonts>
++ <font filename="MyriadPro-Regular.otf" name="Regular" scale="100" />
++ <font filename="MyriadPro-Semibold.otf" name="Semibold" scale="100" />
++ <font filename="MyriadPro-SemiboldIt.otf" name="Semiboldit" scale="100" />
++ <font filename="lcd.ttf" name="LCD" scale="100" />
++ <font filename="ae_AlMateen.ttf" name="Replacement" scale="90" replacement="1" />
++ <font filename="tuxtxt.ttf" name="Console" scale="100" />
++ <font filename="nmsbd.ttf" name="Subtitlefont" scale="90" />
++ </fonts>
++ <subtitles>
++ <sub name="Subtitle_TTX" font="Subtitlefont;30" shadowColor="#40101010" shadowOffset="3,3" />
++ <sub name="Subtitle_Regular" font="Subtitlefont;30" foregroundColor="#DCDCDC" shadowColor="#40101010" shadowOffset="3,3" />
++ <sub name="Subtitle_Bold" font="Replacement;30" foregroundColor="#DCDCDC" shadowColor="#40101010" shadowOffset="3,3" />
++ <sub name="Subtitle_Italic" font="Subtitlefont;30" foregroundColor="#DCAAAA" shadowColor="#40101010" shadowOffset="3,3" />
++ <!-- omitting foregroundColor attribute will enable auto-assignment of color -->
++ </subtitles>
++ <!-- Main infobar -->
++ <screen name="InfoBar" flags="wfNoBorder" position="145,498" size="990,162" title="InfoBar" backgroundColor="transparent">
++ <!-- Background -->
++ <ePixmap position="0,0" zPosition="-1" size="990,162" pixmap="Vu_HD/info-bg.png" />
++ <!-- Signal Quality -->
++ <eLabel text="SNR" position="850,60" size="40,22" font="Regular;20" backgroundColor="#aeaeae" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="session.FrontendStatus" render="Label" position="890,60" size="80,22" font="Regular;20" backgroundColor="#aeaeae" foregroundColor="#1e1e1e" transparent="1">
++ <convert type="FrontendInfo">SNRdB</convert>
++ </widget>
++ <!-- Signal Strength -->
++ <eLabel text="AGC" position="850,90" size="40,22" font="Regular;20" backgroundColor="#aeaeae" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="session.FrontendStatus" render="Label" position="890,90" size="40,22" font="Regular;20" backgroundColor="#aeaeae" foregroundColor="#1e1e1e" transparent="1">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <!-- Bit error rate -->
++<!-- <eLabel text="BER" position="595,6" size="40,22" font="Regular;18" backgroundColor="#102e59" foregroundColor="#cccccc" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1" />
++ <widget source="session.FrontendStatus" render="Label" position="640,6" size="35,22" font="Regular;18" backgroundColor="#102e59" foregroundColor="#e7e7e7" shadowColor="#27384f" shadowOffset="-1,-1" transparent="1">
++ <convert type="FrontendInfo">BER</convert>
++ </widget> -->
++ <!-- Service name -->
++ <widget source="session.CurrentService" render="Label" position="60,15" size="400,30" font="Semiboldit;28" valign="center" halign="left" noWrap="1" foregroundColor="#07255d" backgroundColor="#d9dee2" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <!--
++ <widget source="session.FrontendInfo" render="Pixmap" position="350,32" size="8,9" pixmap="Vu_HD/nim_active.png" alphatest="on">
++ <convert type="FrontendInfo">NUMBER</convert>
++ <convert type="ValueRange">2,2</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.FrontendInfo" render="Pixmap" position="350,45" size="8,9" pixmap="Vu_HD/nim_active.png" alphatest="on">
++ <convert type="FrontendInfo">NUMBER</convert>
++ <convert type="ValueRange">3,3</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ -->
++ <eLabel text="Tuner" position="845,125" size="60,20" font="Regular;20" backgroundColor="#d9dee2" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="session.TunerInfo" render="FixedLabel" text="A" position="905,125" size="30,20" font="Semibold;20" foregroundColor="#5c5c5c" backgroundColor="#d9dee2" transparent="1">
++ <convert type="TunerInfo">TunerUseMask</convert>
++ <convert type="ValueBitTest">1</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.TunerInfo" render="FixedLabel" text="B" position="917,125" size="30,20" font="Semibold;20" foregroundColor="#5c5c5c" backgroundColor="#d9dee2" transparent="1">
++ <convert type="TunerInfo">TunerUseMask</convert>
++ <convert type="ValueBitTest">2</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.TunerInfo" render="FixedLabel" text="C" position="929,125" size="30,20" font="Semibold;20" foregroundColor="#1c1c1c" backgroundColor="#d9dee2" transparent="1">
++ <convert type="TunerInfo">TunerUseMask</convert>
++ <convert type="ValueBitTest">4</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.TunerInfo" render="FixedLabel" text="D" position="941,125" size="30,20" font="Semibold;20" foregroundColor="#1c1c1c" backgroundColor="#d9dee2" transparent="1">
++ <convert type="TunerInfo">TunerUseMask</convert>
++ <convert type="ValueBitTest">8</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="862,18" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="882,20" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" backgroundColor="#acacac" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <!-- tuners in use? -->
++ <widget source="session.FrontendInfo" render="FixedLabel" position="905,125" size="30,20" text="A" font="Semibold;20" foregroundColor="#1c1c1c" backgroundColor="#d9dee2" transparent="1">
++ <convert type="FrontendInfo">NUMBER</convert>
++ <convert type="ValueRange">0,0</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.FrontendInfo" render="FixedLabel" position="917,125" size="30,20" text="B" font="Semibold;20" foregroundColor="#1c1c1c" backgroundColor="#d9dee2" transparent="1">
++ <convert type="FrontendInfo">NUMBER</convert>
++ <convert type="ValueRange">1,1</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!--
++ <widget source="global.CurrentTime" render="Label" position="633,6" zPosition="1" size="26,18" font="Regular;16" valign="top">
++ <convert type="ClockToText">Format:%S</convert>
++ </widget> -->
++ <ePixmap position="720,20" zPosition="0" size="70,20" pixmap="Vu_HD/icons/icon_crypt_off.png" alphatest="blend" />
++ <ePixmap position="740,20" zPosition="0" size="70,20" pixmap="Vu_HD/icons/icon_txt_off.png" alphatest="blend" />
++ <ePixmap position="770,20" zPosition="0" size="70,20" pixmap="Vu_HD/icons/icon_format_off.png" alphatest="blend" />
++ <ePixmap position="804,20" zPosition="0" size="70,20" pixmap="Vu_HD/icons/icon_dolby_off.png" alphatest="blend" />
++ <!-- Blinking pixmap (recording in progress?) -->
++ <ePixmap pixmap="Vu_HD/icons/icon_rec_off.png" position="680,18" size="31,20" alphatest="blend" />
++ <widget source="session.RecordState" render="Pixmap" pixmap="Vu_HD/icons/icon_rec.png" position="680,18" zPosition="1" size="31,20" alphatest="blend" >
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ <!-- Crypt icon (encrypted service?) -->
++ <widget source="session.CurrentService" render="Pixmap" pixmap="Vu_HD/icons/icon_crypt.png" position="720,20" zPosition="1" size="11,15" alphatest="blend">
++ <convert type="ServiceInfo">IsCrypted</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Teletext icon (is teletext available?) -->
++ <widget source="session.CurrentService" render="Pixmap" pixmap="Vu_HD/icons/icon_txt.png" position="740,20" zPosition="1" size="18,15" alphatest="blend">
++ <convert type="ServiceInfo">HasTelext</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Videoformat icon (16:9?) -->
++ <widget source="session.CurrentService" render="Pixmap" pixmap="Vu_HD/icons/icon_format.png" position="770,20" zPosition="1" size="28,15" alphatest="blend">
++ <convert type="ServiceInfo">IsWidescreen</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Audio icon (is there multichannel audio?) -->
++ <widget source="session.CurrentService" render="Pixmap" pixmap="Vu_HD/icons/icon_dolby.png" position="804,20" zPosition="1" size="43,15" alphatest="blend">
++ <convert type="ServiceInfo">IsMultichannel</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Progressbar (current event duration)-->
++ <ePixmap pixmap="Vu_HD/Statusbar_white.png" position="60,65" size="100,10" transparent="1" alphatest="on" />
++ <widget source="session.Event_Now" render="Progress" pixmap="Vu_HD/progress_medium.png" position="60,65" zPosition="1" size="100,10" backgroundColor="#ffffff" transparent="1">
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <!-- Event (now) -->
++<!--
++ <ePixmap pixmap="Vu_HD/nim_active.png" position="182,78" size="15,10" alphatest="on" />
++-->
++ <widget source="session.Event_Now" render="Label" position="190,60" size="70,24" font="Semibold;22" backgroundColor="#aeaeae" foregroundColor="#1c1c1c" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="260,60" size="420,24" font="Semibold;22" noWrap="1" backgroundColor="#aeaeae" foregroundColor="#1c1c1c" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="690,60" size="100,24" font="Semibold;22" backgroundColor="#aeaeae" foregroundColor="#1c1c1c" halign="right" transparent="1">
++ <convert type="EventTime">Remaining</convert>
++ <convert type="RemainingToText">InMinutes</convert>
++ </widget>
++ <!-- Event (next) -->
++ <widget source="session.Event_Next" render="Label" position="190,87" size="70,24" font="Regular;22" backgroundColor="#aeaeae" foregroundColor="#1c1c1c" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="260,87" size="420,24" font="Regular;22" noWrap="1" backgroundColor="#aeaeae" foregroundColor="#1c1c1c" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="690,87" size="100,24" font="Regular;22" backgroundColor="#aeaeae" foregroundColor="#1c1c1c" halign="right" transparent="1">
++ <convert type="EventTime">Duration</convert>
++ <convert type="ClockToText">InMinutes</convert>
++ </widget>
++ <!-- Red button (is recording possible?) -->
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="60,122" size="25,25" alphatest="blend" />
++ <widget source="RecordingPossible" render="Pixmap" pixmap="Vu_HD/buttons/red.png" position="60,122" zPosition="1" size="25,25" alphatest="blend">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="ShowRecordOnRed" render="FixedLabel" text="Record" position="100,125" zPosition="1" size="130,22" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#d9dee2" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="RecordingPossible" render="FixedLabel" text="Record" position="100,125" zPosition="1" size="130,22" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#d2dee2" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Green button (is subservices available?) -->
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="250,122" size="25,25" alphatest="blend" />
++ <widget source="session.CurrentService" render="Pixmap" pixmap="Vu_HD/buttons/green.png" position="250,122" zPosition="1" size="25,25" alphatest="blend">
++ <convert type="ServiceInfo">SubservicesAvailable</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <eLabel text="Subservices" position="290,125" size="130,22" font="Regular;20" backgroundColor="#d2dee2" transparent="1" />
++ <widget source="session.CurrentService" render="FixedLabel" text="Subservices" position="290,125" zPosition="1" size="130,22" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#d2dee2" transparent="1">
++ <convert type="ServiceInfo">SubservicesAvailable</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Yellow button (is timeshift possible?) -->
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="440,122" size="25,25" alphatest="blend" />
++ <widget source="TimeshiftPossible" render="Pixmap" pixmap="Vu_HD/buttons/yellow.png" position="440,122" zPosition="1" size="25,25" alphatest="blend">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="ShowTimeshiftOnYellow" render="FixedLabel" text="Timeshift" position="480,125" zPosition="1" size="130,22" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#d2dee2" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="TimeshiftPossible" render="FixedLabel" text="Timeshift" position="480,125" zPosition="1" size="130,22" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#d2dee2" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++
++ <!-- Yellow button (used for audio on boxes with new rc?) -->
++ <widget source="ShowAudioOnYellow" render="Pixmap" pixmap="Vu_HD/buttons/yellow.png" position="440,122" zPosition="1" size="25,25" alphatest="blend">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="ShowAudioOnYellow" render="FixedLabel" text="Audio" position="480,125" zPosition="1" size="130,22" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#d2dee2" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <!-- Blue button (is extensions available?) -->
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,122" size="25,25" alphatest="blend" />
++ <widget source="ExtensionsAvailable" render="Pixmap" pixmap="Vu_HD/buttons/blue.png" position="630,122" zPosition="1" size="25,25" alphatest="blend">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <eLabel text="Extensions" position="670,125" size="130,22" font="Regular;20" backgroundColor="#d2dee2" transparent="1" />
++ <widget source="ExtensionsAvailable" render="FixedLabel" text="Extensions" position="670,125" zPosition="1" size="130,22" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#d2dee2" transparent="1">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ </screen>
++ <!-- Main menu -->
++ <!-- Menu screens -->
++ <screen name="menu_mainmenu" position="0,0" size="580,720" title="Main menu" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/bg.png" zPosition="-1" position="60,0" size="520,720" alphatest="blend" transparent="1" />
++<!--
++ <eLabel text=" " position="60,0" size="520,170" zPosition="-1" backgroundColor="#27cbd0d2" />
++ <eLabel text=" " position="60,170" size="520,500" zPosition="-1" backgroundColor="#27b9bdc1" />
++ <eLabel text=" " position="60,670" size="520,50" zPosition="-1" backgroundColor="#27cbd0d2" />
++-->
++ <eLabel text="Main menu" position="110,120" size="350,38" font="Regular;38" foregroundColor="#5c5c5c" backgroundColor="#27d8dee2" transparent="1" />
++ <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/buttons/FocusBar_H45.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#271a53bb" backgroundColor="#27b9bdc1" transparent="1" position="84, 175" size="472,495" scrollbarMode="showOnDemand">
++<!-- <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/FocusBar_menu01.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#acacac" position="84,190" size="370,480" transparent="1" backgroundColor="#ececec" scrollbarMode="showNever"> -->
++ <convert type="TemplatedMultiContent">
++ {"template": [ MultiContentEntryText(pos = (30, 8), size = (410, 28), flags = RT_HALIGN_LEFT, text = 0 ) ],
++ "fonts": [gFont("Regular", 28)],
++ "itemHeight": 45
++ }
++ </convert>
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_Plugin_All_title.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">dvd_player</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_Plugin_All_title.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">filecommand</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_menu_Subtitles.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">subtitle_selection</convert>
++ <convert type="ConditionalShowHide"/>
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_menu_Setup.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">setup_selection</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_menu_Standby.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">standby_restart_list</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_menu_Plugin.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">plugin_selection</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_menu_Info.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">info_screen</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_Plugin_All_title.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">scart_switch</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_menu_Timer.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">timer_edit</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="menu" render="Pixmap" pixmap="Vu_HD/menu/ico_menu_Media.png" position="475,70" size="88,88" alphatest="blend">
++ <convert type="MenuEntryCompare">media_player</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ </screen>
++ <!-- Movieplayer infobar -->
++ <screen name="MoviePlayer" flags="wfNoBorder" position="200,516" size="880,162" title="InfoBar" backgroundColor="transparent">
++ <!-- Background -->
++ <ePixmap position="0,0" zPosition="-1" size="880,144" pixmap="Vu_HD/Bg_Media_info.png" />
++ <ePixmap position="35,18" size="37,28" pixmap="Vu_HD/menu/ico_title_media-info.png" alphatest="blend" />
++ <!-- colorbuttons -->
++ <ePixmap position="50,75" pixmap="Vu_HD/icons/ico_player.png" size="152,18" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="770,15" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="790,17" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <!-- Servicename -->
++ <widget source="session.CurrentService" render="Label" position="85,18" size="475,30" font="Semiboldit;30" foregroundColor="#240256" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <!-- movie length -->
++ <widget source="session.CurrentService" render="Label" position="700,55" size="95,24" font="Regular;18" halign="right" backgroundColor="#27aeaeae" transparent="1">
++ <convert type="ServicePosition">Length</convert>
++ </widget>
++ <!-- Elapsed time -->
++ <widget source="session.CurrentService" render="Label" position="240,95" size="100,24" font="Semiboldit;18" halign="left" valign="center" foregroundColor="#3d0e82" backgroundColor="#27aeaeae" transparent="1">
++ <convert type="ServicePosition">Position</convert>
++ </widget>
++ <!-- Progressbar (movie position)-->
++ <ePixmap position="240,75" size="563,18" pixmap="Vu_HD/icons/Mediaplayerbar_gray.png" alphatest="blend" />
++ <ePixmap position="235,75" size="5,18" pixmap="Vu_HD/icons/Mediaplayerbar_purple.png" alphatest="blend" />
++ <widget source="session.CurrentService" render="PositionGauge" position="239,68" size="563,25" zPosition="2" pointer="Vu_HD/icons/Mediaplayerbar_purple.png:563,0" transparent="1">
++ <convert type="ServicePosition">Gauge</convert>
++ </widget>
++ <!-- Remaining time -->
++ <widget source="session.CurrentService" render="Label" position="700,95" size="95,20" font="Regular;18" halign="right" valign="center" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" transparent="1">
++ <convert type="ServicePosition">Remaining</convert>
++ </widget>
++ </screen>
++
++ <!-- Vu_HD skin (Vu_HD.xml) -->
++ <!-- About screen -->
++ <screen name="About" position="209,48" size="865,623" title="Serviceinfo" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Info.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="About" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget source="EnigmaVersion" render="Label" position="110,140" size="600,36" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ <widget source="ImageVersion" render="Label" position="110,176" size="600,36" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ <widget source="FPVersion" render="Label" position="110,212" size="600,36" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ <widget source="TunerHeader" render="Label" position="110,248" size="600,36" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ <widget source="Tuner0" render="Label" position="110,284" size="600,36" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ <widget source="Tuner1" render="Label" position="110,320" size="600,36" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ <widget source="Tuner2" render="Label" position="110,356" size="600,36" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ <widget source="Tuner3" render="Label" position="110,392" size="600,36" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ <widget source="HDDHeader" render="Label" position="110,428" size="600,36" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ <widget source="hddA" render="Label" position="110,467" size="600,72" foregroundColor="#3c3c3c" backgroundColor="#27b5b9bd" font="Regular;22" transparent="1" />
++ </screen>
++ <!-- Adapter setup -->
++ <screen name="AdapterSetup" position="209,48" size="865,623" title="Network Setup" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Network Setup" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_blue" render="Label" position="668,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="config" position="160,140" transparent="1" backgroundColor="#27d9dee2" size="500,125" scrollbarMode="showOnDemand" />
++ <eLabel text=" " position="150,270" zPosition="1" size="550,2" backgroundColor="#8c8c8c"/>
++ <widget source="DNS1text" render="Label" position="160,275" size="190,21" zPosition="1" font="Regular;19" transparent="1" backgroundColor="#27d9dee2"/>
++ <widget source="DNS2text" render="Label" position="160,305" size="190,21" zPosition="1" font="Regular;19" transparent="1" backgroundColor="#27d9dee2"/>
++ <widget source="DNS1" render="Label" position="530,275" size="120,21" zPosition="1" font="Regular;17" transparent="1" backgroundColor="#27d9dee2"/>
++ <widget source="DNS2" render="Label" position="530,305" size="120,21" zPosition="1" font="Regular;17" transparent="1" backgroundColor="#27d9dee2"/>
++ <eLabel text=" " position="150,330" zPosition="1" size="550,2" backgroundColor="#8c8c8c"/>
++
++ <widget source="introduction" render="Label" position="160,335" size="440,20" font="Regular;19" halign="center" transparent="1" backgroundColor="#27d9dee2"/>
++ <widget source="IPtext" render="Label" position="250,370" size="190,21" zPosition="1" font="Regular;19" transparent="1" backgroundColor="#27d9dee2"/>
++ <widget source="Netmasktext" render="Label" position="250,395" size="190,21" zPosition="1" font="Regular;19" transparent="1" backgroundColor="#27d9dee2"/>
++ <widget source="Gatewaytext" render="Label" position="250,420" size="190,21" zPosition="1" font="Regular;19" transparent="1" backgroundColor="#27d9dee2"/>
++ <widget source="IP" render="Label" position="450,370" size="240,21" zPosition="1" font="Regular;19" transparent="1" backgroundColor="#27d9dee2"/>
++ <widget source="Mask" render="Label" position="450,395" size="240,21" zPosition="1" font="Regular;19" transparent="1" backgroundColor="#27d9dee2"/>
++ <widget source="Gateway" render="Label" position="450,420" size="240,21" zPosition="1" font="Regular;19" transparent="1" backgroundColor="#27d9dee2"/>
++
++ <widget source="Adaptertext" render="Label" position="200,460" size="100,21" zPosition="10" foregroundColor="#3c3c3c" backgroundColor="#27d9dee2" font="Regular;19" transparent="1" />
++ <widget source="Adapter" render="Label" position="290,460" size="300,21" zPosition="10" foregroundColor="#3c3c3c" backgroundColor="#27d9dee2" font="Regular;19" transparent="1" />
++ <widget source="introduction2" render="Label" position="260,500" size="300,20" zPosition="10" foregroundColor="#3c3c3c" backgroundColor="#27d9dee2" font="Regular;21" halign="center" transparent="1" />
++ <widget name="VKeyIcon" pixmap="Vu_HD/buttons/key_text.png" position="160,510" zPosition="10" size="35,25" transparent="1" alphatest="on" />
++ <widget name="HelpWindow" pixmap="Vu_HD/vkey_icon.png" position="310,445" zPosition="1" size="1,1" transparent="1" alphatest="on" />
++ </screen>
++ <screen name="AdapterSetupConfiguration" position="209,48" size="865,623" title="Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Network Configuration..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <ePixmap pixmap="Vu_HD/border_menu.png" position="120,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
++ <widget name="menulist" position="130,150" size="322,338" transparent="1" backgroundColor="#27d9dee2" zPosition="10" scrollbarMode="showOnDemand" />
++ <widget source="description" render="Label" position="500,140" size="280,360" font="Regular;19" halign="center" valign="center" backgroundColor="#c5c9cc" transparent="1"/>
++ <widget source="IFtext" render="Label" position="170,520" size="100,22" zPosition="10" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" font="Regular;20" transparent="1" />
++ <widget source="IF" render="Label" position="280,520" size="300,22" zPosition="10" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" font="Regular;20" transparent="1" />
++ <widget source="Statustext" render="Label" position="500,100" size="150,25" zPosition="10" font="Regular;20" halign="center" valign="right" backgroundColor="#c5c9cc" foregroundColor="#1c1c1c" transparent="1"/>
++ <widget name="statuspic" pixmaps="Vu_HD/buttons/green.png,Vu_HD/buttons/button_off.png" position="630,98" zPosition="10" size="25,25" transparent="1" alphatest="blend"/>
++ </screen>
++ <!-- Audio selection -->
++ <screen name="AudioSelection" position="center,center" size="560,330" title="Audio">
++ <widget name="config" position="50,10" size="500,110" scrollbarMode="showOnDemand" />
++
++ <widget source="key_red" render="Pixmap" pixmap="Vu_HD/buttons/red.png" position="10,10" size="25,25" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="key_green" render="Pixmap" pixmap="Vu_HD/buttons/green.png" position="10,35" size="25,25" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="key_yellow" render="Pixmap" pixmap="Vu_HD/buttons/yellow.png" position="10,60" size="25,25" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="key_blue" render="Pixmap" pixmap="Vu_HD/buttons/blue.png" position="10,85" size="25,25" alphatest="on">
++ <convert type="ConditionalShowHide" />
++ </widget>
++
++ <widget source="streams" render="Listbox" scrollbarMode="showOnDemand" position="10,120" size="540,200" zPosition="3" transparent="1" >
++ <convert type="TemplatedMultiContent">
++ {"templates":
++ {"default": (25, [
++ MultiContentEntryText(pos = (0, 0), size = (35, 25), font = 0, flags = RT_HALIGN_LEFT, text = 1), # key,
++ MultiContentEntryText(pos = (40, 0), size = (60, 25), font = 0, flags = RT_HALIGN_LEFT, text = 2), # number,
++ MultiContentEntryText(pos = (110, 0), size = (120, 25), font = 0, flags = RT_HALIGN_LEFT, text = 3), # description,
++ MultiContentEntryText(pos = (240, 0), size = (200, 25), font = 0, flags = RT_HALIGN_LEFT, text = 4), # language,
++ MultiContentEntryText(pos = (450, 4), size = (90, 25), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # selection,
++ ], True, "showNever"),
++ "notselected": (25, [
++ MultiContentEntryText(pos = (0, 0), size = (35, 25), font = 0, flags = RT_HALIGN_LEFT, text = 1), # key,
++ MultiContentEntryText(pos = (40, 0), size = (60, 25), font = 0, flags = RT_HALIGN_LEFT, text = 2), # number,
++ MultiContentEntryText(pos = (110, 0), size = (120, 25), font = 0, flags = RT_HALIGN_LEFT, text = 3), # description,
++ MultiContentEntryText(pos = (240, 0), size = (200, 25), font = 0, flags = RT_HALIGN_LEFT, text = 4), # language,
++ MultiContentEntryText(pos = (450, 4), size = (90, 25), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # selection,
++ ], False, "showNever")
++ },
++ "fonts": [gFont("Regular", 20), gFont("Regular", 16)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ </screen>
++ <!-- Bouquet selector -->
++ <screen name="BouquetSelector" position="center,center" size="300,240" title="Choose bouquet">
++ <widget name="menu" position="10,10" transparent="1" size="290,225" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Channel context menu -->
++ <screen name="ChannelContextMenu" position="0,0" size="1280,720" zPosition="2" title="Channellist menu" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_Subtitle.png" position="280,90" size="520,538" zPosition="-1" alphatest="on" />
++ <eLabel text="Channellist menu" position="349,135" size="400,32" font="Semiboldit;32" foregroundColor="#4c4c4c" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget name="menu" position="295,173" itemHeight="42" selectionPixmap="Vu_HD/buttons/FocusBar_H42.png" transparent="1" zPosition="1" size="490,420" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Channel selection - TV -->
++ <screen name="ChannelSelection" position="145, 55" size="990,610" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_List.png" position="0,0" size="990,610" zPosition="-1" alphatest="on" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/ico_Chlist_title.png" position="44,37" size="38,34" alphatest="blend" transparent="1" />
++ <widget source="Title" render="Label" position="95,40" size="700,32" zPosition="3" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27d8dee2" transparent="1" />
++<!-- <widget name="etitle" position="95,43" size="450,32" font="Semiboldit;32" halign="left" foregroundColor="#5d5d5d" backgroundColor="#27d8dee2" transparent="1" />-->
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="44,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="271,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="498,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="725,82" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="89,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_green" position="316,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_yellow" position="543,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_blue" position="770,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="list" position="30,127" size="615,462" zPosition="3" scrollbarMode="showOnDemand" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" selectionPixmap="Vu_HD/buttons/FocusBar_H42.png" foregroundColorServiceNotAvail="#2c2c2c" serviceItemHeight="42" serviceNumberFont="Regular;24" serviceNameFont="Regular;24" serviceInfoFont="Semibold;21" transparent="1" />
++ <eLabel text=" " backgroundColor="#9c9c9c" position="655,127" size="2,450" />
++ <widget source="ServiceEvent" render="Label" position="670,130" zPosition="1" size="300,24" foregroundColor="#07255d" backgroundColor="#27d8dee2" font="Semibold;24" noWrap="1" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="880,50" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="900,52" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d8dee2" halign="right" transparent="1">
++ <convert type="ClockToText"></convert>
++ </widget>
++ <widget source="ServiceEvent" render="Label" position="670,160" zPosition="1" size="300,24" font="Regular;24" foregroundColor="#07255d" backgroundColor="#27d8dee2" halign="left" noWrap="1" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="ServiceEvent" render="Label" position="670,190" zPosition="1" size="50,22" font="Regular;20" foregroundColor="#07255d" backgroundColor="#27d8dee2" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText"></convert>
++ </widget>
++ <widget source="ServiceEvent" render="Label" position="725,190" zPosition="1" size="70,22" font="Regular;20" foregroundColor="#07255d" backgroundColor="#27d8dee2" transparent="1">
++ <convert type="EventTime">EndTime</convert>
++ <convert type="ClockToText">Format:- %H:%M</convert>
++ </widget>
++ <widget source="ServiceEvent" render="Progress" position="835,195" zPosition="1" pixmap="Vu_HD/progress_medium.png" size="124,10" backgroundColor="#ffffff" >
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="ServiceEvent" render="Label" position="670,220" zPosition="1" size="300,360" font="Regular;20" foregroundColor="#273c3c3c" backgroundColor="#27d8dee2" transparent="1">
++ <convert type="EventName">ExtendedDescription</convert>
++ </widget>
++ </screen>
++ <!-- Channel selection - Radio -->
++ <screen name="ChannelSelectionRadio" position="145, 55" size="990,610" zPosition="-10" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_List.png" position="0,0" size="990,610" zPosition="-10" alphatest="on" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/ico_Radio_title.png" position="44,37" size="38,34" alphatest="blend" transparent="1" />
++ <widget source="Title" render="Label" position="95,40" size="700,32" zPosition="3" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27d8dee2" transparent="1" />
++<!-- <widget name="etitle" position="95,43" size="450,32" font="Semiboldit;32" halign="left" foregroundColor="#5d5d5d" backgroundColor="#27d8dee2" transparent="1" />-->
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="44,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="271,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="498,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="725,82" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="89,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_green" position="316,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_yellow" position="543,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_blue" position="770,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="list" position="30,127" size="615,462" zPosition="3" scrollbarMode="showOnDemand" foregroundColor="#271c1c1c" backgroundColor="#27ebebeb" selectionPixmap="Vu_HD/buttons/FocusBar_H42.png" foregroundColorServiceNotAvail="#6c6c6c" serviceItemHeight="42" serviceNumberFont="Semibold;24" serviceNameFont="Semibold;24" serviceInfoFont="Semibold;21" transparent="1" />
++ <eLabel text=" " backgroundColor="#9c9c9c" position="655,127" size="2,450" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="880,50" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="900,52" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d8dee2" halign="right" transparent="1">
++ <convert type="ClockToText"></convert>
++ </widget>
++ </screen>
++ <!-- Choice box -->
++ <screen name="ChoiceBox" position="130,100" size="550,400" title="Input">
++ <widget name="text" position="10,10" size="550,25" font="Regular;22" transparent="1" />
++ <widget name="list" position="0,30" size="550,335" scrollbarMode="showOnDemand" transparent="1" />
++ <applet type="onLayoutFinish">
++# this should be factored out into some helper code, but currently demonstrates applets.
++from enigma import eSize, ePoint
++
++orgwidth = self.instance.size().width()
++orgpos = self.instance.position()
++textsize = self["text"].getSize()
++
++# y size still must be fixed in font stuff...
++textsize = (textsize[0] + 80, textsize[1] + 80)
++count = len(self.list)
++if count > 10:
++ count = 10
++offset = 25 * count
++wsizex = textsize[0] + 80
++wsizey = textsize[1] + offset + 10
++
++if (640 > wsizex):
++ wsizex = 640
++wsize = (wsizex, wsizey)
++
++# resize
++self.instance.resize(eSize(*wsize))
++
++# resize label
++self["text"].instance.resize(eSize(*textsize))
++
++# move list
++listsize = (wsizex - 20, 25 * count)
++self["list"].instance.move(ePoint(10, textsize[1]))
++self["list"].instance.resize(eSize(*listsize))
++
++# center window
++newwidth = wsize[0]
++self.instance.move(ePoint((1280-wsizex)/2, (720-wsizey)/(count > 7 and 2 or 3)))
++
++ </applet>
++ </screen>
++
++ <!-- Common interface -->
++ <screen name="MMIDialog" position="center,center" size="450,270">
++ <widget name="title" position="10,10" size="430,25" font="Regular;23" />
++ <widget name="subtitle" position="10,35" size="430,25" font="Regular;23" />
++ <widget name="entries" position="10,70" size="430,150" scrollbarMode="showOnDemand" />
++ <widget name="bottom" position="10,230" size="430,25" font="Regular;23" />
++ </screen>
++ <!-- Common interface - selection -->
++ <screen name="CiSelection" position="center,center" size="440,160" title="Common Interface">
++ <widget name="text" position="10,10" size="430,25" font="Regular;23" />
++ <widget name="entries" position="10,55" size="420,100" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Console -->
++ <screen name="Console" position="center,center" size="900,500" title="Command execution...">
++ <widget name="text" position="10,10" size="880,480" foregroundColor="#3c3c3c" font="Console;14" />
++ </screen>
++ <!-- Clock display -->
++ <screen name="clockDisplay" position="300,120" size="300,300">
++ <widget name="okbutton" position="10,10" size="280,40" />
++ <widget name="title" position="10,120" size="280,50" />
++ <widget name="theClock" position="10,60" size="280,50" />
++ </screen>
++ <!-- Config OSD -->
++ <screen name="configOSD" position="130,120" size="460,350" title="OSD Settings">
++ <widget name="okbutton" position="20,270" size="205,40" />
++ <widget name="txt_alpha" position="20,20" size="110,20" />
++ <widget name="sld_alpha" position="150,20" size="290,20" />
++ <widget name="txt_brightness" position="20,60" size="120,20" />
++ <widget name="sld_brightness" position="150,20" size="290,20" />
++ <widget name="txt_gamma" position="20,100" size="120,20" />
++ <widget name="sld_gamma" position="150,100" size="290,20" />
++ </screen>
++ <!-- Config test -->
++ <screen name="configTest" position="center,center" size="300,300" title="config menu">
++ <widget name="config" position="10,30" size="420,220" />
++ </screen>
++ <!-- Default wizard -->
++ <screen name="DefaultWizard" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="400,100" size="550,270" font="Regular;23" />
++ <widget source="list" render="Listbox" transparent="1" position="150,300" size="600,300" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="150,250" size="25,25" alphatest="blend" />
++ <widget name="languagetext" position="200,253" size="120,30" font="Regular;18" />
++ <widget name="config" position="300,300" zPosition="1" size="400,300" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="rc" pixmap="Vu_HD/rc.png" position="950,150" zPosition="10" size="154,500" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <screen name="DefaultSatLists" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="300,100" size="650,270" font="Regular;23" />
++ <widget source="list" render="Listbox" transparent="1" position="150,300" size="600,300" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="150,250" size="25,25" alphatest="blend" />
++ <widget name="languagetext" position="200,253" size="120,30" font="Regular;18" />
++ <widget name="config" position="150,300" zPosition="1" size="600,300" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="rc" pixmap="Vu_HD/rc.png" position="950,150" zPosition="10" size="154,500" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <screen name="DreamPackageWizard" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="300,100" size="650,270" font="Regular;23" />
++ <widget source="list" render="Listbox" transparent="1" position="150,300" size="600,300" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="150,250" size="25,25" alphatest="blend" />
++ <widget name="languagetext" position="200,253" size="120,30" font="Regular;18" />
++ <widget name="config" position="150,300" zPosition="1" size="600,300" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="rc" pixmap="Vu_HD/rc.png" position="950,150" zPosition="10" size="154,500" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <!-- Dish -->
++ <screen name="Dish" flags="wfNoBorder" position="300,110" size="130,160" title="Dish" zPosition="-1" backgroundColor="transparent">
++ <widget name="Dishpixmap" pixmap="Vu_HD/icons/dish.png" position="0,0" size="130,160" alphatest="off" />
++ </screen>
++ <!-- unhandled key pressed -->
++ <screen name="UnhandledKey" flags="wfNoBorder" position="1110,50" size="90,80" title="UnhandledKey" zPosition="100" backgroundColor="transparent">
++ <widget name="UnhandledKeyPixmap" pixmap="Vu_HD/unhandled-key.png" position="0,0" size="90,80" alphatest="off" />
++ </screen>
++ <!-- EPG Selection - Single -->
++ <screen name="EPGSelection" position="209,48" size="865,624" title="EPG Selection" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" position="0,0" size="865,624" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_EPG_title.png" position="34,45" size="45,36" alphatest="blend" transparent="1" />
++ <eLabel text="EPG Selection" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" backgroundColor="#27b5b9bd" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_green" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_yellow" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_blue" position="658,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="list" position="40,130" size="800,468" itemHeight="36" selectionPixmap="Vu_HD/buttons/FocusBar_H36.png" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- EPG Selection - Multi -->
++ <screen name="EPGSelectionMulti" position="209,48" size="865,624" title="EPG Selection" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" position="0,0" size="865,624" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_EPG_title.png" position="34,45" size="45,36" alphatest="blend" transparent="1" />
++ <eLabel text="EPG Selection Multi" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27b5b9bd" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_green" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_yellow" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_blue" position="658,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="now_button_sel" pixmap="Vu_HD/epg_now.png" position="50,132" zPosition="1" size="463,34" alphatest="on" />
++ <widget name="next_button_sel" pixmap="Vu_HD/epg_next.png" position="50,132" zPosition="1" size="463,34" alphatest="on" />
++ <widget name="more_button_sel" pixmap="Vu_HD/epg_more.png" position="50,132" zPosition="1" size="463,34" alphatest="on" />
++ <widget name="now_text" position="50,132" zPosition="2" size="140,34" text="NOW" font="Regular;20" halign="center" valign="center" foregroundColor="#efefef" backgroundColor="#3c3c3c" transparent="1" />
++ <widget name="next_text" position="211,132" zPosition="2" size="140,34" text="NEXT" font="Regular;20" halign="center" valign="center" foregroundColor="#efefef" backgroundColor="#3c3c3c" transparent="1" />
++ <widget name="more_text" position="370,132" zPosition="2" size="140,34" text="MORE" font="Regular;20" halign="center" valign="center" foregroundColor="#efefef" backgroundColor="#3c3c3c" transparent="1" />
++ <widget name="date" position="600,130" size="110,35" font="Regular;18" foregroundColor="#3d3d3d" backgroundColor="#27d9dee2" valign="center" halign="right" transparent="1"/>
++ <widget name="list" position="46,166" size="779,396" itemHeight="36" selectionPixmap="Vu_HD/buttons/FocusBar_H36.png" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Eventview -->
++ <screen name="EventView" position="209,48" size="865,623" title="Eventview" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_EPG_title.png" position="34,45" size="45,36" alphatest="blend" transparent="1" />
++ <eLabel text="Eventview" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" backgroundColor="#27b5b9bd" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_green" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_yellow" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_blue" position="658,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="epg_description" position="40,190" size="800,418" font="Regular;22" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="datetime" position="600,150" size="130,25" font="Regular;22" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="duration" position="740,150" size="100,25" font="Regular;22" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="channel" position="40,150" size="300,25" font="Semiboldit;24" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="left" transparent="1"/>
++ </screen>
++ <!-- Graphical Multi EPG -->
++ <screen name="GraphMultiEPG" position="209,48" size="865,624" title="Electronic Program Guide" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" position="0,0" size="865,624" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_EPG_title.png" position="34,45" size="45,36" alphatest="blend" transparent="1" />
++ <eLabel text="Electronic Program Guide" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_green" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++
++ <eLabel position="30,160" zPosition="-1" size="152,324" backgroundColor="#278c8c8c" />
++ <widget name="timeline_text" position="0,135" size="830,25" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="list" position="30,160" size="800,324" transparent="1" backgroundColor="#27d9dee2" backgroundColorSelected="#279c9c9c" EntryBorderColor="#27727f98" EntryBackgroundColor="#27727f98" EntryBackgroundColorSelected="#27366ee0" scrollbarMode="showOnDemand" />
++ <eLabel position="30,160" size="773,1" backgroundColor="#6c6c6c" />
++ <eLabel position="30,214" size="773,1" backgroundColor="#6c6c6c" />
++ <eLabel position="30,268" size="773,1" backgroundColor="#6c6c6c" />
++ <eLabel position="30,322" size="773,1" backgroundColor="#6c6c6c" />
++ <eLabel position="30,376" size="773,1" backgroundColor="#6c6c6c" />
++ <eLabel position="30,430" size="773,1" backgroundColor="#6c6c6c" />
++ <eLabel position="30,484" size="773,1" backgroundColor="#6c6c6c" />
++ <widget name="timeline0" position="85,160" zPosition="1" size="1,324" pixmap="Vu_HD/timeline.png" />
++ <widget name="timeline1" position="85,160" zPosition="1" size="1,324" pixmap="Vu_HD/timeline.png" />
++ <widget name="timeline2" position="85,160" zPosition="1" size="1,324" pixmap="Vu_HD/timeline.png" />
++ <widget name="timeline3" position="85,160" zPosition="1" size="1,324" pixmap="Vu_HD/timeline.png" />
++ <widget name="timeline4" position="85,160" zPosition="1" size="1,324" pixmap="Vu_HD/timeline.png" />
++ <widget name="timeline5" position="85,160" zPosition="1" size="1,324" pixmap="Vu_HD/timeline.png" />
++ <widget name="timeline_now" position="80,160" zPosition="2" size="19,324" pixmap="Vu_HD/timeline-now.png" alphatest="on" />
++<!--
++ <ePixmap pixmap="Vu_HD/border_multiepg.png" position="80,167" zPosition="1" size="560,393" transparent="1" alphatest="on" />
++-->
++ <widget source="Event" render="Label" position="40,495" zPosition="1" size="500,24" font="Semibold;24" backgroundColor="#27d9dee2" foregroundColor="#07255d" noWrap="1" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <widget source="Event" render="Label" position="700,490" zPosition="1" size="50,18" font="Regular;18" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText"></convert>
++ </widget>
++ <widget source="Event" render="Label" position="750,490" zPosition="1" size="70,18" font="Regular;18" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="EventTime">EndTime</convert>
++ <convert type="ClockToText">Format:- %H:%M</convert>
++ </widget>
++ <widget source="Event" render="Progress" position="680,510" zPosition="1" pixmap="Vu_HD/progress_medium.png" size="120,11" borderWidth="2" backgroundColor="#ffffff" borderColor="#cccccc" >
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="Event" render="Label" position="540,490" zPosition="1" size="150,20" halign="right" font="Regular;18" noWrap="1" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Format:(%A)</convert>
++ </widget>
++ <widget source="Event" render="Label" position="40,525" zPosition="1" size="780,72" font="Regular;20" foregroundColor="#3c3c3c" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="EventName">ExtendedDescription</convert>
++ </widget>
++ </screen>
++ <!-- Harddisk selection -->
++ <screen name="HarddiskSelection" position="100,80" size="520,538" title="Select HDD" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_Subtitle.png" position="0,0" size="520,538" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="16,36" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Select HDD" position="69,45" size="400,32" font="Semiboldit;32" foregroundColor="#4c4c4c" backgroundColor="#b5b9bd" transparent="1" />
++ <widget name="hddlist" position="10,83" itemHeight="42" size="500,275" transparent="1" />
++ </screen>
++ <!-- Harddisk setup -->
++ <screen name="HarddiskSetup" position="center,center" size="420,160" title="Harddisk">
++ <widget name="model" position="20,10" size="380,25" font="Regular;23" />
++ <widget name="capacity" position="20,40" size="380,25" font="Regular;23" />
++ <widget name="bus" position="20,70" size="380,25" font="Regular;23" />
++ <widget name="initialize" pixmap="Vu_HD/buttons/red.png" position="140,110" size="25,25" alphatest="blend" />
++ <widget name="initializetext" position="165,112" size="120,20" zPosition="1" font="Regular;20" halign="center" valign="center" transparent="1" />
++ </screen>
++ <!-- Harddisk wait -->
++ <screen name="HarddiskWait" position="center,center" size="540,60">
++ <widget name="wait" position="20,10" size="500,25" font="Regular;23" />
++ </screen>
++ <!-- Help menu -->
++ <screen name="HelpMenu" position="0,0" size="1280,720" title="Menu" flags="wfNoBorder">
++ <eLabel text="help..." position="500,60" size="280,60" font="Regular;40" />
++ <widget name="list" position="100,150" size="700,456" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="rc" pixmaps="Vu_HD/rc.png,Vu_HD/rcold.png" position="950,150" zPosition="10" size="154,500" alphatest="blend" />
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowdown2" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="long_key" position="760,660" size="250,50" font="Regular;25" halign="right" foregroundColor="yellow" />
++ </screen>
++ <!-- Image Wizard -->
++ <screen name="ImageWizard" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="400,100" size="550,270" font="Regular;23" />
++ <widget source="list" render="Listbox" transparent="1" position="150,300" size="600,300" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="150,250" size="25,25" alphatest="blend" />
++ <widget name="languagetext" position="200,253" size="120,30" font="Regular;18" />
++ <widget name="config" position="300,300" zPosition="1" size="400,300" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="rc" pixmap="Vu_HD/rc.png" position="950,150" zPosition="10" size="154,500" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <!-- Inputbox -->
++ <screen name="InputBox" position="center,center" size="550,90" title="Input">
++ <widget name="text" position="10,20" size="550,25" font="Regular;23" />
++ <widget name="input" position="10,55" size="550,25" font="Regular;20" />
++ </screen>
++ <!-- IPKG -->
++ <screen name="Ipkg" position="center,center" size="550,200" title="Installing Software...">
++ <widget name="activityslider" position="0,0" size="550,5" pixmap="Vu_HD/progress_small.png" />
++ <widget name="package" position="10,30" size="550,20" font="Regular;18" />
++ <widget name="status" position="10,60" size="550,45" font="Regular;18" />
++ <widget name="slider" position="10,100" size="530,15" pixmap="Vu_HD/progress_big.png" borderWidth="2" borderColor="#cccccc" />
++ </screen>
++ <!-- Language selection -->
++ <screen name="LanguageSelection" position="center,80" size="520,538" title="Language selection" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_Subtitle.png" position="0,0" size="520,538" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="16,36" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Language selection" position="69,45" size="400,32" font="Semiboldit;32" foregroundColor="#4c4c4c" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget source="languages" render="Listbox" selectionPixmap="Vu_HD/buttons/FocusBar_H42.png" position="22,84" size="475,420" scrollbarMode="showOnDemand" transparent="1">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (80, 11), size = (360, 20), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the language name,
++ MultiContentEntryPixmap(pos = (10, 6), size = (45, 30), png = 2), # index 2 is the pixmap
++ ],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 42
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="LanguageWizard" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="300,100" size="650,270" font="Regular;23" />
++ <widget source="languages" render="Listbox" position="150,400" size="440,210" scrollbarMode="showOnDemand" transparent="1" >
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (80, 11), size = (200, 20), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the language name,
++ MultiContentEntryPixmap(pos = (10, 6), size = (45, 30), png = 2), # index 2 is the pixmap
++ ],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 42
++ }
++ </convert>
++ </widget>
++ <widget name="rc" pixmap="Vu_HD/rc.png" position="950,150" zPosition="10" size="154,500" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <!-- Location Box -->
++ <screen name="LocationBox" position="100,120" size="540,460" >
++ <widget name="text" position="0,2" size="540,22" font="Regular;22" />
++ <widget name="target" position="0,23" size="540,22" valign="center" font="Regular;22" />
++ <widget name="filelist" position="0,55" zPosition="1" size="540,210" scrollbarMode="showOnDemand" selectionDisabled="1" />
++ <widget name="textbook" position="0,272" size="540,22" font="Regular;22" />
++ <widget name="booklist" position="5,302" zPosition="2" size="535,100" scrollbarMode="showOnDemand" />
++ <widget name="red" position="0,415" zPosition="1" size="136,40" pixmap="Vu_HD/buttons/red.png" transparent="1" alphatest="blend" />
++ <widget name="key_red" position="20,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="green" position="135,415" zPosition="1" size="136,40" pixmap="Vu_HD/buttons/green.png" transparent="1" alphatest="blend" />
++ <widget name="key_green" position="155,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="yellow" position="270,415" zPosition="1" size="136,40" pixmap="Vu_HD/buttons/yellow.png" transparent="1" alphatest="blend" />
++ <widget name="key_yellow" position="290,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="blue" position="405,415" zPosition="1" size="136,40" pixmap="Vu_HD/buttons/blue.png" transparent="1" alphatest="blend" />
++ <widget name="key_blue" position="425,415" zPosition="2" size="115,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <!-- Mediaplayer -->
++ <screen name="MediaPlayer" position="209,48" size="864,623" title="MediaPlayer" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_Media.png" zPosition="-1" position="0,0" size="864,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Media.png" position="41,46" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Media Player" position="90,55" size="250,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27d9dee2" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget name="title" position="65,108" size="600,30" font="Semiboldit;29" valign="top" foregroundColor="#ebebeb" backgroundColor="#8c8c8c" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget name="artisttext" position="70,150" size="74,22" font="Regular;20" valign="top" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="artist" position="150,150" size="339,22" font="Regular;20" valign="top" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="albumtext" position="70,185" size="74,22" font="Regular;20" valign="top" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="album" position="150,185" size="339,22" font="Regular;20" valign="top" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="yeartext" position="470,185" size="74,22" font="Regular;20" valign="top" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="year" position="545,185" size="150,22" font="Regular;20" valign="top" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="genretext" position="470,150" size="74,22" font="Regular;20" valign="top" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="genre" position="545,150" size="150,22" font="Regular;20" valign="top" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="coverArt" pixmap="Vu_HD/no_coverArt.png" position="690,103" size="102,102" transparent="1" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/icons/mp_buttons.png" position="40,235" size="152,18" alphatest="blend" />
++<!-- <widget name="PositionGauge" position="120,493" size="500,10" pointer="Vu_HD/position_pointer.png:660,0" seek_pointer="Vu_HD/position_pointer.png:660,0" transparent="1" />-->
++ <ePixmap pixmap="Vu_HD/icons/Mediaplayerbar_gray.png" zPosition="2" position="210,235" size="563,18" alphatest="blend" />
++ <widget name="PositionGauge" zPosition="3" position="210,233" size="563,18" pointer="Vu_HD/icons/Mediaplayerbar_purple.png:563,0" seek_pointer="Vu_HD/icons/Mediaplayerbar_purple.png:563,0" transparent="1" />
++ <widget source="session.CurrentService" render="Label" position="130,254" size="120,18" foregroundColor="#3d0e82" font="Semiboldit;18" halign="right" valign="center" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="ServicePosition">Position</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Label" position="735,254" size="120,18" foregroundColor="#3c3c3c" font="Semiboldit;18" halign="left" valign="center" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="ServicePosition">Remaining</convert>
++ </widget>
++ <widget name="repeat" position="785,234" size="23,20" pixmaps="Vu_HD/icons/ico_noreplay.png,Vu_HD/icons/ico_replay.png" transparent="1" alphatest="blend" />
++ <eLabel name="Filelist" position="50,300" size="110,22" text="File List" font="Semiboldit;22" foregroundColor="#3c3c3c" backgroundColor="#d9dee2" transparent="1" />
++ <widget name="filelist" position="45,335" itemHeight="36" selectionPixmap="Vu_HD/buttons/FocusBar_H36.png" transparent="1" size="365,252" scrollbarMode="showOnDemand" />
++ <eLabel name="Playlist" position="450,300" size="110,22" text="Play List" font="Semiboldit;22" foregroundColor="#3c3c3c" backgroundColor="#d9dee2" transparent="1" />
++ <widget name="playlist" position="445,335" itemHeight="36" selectionPixmap="Vu_HD/buttons/FocusBar_H36.png" transparent="1" size="365,252" scrollbarMode="showOnDemand" selectionDisabled="1" />
++ <widget name="currenttext" position="65,80" size="0,0" />
++ <widget name="titletext" position="65,80" size="0,0" />
++ </screen>
++ <!-- Menu screens -->
++ <screen name="menu_information" position="0,0" size="580,720" title="Main menu" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/bg.png" zPosition="-1" position="60,0" size="520,720" alphatest="blend" transparent="1" />
++ <widget source="title" render="Label" position="110,120" size="400,38" font="Regular;38" foregroundColor="#5c5c5c" backgroundColor="#27d8dee2" transparent="1" />
++ <ePixmap pixmap="Vu_HD/menu/ico_menu_Info.png" position="475,70" size="88,88" alphatest="blend" transparent="1" />
++ <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/buttons/FocusBar_H45.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#271a53bb" backgroundColor="#27d9dee2" transparent="1" position="84, 175" size="472,495" scrollbarMode="showOnDemand">
++<!-- <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/FocusBar_menu01.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#acacac" position="84,190" size="370,480" transparent="1" backgroundColor="#ececec" scrollbarMode="showNever"> -->
++ <convert type="TemplatedMultiContent">
++ {"template": [ MultiContentEntryText(pos = (30, 8), size = (410, 28), flags = RT_HALIGN_LEFT, text = 0 ) ],
++ "fonts": [gFont("Regular", 28)],
++ "itemHeight": 45
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="menu_shutdown" position="0,0" size="580,720" title="Main menu" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/bg.png" zPosition="-1" position="60,0" size="520,720" alphatest="blend" transparent="1" />
++ <widget source="title" render="Label" position="110,120" size="400,38" font="Regular;38" foregroundColor="#5c5c5c" backgroundColor="#27d8dee2" transparent="1" />
++ <ePixmap pixmap="Vu_HD/menu/ico_menu_Standby.png" position="475,70" size="88,88" alphatest="blend" transparent="1" />
++ <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/buttons/FocusBar_H45.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#271a53bb" backgroundColor="#27d9dee2" transparent="1" position="84, 175" size="472,495" scrollbarMode="showOnDemand">
++<!-- <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/FocusBar_menu01.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#acacac" position="84,190" size="370,480" transparent="1" backgroundColor="#ececec" scrollbarMode="showNever"> -->
++ <convert type="TemplatedMultiContent">
++ {"template": [ MultiContentEntryText(pos = (30, 8), size = (410, 28), flags = RT_HALIGN_LEFT, text = 0 ) ],
++ "fonts": [gFont("Regular", 28)],
++ "itemHeight": 45
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="menu_system" position="0,0" size="580,720" title="Main menu" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/bg.png" zPosition="-1" position="60,0" size="520,720" alphatest="blend" transparent="1" />
++ <widget source="title" render="Label" position="110,120" size="400,38" font="Regular;38" foregroundColor="#5c5c5c" backgroundColor="#27d8dee2" transparent="1" />
++ <ePixmap pixmap="Vu_HD/menu/ico_menu_Setup.png" position="475,70" size="88,88" alphatest="blend" transparent="1" />
++ <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/buttons/FocusBar_H45.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#271a53bb" backgroundColor="#27d9dee2" transparent="1" position="84, 175" size="472,495" scrollbarMode="showOnDemand">
++<!-- <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/FocusBar_menu01.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#acacac" position="84,190" size="370,480" transparent="1" backgroundColor="#ececec" scrollbarMode="showNever"> -->
++ <convert type="TemplatedMultiContent">
++ {"template": [ MultiContentEntryText(pos = (30, 8), size = (410, 28), flags = RT_HALIGN_LEFT, text = 0 ) ],
++ "fonts": [gFont("Regular", 28)],
++ "itemHeight": 45
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="Menu" position="0,0" size="580,720" title="Main menu" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/bg.png" zPosition="-1" position="60,0" size="520,720" alphatest="blend" transparent="1" />
++ <ePixmap pixmap="Vu_HD/menu/ico_menu_Setup.png" position="475,70" size="88,88" alphatest="blend" transparent="1" />
++ <widget source="title" render="Label" position="110,120" size="400,38" font="Regular;38" foregroundColor="#5c5c5c" backgroundColor="#27d8dee2" transparent="1" />
++<!-- <eLabel text="" position="153,136" size="3,44" font="Regular;42" foregroundColor="#8c8c8c" backgroundColor="#ec1c1c" /> -->
++ <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/buttons/FocusBar_H45.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#271a53bb" backgroundColor="#27d9dee2" transparent="1" position="84, 175" size="472,495" scrollbarMode="showOnDemand">
++<!-- <widget source="menu" render="Listbox" selectionPixmap="Vu_HD/FocusBar_menu01.png" foregroundColor="#4c4c4c" foregroundColorSelected="#ececec" backgroundColorSelected="#acacac" position="84,190" size="370,480" transparent="1" backgroundColor="#ececec" scrollbarMode="showNever"> -->
++ <convert type="TemplatedMultiContent">
++ {"template": [ MultiContentEntryText(pos = (30, 8), size = (410, 28), flags = RT_HALIGN_LEFT, text = 0 ) ],
++ "fonts": [gFont("Regular", 28)],
++ "itemHeight": 45
++ }
++ </convert>
++ </widget>
++ </screen>
++ <!-- Messagebox -->
++ <screen name="MessageBox" position="center,center" size="600,10" title="Message">
++ <widget name="text" position="65,8" size="420,0" font="Regular;22" />
++ <widget name="ErrorPixmap" pixmap="Vu_HD/icons/input_error.png" position="5,5" size="53,53" alphatest="blend" />
++ <widget name="QuestionPixmap" pixmap="Vu_HD/icons/input_question.png" position="5,5" size="53,53" alphatest="blend" />
++ <widget name="InfoPixmap" pixmap="Vu_HD/icons/input_info.png" position="5,5" size="53,53" alphatest="blend" />
++ <widget name="list" position="100,100" size="380,375" transparent="1" backgroundColor="darkgrey" />
++ <applet type="onLayoutFinish">
++# this should be factored out into some helper code, but currently demonstrates applets.
++from enigma import eSize, ePoint
++
++orgwidth = self.instance.size().width()
++orgpos = self.instance.position()
++textsize = self["text"].getSize()
++
++# y size still must be fixed in font stuff...
++textsize = (textsize[0] + 50, textsize[1] + 50)
++offset = 0
++if self.type == self.TYPE_YESNO:
++ offset = 60
++wsizex = textsize[0] + 60
++wsizey = textsize[1] + offset
++if (280 > wsizex):
++ wsizex = 280
++wsize = (wsizex, wsizey)
++
++
++# resize
++self.instance.resize(eSize(*wsize))
++
++# resize label
++self["text"].instance.resize(eSize(*textsize))
++
++# move list
++listsize = (wsizex, 50)
++self["list"].instance.move(ePoint(0, textsize[1]))
++self["list"].instance.resize(eSize(*listsize))
++
++# center window
++newwidth = wsize[0]
++self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
++ </applet>
++ </screen>
++ <!-- Minute input -->
++ <screen name="MinuteInput" position="center,center" size="280,60" title="Seek">
++ <widget name="minutes" position="80,15" size="160,25" halign="right" font="Regular;23" />
++ </screen>
++ <!-- Movie context menu -->
++ <screen name="MovieContextMenu" position="center,center" size="400,260" title="Movielist menu">
++ <widget name="menu" position="10,10" size="380,250" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Movieselection -->
++ <screen name="MovieSelection" position="145, 55" size="990,610" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_List.png" position="0,0" size="990,610" zPosition="-1" alphatest="on" transparent="1" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_media-info.png" position="44,40" size="37,28" alphatest="blend" transparent="1" />
++ <eLabel text="Recorded files..." position="95,40" size="700,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27d8dee2" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="44,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="271,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="498,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="725,82" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="89,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_green" position="316,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_yellow" position="543,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_blue" position="770,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="list" position="60,150" size="860,375" zPosition="2" scrollbarMode="showOnDemand" transparent="1" />
++ <widget name="DescriptionBorder" position="80,430" size="800,150" zPosition="1" transparent="1" alphatest="on"/>
++ <widget source="Service" render="Label" position="80,430" zPosition="1" size="640,22" font="Regular;20" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" transparent="1">
++ <convert type="MovieInfo">ShortDescription</convert>
++ </widget>
++ <widget source="Service" render="Label" position="840,430" zPosition="1" size="60,20" font="Regular;18" halign="right" backgroundColor="#27aeaeae" transparent="1">
++ <convert type="ServiceTime">Duration</convert>
++ <convert type="ClockToText">AsLength</convert>
++ </widget>
++ <widget source="Service" render="Label" position="725,450" zPosition="2" size="175,20" font="Regular;18" halign="right" backgroundColor="#27aeaeae" transparent="1">
++ <convert type="MovieInfo">RecordServiceName</convert>
++ </widget>
++ <widget source="Service" render="Label" position="80,470" zPosition="1" size="800,84" font="Regular;18" backgroundColor="#27aeaeae" transparent="1">
++ <convert type="EventName">ExtendedDescription</convert>
++ </widget>
++ <widget name="freeDiskSpace" position="80,560" size="830,20" font="Regular;19" backgroundColor="#27aeaeae" valign="center" halign="right" transparent="1" />
++ </screen>
++ <!-- Mute -->
++ <screen name="Mute" position="92,40" zPosition="10" size="90,80" backgroundColor="transparent" title="Mute" flags="wfNoBorder">
++ <ePixmap position="0,0" size="90,80" pixmap="Vu_HD/mute.png" transparent="1" alphatest="on" />
++ </screen>
++ <!-- Nameserver -->
++ <screen name="NameserverSetup" position="209,48" size="865,623" title="Nameserver Setup" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Nameserver Setup" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="config" position="130,166" itemHeight="36" size="600,250" zPosition="3" scrollbarMode="showOnDemand" transparent="1" />
++ <widget name="introduction" position="140,400" size="600,25" zPosition="10" font="Regular;21" foregroundColor="#3c3c3c" backgroundColor="#27d9dee2" halign="center" transparent="1" />
++ </screen>
++ <!-- Network adapter selection -->
++ <screen name="NetworkAdapterSelection" position="209,48" size="865,623" title="Select Network Adapter" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Select Network Adapter" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="list" position="10,140" size="480,250" transparent="1" scrollbarMode="showOnDemand" zPosition="10"/>
++ <widget source="list" render="Listbox" position="10,140" size="550,280" zPosition="10" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent"> <!-- iface, name, description, interfacepng, defaultpng, activepng, divpng -->
++ {"template": [
++ MultiContentEntryText(pos = (85, 6), size = (440, 28), font=0, flags = RT_HALIGN_LEFT|RT_VALIGN_TOP, text = 1), # index 1 is the interfacename
++ MultiContentEntryText(pos = (85, 43), size = (440, 20), font=1, flags = RT_HALIGN_LEFT|RT_VALIGN_BOTTOM, text = 2), # index 2 is the description
++ MultiContentEntryPixmapAlphaTest(pos = (2, 8), size = (54, 54), png = 3), # index 3 is the interface pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (63, 46), size = (15, 16), png = 4), # index 4 is the default pixmap
++ ],
++ "fonts": [gFont("Regular", 28),gFont("Regular", 20)],
++ "itemHeight": 70
++ }
++ </convert>
++ </widget>
++
++ <widget name="introduction" position="140,490" size="300,21" zPosition="10" font="Regular;21" halign="center" transparent="1" />
++ </screen>
++ <!-- Network adapter test Black = "#000000" Grey = "#8c8c93" Green = "#1cff1c" Red = #f23d21-->
++ <screen name="NetworkAdapterTest" position="209,48" size="865,623" title="Network test..." flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Network test..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="Adaptertext" position="60,176" size="140,26" zPosition="1" font="Semiboldit;24" backgroundColor="darkgrey" foregroundColors="#4c4c4c,#154901" transparent="1"/>
++ <widget name="Adapter" position="220,176" size="270,26" zPosition="1" font="Semiboldit;24" halign="right" foregroundColors="#4c4c4c,#aa0000,#154901" backgroundColor="darkgrey" transparent="1"/>
++ <widget name="AdapterInfo" pixmaps="Vu_HD/buttons/button_bluekey.png,Vu_HD/buttons/button_bluekey.png" position="600,169" zPosition="1" size="222,36" transparent="1" alphatest="blend" />
++ <widget name="AdapterInfo_Text" position="640,177" size="150,26" zPosition="2" font="Semibold;24" backgroundColor="#868686" transparent="1" foregroundColors="#5c5c5c,#1c1c1c,#07255d" />
++ <widget name="AdapterInfo_OK" pixmap="Vu_HD/icons/lock_on.png" position="550,171" size="38,31" alphatest="blend" zPosition="2" />
++ <widget name="Networktext" position="60,248" size="140,26" zPosition="1" font="Semiboldit;24" backgroundColor="darkgrey" foregroundColors="#4c4c4c,#154901" transparent="1"/>
++ <widget name="Network" position="220,248" size="270,26" zPosition="1" font="Semiboldit;24" halign="right" foregroundColors="#4c4c4c,#aa0000,#154901" backgroundColor="darkgrey" transparent="1"/>
++ <widget name="NetworkInfo" pixmaps="Vu_HD/buttons/button_bluekey.png,Vu_HD/buttons/button_bluekey.png" position="600,241" zPosition="1" size="222,36" transparent="1" alphatest="blend" />
++ <widget name="NetworkInfo_Text" position="640,249" size="150,26" zPosition="2" font="Semibold;24" backgroundColor="#868686" transparent="1" foregroundColors="#5c5c5c,#1c1c1c,#07255d" />
++ <widget name="NetworkInfo_Check" pixmaps="Vu_HD/icons/lock_on.png,Vu_HD/icons/lock_error.png" position="550,243" size="38,31" alphatest="blend" zPosition="2" />
++ <widget name="Dhcptext" position="60,320" size="140,26" zPosition="1" font="Semiboldit;24" backgroundColor="darkgrey" foregroundColors="#4c4c4c,#154901" transparent="1"/>
++ <widget name="Dhcp" position="220,320" size="270,26" zPosition="1" font="Semiboldit;24" halign="right" foregroundColors="#4c4c4c,#aa0000,#154901" backgroundColor="darkgrey" transparent="1"/>
++ <widget name="DhcpInfo" pixmaps="Vu_HD/buttons/button_bluekey.png,Vu_HD/buttons/button_bluekey.png" position="600,314" zPosition="1" size="222,36" transparent="1" alphatest="blend" />
++ <widget name="DhcpInfo_Text" position="640,321" size="150,26" zPosition="2" font="Semibold;24" backgroundColor="#868686" transparent="1" foregroundColors="#5c5c5c,#1c1c1c,#07255d" />
++ <widget name="DhcpInfo_Check" pixmaps="Vu_HD/icons/lock_on.png,Vu_HD/icons/lock_error.png" position="550,315" size="38,31" alphatest="blend" zPosition="2" />
++ <widget name="IPtext" position="60,392" size="140,26" zPosition="1" font="Semiboldit;24" backgroundColor="darkgrey" foregroundColors="#4c4c4c,#154901" transparent="1"/>
++ <widget name="IP" position="220,392" size="270,26" zPosition="1" font="Semiboldit;24" halign="right" foregroundColors="#4c4c4c,#aa0000,#154901" backgroundColor="darkgrey" transparent="1"/>
++ <widget name="IPInfo" pixmaps="Vu_HD/buttons/button_bluekey.png,Vu_HD/buttons/button_bluekey.png" position="600,386" zPosition="1" size="222,36" transparent="1" alphatest="blend" />
++ <widget name="IPInfo_Text" position="640,394" size="150,26" zPosition="2" font="Semibold;24" backgroundColor="#868686" transparent="1" foregroundColors="#5c5c5c,#1c1c1c,#07255d" />
++ <widget name="IPInfo_Check" pixmaps="Vu_HD/icons/lock_on.png,Vu_HD/icons/lock_error.png" position="550,387" size="38,31" alphatest="blend" zPosition="2" />
++ <widget name="DNStext" position="60,464" size="140,26" zPosition="1" font="Semiboldit;24" backgroundColor="darkgrey" foregroundColors="#4c4c4c,#154901" transparent="1"/>
++ <widget name="DNS" position="220,464" size="270,26" zPosition="1" font="Semiboldit;24" halign="right" foregroundColors="#4c4c4c,#aa0000,#154901" backgroundColor="darkgrey" transparent="1"/>
++ <widget name="DNSInfo" pixmaps="Vu_HD/buttons/button_bluekey.png,Vu_HD/buttons/button_bluekey.png" position="600,459" zPosition="1" size="222,36" transparent="1" alphatest="blend" />
++ <widget name="DNSInfo_Text" position="640,467" size="150,26" zPosition="2" font="Semibold;24" backgroundColor="#868686" transparent="1" foregroundColors="#5c5c5c,#1c1c1c,#07255d" />
++ <widget name="DNSInfo_Check" pixmaps="Vu_HD/icons/lock_on.png,Vu_HD/icons/lock_error.png" position="550,459" size="38,31" alphatest="blend" zPosition="2" />
++ <widget name="EditSettingsButton" pixmaps="Vu_HD/buttons/button_bluekey.png,Vu_HD/buttons/button_bluekey.png" position="500,531" zPosition="1" size="222,36" transparent="1" alphatest="blend" />
++ <widget name="EditSettings_Text" position="530,540" size="160,26" zPosition="2" font="Semibold;24" backgroundColor="#868686" halign="center" transparent="1" foregroundColors="#1c1c1c,#1c1c1c,#07255d" />
++ <widget name="InfoText" position="40,160" size="785,430" zPosition="25" foregroundColor="#3c3c3c" backgroundColor="#27c5c9cc" font="Regular;21" />
++ </screen>
++ <!-- Network setup -->
++ <screen name="NetworkSetup" position="130,140" size="510,330" title="Network Setup">
++ <widget name="menu" position="10,10" selectionPixmap="Vu_HD/buttons/Selected_bar_440x23px.png" transparent="1" backgroundColor="#371e1c1a" size="440,310" />
++ </screen>
++ <!-- Nim selection -->
++ <screen name="NimSelection" position="center,center" size="420,330" title="Choose Tuner">
++ <widget source="nimlist" render="Listbox" transparent="1" position="0,0" size="420,300" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (10, 5), size = (400, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name,
++ MultiContentEntryText(pos = (50, 30), size = (320, 30), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings,
++ ],
++ "fonts": [gFont("Regular", 20), gFont("Regular", 15)],
++ "itemHeight": 70
++ }
++ </convert>
++ </widget>
++ </screen>
++ <!-- Nim setup -->
++ <screen name="NimSetup" position="center,center" size="500,412" title="Reception Settings">
++ <widget name="config" position="10,10" transparent="1" size="480,402" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Numberzap -->
++ <screen name="NumberZap" position="center,center" size="250,60" title="Channel">
++ <widget name="channel" position="35,15" size="110,25" font="Regular;23" />
++ <widget name="number" position="145,15" size="80,25" halign="right" font="Regular;23" />
++ </screen>
++ <!-- Numerical help dialog -->
++ <screen name="NumericalTextInputHelpDialog" position="440,535" zPosition="2" size="394,94" backgroundColor="#27b5b9bd" flags="wfNoBorder">
++<!--
++ <eLabel position="0,0" size="392,92" backgroundColor="#c0c0c0" zPosition="-1" />
++-->
++ <widget name="key1" position="2,2" size="130,30" font="Console;16" halign="center" valign="center" transparent="1"/>
++ <widget name="key2" position="132,2" size="130,30" font="Console;16" halign="center" valign="center" transparent="1"/>
++ <widget name="key3" position="262,2" size="130,30" font="Console;16" halign="center" valign="center" transparent="1"/>
++ <widget name="key4" position="2,32" size="130,30" font="Console;16" halign="center" valign="center" transparent="1"/>
++ <widget name="key5" position="132,32" size="130,30" font="Console;16" halign="center" valign="center" transparent="1"/>
++ <widget name="key6" position="262,32" size="130,30" font="Console;16" halign="center" valign="center" transparent="1"/>
++ <widget name="key7" position="2,62" size="130,30" font="Console;16" halign="center" valign="center" transparent="1"/>
++ <widget name="key8" position="132,62" size="130,30" font="Console;16" halign="center" valign="center" transparent="1"/>
++ <widget name="key9" position="262,62" size="130,30" font="Console;16" halign="center" valign="center" transparent="1"/>
++ </screen>
++ <!-- Parental control - change pin -->
++ <screen name="ParentalControlChangePin" position="center,center" size="520,160" title="Change pin code">
++ <widget name="config" position="10,10" size="500,350" transparent="1" backgroundColor="#27d9dee2" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Parental control - editor -->
++ <screen name="ParentalControlEditor" position="center,center" size="520,400" title="Parental control services Editor">
++ <widget name="servicelist" position="10,10" size="500,350" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Parental control - setup -->
++ <screen name="ParentalControlSetup" position="209,48" size="865,623" title="Parental control setup" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Parental control setup" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget name="config" position="100,129" itemHeight="36" transparent="1" backgroundColor="#275c5c5c" size="650,350" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Picture in picture -->
++ <screen name="PictureInPicture" position="400,60" zPosition="-1" size="240,192" flags="wfNoBorder">
++ <widget name="video" position="0,0" size="240,192" backgroundColor="transparent" />
++ </screen>
++ <!-- Pin input -->
++ <screen name="PinInput" position="center,center" size="500,170" title="Pin code needed">
++ <widget name="service" position="10,10" size="480,25" font="Regular;20" />
++ <widget name="text" position="10,40" size="480,25" font="Regular;20" halign="center" />
++ <widget name="tries" position="10,70" size="480,25" font="Regular;20" halign="center" />
++ <widget name="input" position="10,110" size="480,40" font="Regular;50" halign="center" />
++ </screen>
++ <!-- Picture in picture setup -->
++ <screen name="PiPSetup" position="center,center" size="600,150" backgroundColor="transparent" flags="wfNoBorder" title="PiPSetup">
++ <widget name="text" position="0,0" size="600,150" font="Regular;23" />
++ </screen>
++ <!-- Plugin browser -->
++ <screen name="PluginBrowser" position="209,48" size="865,623" title="Plugin browser" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Plugin browser" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="435,98" size="25,25" alphatest="blend" />
++ <widget name="red" position="76,97" zPosition="1" size="300,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="green" position="466,97" zPosition="1" size="300,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="list" position="60,130" size="700,450" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Plugin downloads -->
++ <screen name="PluginDownloadBrowser" position="209,48" size="865,623" title="Downloadable plugins" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Downloadable plugins" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget name="text" position="60,130" zPosition="1" size="700,480" foregroundColor="#3c3c3c" font="Regular;20" halign="center" valign="center" />
++ <widget name="list" position="70,140" zPosition="2" size="680,460" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- PVR state -->
++ <screen name="PVRState" position="70,70" zPosition="2" size="150,30" backgroundColor="transpBlack" flags="wfNoBorder">
++ <widget name="state" position="0,0" size="150,30" font="Regular;25" halign="center" backgroundColor="transpBlack" foregroundColor="white" />
++ </screen>
++ <!-- Radio infobar -->
++ <screen name="RadioInfoBar" position="810, 173" size="320,470" zPosition="-1" flags="wfNoBorder" title="Radio" backgroundColor="#27c8c8c8">
++ <widget source="session.CurrentService" render="Label" position="0,10" zPosition="1" size="270,24" font="Regular;24" foregroundColor="#07255d" backgroundColor="#27c8c8c8" halign="left" noWrap="1" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="RdsDecoder" render="Pixmap" pixmap="Vu_HD/icons/rass_logo.png" position="270,0" size="50,21" alphatest="on">
++ <convert type="RdsInfo">RasInteractiveAvailable</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="session.RecordState" render="Pixmap" pixmap="Vu_HD/icons/record.png" position="288,22" zPosition="2" size="20,20" alphatest="on" >
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="0,42" zPosition="1" size="300,24" foregroundColor="#07255d" backgroundColor="#27c8c8c8" font="Semibold;24" noWrap="1" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="0,70" zPosition="1" size="50,22" font="Regular;20" foregroundColor="#07255d" backgroundColor="#27c8c8c8" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Label" position="155,70" zPosition="1" size="70,22" font="Regular;20" foregroundColor="#07255d" backgroundColor="#27c8c8c8" transparent="1">
++ <convert type="EventTime">EndTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Progress" position="165,75" zPosition="1" pixmap="Vu_HD/progress_medium.png" size="124,10" backgroundColor="#ffffff" >
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="0,90" zPosition="1" size="300,24" foregroundColor="#07255d" backgroundColor="#27c8c8c8" font="Semibold;24" noWrap="1" transparent="1">
++ <convert type="EventName">Name</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="0,120" zPosition="1" size="50,22" font="Regular;20" foregroundColor="#07255d" backgroundColor="#27c8c8c8" transparent="1">
++ <convert type="EventTime">StartTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="session.Event_Next" render="Label" position="55,120" zPosition="1" size="70,22" font="Regular;20" foregroundColor="#07255d" backgroundColor="#27c8c8c8" transparent="1">
++ <convert type="EventTime">EndTime</convert>
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="RdsDecoder" render="Label" position="0,150" size="300,300" font="LCD;20" foregroundColor="#80ffff" backgroundColor="#27c8c8c8" transparent="1">
++ <convert type="RdsInfo">RadioText</convert>
++ </widget>
++ </screen>
++ <!-- RASS -->
++ <screen name="RassInteractive" position="50,180" size="100,275" backgroundColor="transpWhite" flags="wfNoBorder">
++ <ePixmap pixmap="Vu_HD/icons/rass_logo.png" position="25,0" size="50,21" transparent="1" alphatest="on" />
++ <eLabel text="Index" position="36,25" size="60,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <eLabel text="0" position="5,25" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="Marker" position="21,25" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <eLabel text="1" position="5,50" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_1" position="35,50" size="36,20" alphatest="on" />
++ <eLabel text="2" position="5,75" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_2" position="35,75" size="36,20" alphatest="on" />
++ <eLabel text="3" position="5,100" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_3" position="35,100" size="36,20" alphatest="on" />
++ <eLabel text="4" position="5,125" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_4" position="35,125" size="36,20" alphatest="on" />
++ <eLabel text="5" position="5,150" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_5" position="35,150" size="36,20" alphatest="on" />
++ <eLabel text="6" position="5,175" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_6" position="35,175" size="36,20" alphatest="on" />
++ <eLabel text="7" position="5,200" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_7" position="35,200" size="36,20" alphatest="on" />
++ <eLabel text="8" position="5,225" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_8" position="35,225" size="36,20" alphatest="on" />
++ <eLabel text="9" position="5,250" size="16,25" font="Regular;21" foregroundColor="black" backgroundColor="transpWhite" />
++ <widget name="subpages_9" position="35,250" size="36,20" alphatest="on" />
++ </screen>
++ <!-- RDS info -->
++ <screen name="RdsInfoDisplay" position="0,0" size="1280,720" zPosition="-2" backgroundColor="transparent" flags="wfNoBorder">
++ <widget name="RassLogo" pixmap="Vu_HD/icons/rass_logo.png" position="100,585" size="50,21" />
++ <widget name="RadioText" position="100,620" size="1080,30" font="Regular;24" noWrap="1" backgroundColor="transpBlack" />
++ <widget name="RtpText" position="100,650" size="1080,30" font="Regular;24" halign="right" noWrap="1" backgroundColor="transpBlack" />
++ </screen>
++ <!-- Satfinder -->
++ <screen name="Satfinder" position="209,48" size="865,623" title="Satfinder" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Satfinder" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget name="introduction" position="0,0" size="0,0" font="Regular;23" />
++ <ePixmap pixmap="Vu_HD/icons/dish_scan.png" position="150,150" zPosition="0" size="119,110" transparent="1" alphatest="on" />
++ <widget source="Frontend" render="Label" position="340,140" zPosition="2" size="260,20" font="Regular;19" backgroundColor="#27d9dee2" halign="center" valign="center" transparent="1">
++ <convert type="FrontendInfo">SNRdB</convert>
++ </widget>
++ <eLabel name="snr" text="SNR:" position="270,165" size="60,22" font="Regular;21" halign="right" backgroundColor="#27d9dee2" transparent="1" />
++ <widget source="Frontend" render="Progress" position="340,165" size="260,20" pixmap="Vu_HD/bar_snr.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">SNR</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="610,165" size="60,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="FrontendInfo">SNR</convert>
++ </widget>
++ <eLabel name="agc" text="AGC:" position="270,190" size="60,22" font="Regular;21" halign="right" backgroundColor="#27d9dee2" transparent="1" />
++ <widget source="Frontend" render="Progress" position="340,190" size="260,20" pixmap="Vu_HD/bar_snr.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="610,190" size="60,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <eLabel name="ber" text="BER:" position="270,215" size="60,22" font="Regular;21" halign="right" backgroundColor="#27d9dee2" transparent="1" />
++ <widget source="Frontend" render="Progress" position="340,215" size="260,20" pixmap="Vu_HD/bar_ber.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">BER</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="610,215" size="60,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="FrontendInfo">BER</convert>
++ </widget>
++ <eLabel name="lock" text="Lock:" position="270,245" size="60,22" font="Regular;21" backgroundColor="#27d9dee2" halign="right" transparent="1"/>
++ <widget source="Frontend" render="Pixmap" pixmap="Vu_HD/icons/lock_on.png" position="340,245" zPosition="1" size="38,31" alphatest="on">
++ <convert type="FrontendInfo">LOCK</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="Frontend" render="Pixmap" pixmap="Vu_HD/icons/lock_off.png" position="340,240" zPosition="1" size="38,31" alphatest="on">
++ <convert type="FrontendInfo">LOCK</convert>
++ <convert type="ConditionalShowHide">Invert</convert>
++ </widget>
++ <eLabel text=" " position="160,282" zPosition="1" size="500,2" backgroundColor="#8c8c8c" />
++ <widget name="config" position="160,295" transparent="1" backgroundColor="#27cccccc" size="500,288" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Scan setup -->
++ <screen name="ScanSetup" position="center,center" size="520,405" title="Service scan">
++ <widget name="config" position="10,10" transparent="1" size="500,350" scrollbarMode="showOnDemand" />
++ <widget name="introduction" position="10,365" size="500,40" font="Regular;20" halign="center" />
++ </screen>
++ <!-- Scan simple -->
++ <screen name="ScanSimple" position="center,center" size="420,350" title="Service scan">
++ <widget name="header" position="10,10" size="400,25" font="Regular;23" />
++ <widget name="config" position="10,55" transparent="1" size="400,250" scrollbarMode="showOnDemand" />
++ <widget name="footer" position="10,310" size="400,20" font="Regular;20" halign="center" />
++ </screen>
++ <!-- Scart -->
++ <screen name="Scart" position="0,0" size="1280,720" backgroundColor="transparent" />
++ <!-- Service info -->
++ <screen name="ServiceInfo" position="209,48" size="865,623" title="Serviceinfo" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Info.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Serviceinfo" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="red" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="green" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="yellow" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="blue" position="658,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="infolist" position="60,140" size="700,460" itemHeight="36" foregroundColor="#3c3c3c" selectionDisabled="1" transparent="1"/>
++ </screen>
++ <!-- Service scan -->
++ <screen name="ServiceScan" position="center,center" size="420,390" title="Service Scan">
++ <widget source="FrontendInfo" render="Pixmap" pixmap="Vu_HD/icons/scan-s.png" position="5,5" size="64,64" transparent="1" alphatest="blend">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">0,0</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="FrontendInfo" render="Pixmap" pixmap="Vu_HD/icons/scan-c.png" position="5,5" size="64,64" transparent="1" alphatest="on">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">1,1</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="FrontendInfo" render="Pixmap" pixmap="Vu_HD/icons/scan-t.png" position="5,5" size="64,64" transparent="1" alphatest="on">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">2,2</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget name="network" position="80,15" size="330,20" font="Regular;20" />
++ <widget name="transponder" position="80,40" size="330,20" font="Regular;20" />
++ <widget name="scan_state" position="10,80" zPosition="2" size="400,20" font="Regular;18" />
++ <widget name="pass" position="10,80" size="400,20" font="Regular;18" />
++ <widget name="scan_progress" position="10,105" size="400,15" pixmap="Vu_HD/progress_big.png" borderWidth="2" borderColor="#cccccc" />
++ <widget name="servicelist" position="10,135" size="400,265" selectionDisabled="1" />
++ </screen>
++ <!-- Setup -->
++ <screen name="Setup" position="209,48" size="865,624" title="Setup" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" position="0,0" size="865,624" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="26,41" size="40,40" alphatest="blend" transparent="1" />
++ <widget source="Title" render="Label" position="80,50" size="250,34" font="Semiboldit;34" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="83,97" zPosition="2" size="150,25" font="Regular;20" halign="left" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="2" size="150,25" font="Regular;20" halign="left" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="config" position="45,130" itemHeight="36" foregroundColorSelected="#ebebeb" foregroundColor="#1c1c1c" selectionPixmap="Vu_HD/buttons/FocusBar_H36.png" transparent="1" size="772,432" scrollbarMode="showNever" />
++ </screen>
++ <!-- Simple channelselection -->
++ <screen name="SimpleChannelSelection" position="145, 55" size="990,610" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_List.png" position="0,0" size="990,610" zPosition="-1" alphatest="on" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/ico_Chlist_title.png" position="44,37" size="38,34" alphatest="blend" transparent="1" />
++ <widget source="Title" render="Label" position="95,40" size="700,32" zPosition="3" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27d8dee2" transparent="1" />
++<!-- <widget name="etitle" position="95,43" size="450,32" font="Semiboldit;32" halign="left" foregroundColor="#5d5d5d" backgroundColor="#27d8dee2" transparent="1" />-->
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="44,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="271,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="498,82" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="725,82" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="89,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_green" position="316,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_yellow" position="543,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="key_blue" position="770,84" zPosition="1" size="182,20" font="Regular;20" halign="left" valign="center" foregroundColor="#1c1c1c" backgroundColor="#27ebebeb" transparent="1" />
++ <widget name="list" position="60,130" size="700,460" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Skin Selector -->
++ <screen name="SkinSelector" position="209,48" size="865,623" title="Choose your Skin" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="26,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Choose your Skin" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="83,98" zPosition="2" size="150,25" foregroundColor="#1c1c1c" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" transparent="1" />
++ <widget source="introduction" render="Label" position="60,130" size="600,30" zPosition="10" foregroundColor="#3c3c3c" font="Regular;21" halign="left" valign="center" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="SkinList" position="60,170" size="420,440" itemHeight="30" backgroundColor="#27d9dee2" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="Preview" position="520,250" size="280,210" alphatest="on" />
++ </screen>
++ <!-- Sleeptimer edit -->
++ <screen name="SleepTimerEdit" position="center,center" size="520,200" title="Sleep Timer">
++ <widget name="current_status" position="40,40" size="400,30" valign="center" font="Regular;20" foregroundColor="#3c3c3c" />
++ <widget name="red" pixmap="Vu_HD/buttons/red.png" position="2,83" size="25,25" alphatest="blend" />
++ <widget name="green" pixmap="Vu_HD/buttons/green.png" position="2,122" size="25,25" alphatest="blend" />
++ <widget name="yellow" pixmap="Vu_HD/buttons/yellow.png" position="2,162" size="25,25" alphatest="blend"/>
++ <widget name="blue" pixmap="Vu_HD/buttons/blue.png" position="2,162" size="25,25" alphatest="blend" />
++ <widget name="red_text" position="40,80" size="400,30" valign="center" font="Regular;20" foregroundColor="#3c3c3c" />
++ <widget name="green_text" position="40,120" size="400,30" valign="center" font="Regular;20" foregroundColor="#3c3c3c" />
++ <widget name="yellow_text" position="40,160" size="400,30" valign="center" font="Regular;20" foregroundColor="#3c3c3c" />
++ <widget name="blue_text" position="40,200" size="400,30" valign="center" font="Regular;20" foregroundColor="#3c3c3c" />
++ <widget name="pretext" position="15,10" size="235,25" font="Regular;19" foregroundColor="#3c3c3c" />
++ <widget name="input" position="260,10" size="40,25" font="Regular;19" foregroundColor="#3c3c3c" />
++ <widget name="aftertext" position="305,10" size="100,25" font="Regular;19" foregroundColor="#3c3c3c" />
++ <ePixmap pixmap="Vu_HD/sleeptimer.png" position="390,17" size="116,142" alphatest="blend" />
++ </screen>
++ <!-- Standby mode -->
++ <screen name="Standby" flags="wfNoBorder" position="0,0" size="720,576" title="Standby" />
++ <!-- Start Wizard -->
++ <screen name="StartWizard" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder">
++ <widget name="text" position="303,140" size="340,300" font="Regular;22" />
++ <widget source="list" render="Listbox" position="253,440" size="440,180" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <widget name="config" position="253,440" zPosition="1" size="440,180" transparent="1" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="140,322" zPosition="0" size="25,25" transparent="1" alphatest="blend" />
++ <widget name="languagetext" position="178,325" size="95,30" font="Regular;18" />
++ <widget name="rc" pixmaps="Vu_HD/rc.png,Vu_HD/rcold.png" position="950,150" zPosition="10" size="154,500" alphatest="blend" />
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowdown2" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ </screen>
++ <!-- Network Wizard -->
++ <screen name="NetworkWizard" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="303,140" size="340,300" font="Regular;22" />
++ <widget source="list" render="Listbox" position="253,440" size="440,180" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <widget name="config" position="253,440" zPosition="1" size="440,180" transparent="1" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="140,322" zPosition="0" size="25,25" transparent="1" alphatest="blend" />
++ <widget name="languagetext" position="178,325" size="95,30" font="Regular;18" />
++ <widget name="rc" pixmaps="Vu_HD/rc.png,Vu_HD/rcold.png" position="950,150" zPosition="10" size="154,500" alphatest="blend" />
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowdown2" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget source="VKeyIcon" render="Pixmap" pixmap="Vu_HD/buttons/key_text.png" position="40,260" zPosition="0" size="35,25" transparent="1" alphatest="on" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget name="HelpWindow" pixmap="Vu_HD/buttons/key_text.png" position="125,170" zPosition="1" size="1,1" transparent="1" alphatest="on" />
++ </screen>
++ <!-- Subservice quickzap -->
++ <screen name="SubservicesQuickzap" position="124,470" size="512,200" title="Subservices" backgroundColor="transparent" flags="wfNoBorder">
++ <widget source="session.RecordState" render="Pixmap" pixmap="Vu_HD/icons/record.png" position="450,0" zPosition="2" size="14,14" alphatest="on" >
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ <eLabel text="Subservices" position="0,0" size="470,20" font="Regular;13" backgroundColor="#33294a6b" />
++ <widget name="CurrentSubserviceNumber" position="0,20" size="50,34" font="Regular;22" backgroundColor="#33294a6b" shadowColor="black" shadowOffset="-1,-1" />
++ <widget source="session.CurrentService" render="Label" position="50,20" size="420,34" font="Regular;22" backgroundColor="#33294a6b" shadowColor="black" shadowOffset="-1,-1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ </screen>
++ <!-- Subtitle selection -->
++ <screen name="Subtitles" position="center,80" size="520,538" title="Subtitle selection" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_Subtitle.png" position="0,0" size="520,538" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Subtitles.png" position="20,38" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Subtitle selection" position="69,45" size="400,32" font="Semiboldit;32" foregroundColor="#4c4c4c" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget name="config" position="15,83" itemHeight="42" selectionPixmap="Vu_HD/buttons/FocusBar_H42.png" transparent="1" zPosition="1" size="490,420" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Subtitle area -->
++ <screen name="SubtitleDisplay" position="0,0" size="1280,720" zPosition="-1" flags="wfNoBorder" backgroundColor="transparent" />
++ <!-- Time & date input -->
++ <screen name="TimeDateInput" position="160,150" size="400,200" title="Time/Date Input">
++ <widget name="cancel" pixmap="Vu_HD/buttons/red.png" position="10,0" size="136,40" alphatest="blend" />
++ <widget name="ok" pixmap="Vu_HD/buttons/green.png" position="260,0" size="136,40" alphatest="blend" />
++ <widget name="canceltext" position="30,0" zPosition="1" size="115,40" font="Regular;19" halign="center" valign="center" transparent="1" />
++ <widget name="oktext" position="280,0" zPosition="1" size="115,40" font="Regular;19" halign="center" valign="center" transparent="1" />
++ <widget name="config" position="10,40" transparent="1" size="380,150" />
++ </screen>
++ <!-- Timer edit -->
++ <screen name="TimerEdit" position="70,130" size="590,335" title="Timer Edit">
++ <widget name="description" position="10,10" size="580,40" font="Regular;25" />
++ <widget name="lbegin" position="405,102" size="103,30" font="Regular;25" foregroundColor="red" />
++ <widget name="lend" position="405,158" size="103,30" font="Regular;25" foregroundColor="green" />
++ <widget name="begin" position="508,105" size="72,35" font="Regular;25" />
++ <widget name="end" position="508,150" size="72,35" font="Regular;25" />
++ <widget name="apply" position="10,240" size="250,35" />
++ </screen>
++ <!-- Timer edit list -->
++ <screen name="TimerEditList" position="209,48" size="865,623" title="Eventview" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Timer.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Timer List" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_green" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_yellow" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_blue" position="658,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="timerlist" position="60,130" transparent="1" size="740,420" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Timer entry -->
++ <screen name="TimerEntry" position="209,48" size="865,623" title="Eventview" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Timer.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Timer entry" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget name="cancel" pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" backgroundColor="#27c5c9cc" />
++ <widget name="ok" pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" backgroundColor="#27c5c9cc" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="canceltext" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="oktext" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="config" position="60,140" transparent="1" backgroundColor="#27d9dee2" size="740,325" scrollbarMode="showOnDemand" />
++ <eLabel text=" " position="50,470" zPosition="-1" size="760,3" font="Regular;10" foregroundColor="#1e1e1e" backgroundColor="#8c8c8c" />
++ </screen>
++ <!-- Timer log -->
++ <screen name="TimerLog" position="209,48" size="865,623" title="Eventview" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Timer.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Timer log" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_green" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_yellow" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_blue" position="658,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="loglist" position="50,130" size="760,300" scrollbarMode="showOnDemand" />
++ <widget name="logentry" position="50,450" size="760,150" font="Regular;20" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" transparent="1"/>
++ </screen>
++ <!-- Timer sanity conflict -->
++ <screen name="TimerSanityConflict" position="209,48" size="865,623" title="Eventview" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Timer.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Timer sanity error" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="key_red" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_green" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_yellow" position="463,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="key_blue" position="658,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="timer1" position="60,140" size="700,75" scrollbarMode="showNever" />
++ <widget name="timer2" position="60,230" size="700,75" scrollbarMode="showNever" />
++ <widget name="list" position="60,320" size="700,288" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Timer Selection -->
++ <screen name="TimerSelection" position="90,120" size="550,430" title="Timer selection">
++ <widget name="timerlist" position="0,45" size="550,350" scrollbarMode="showOnDemand" />
++ </screen>
++ <!-- Timeshift state -->
++ <screen name="TimeshiftState" position="70,70" zPosition="2" size="150,60" backgroundColor="transpBlack" flags="wfNoBorder">
++ <widget name="state" position="0,3" size="150,30" font="Regular;25" halign="center" foregroundColor="white" backgroundColor="transpBlack" />
++ <widget source="session.CurrentService" render="Label" position="0,35" size="150,30" font="Regular;25" halign="center" foregroundColor="white" backgroundColor="transpBlack">
++ <convert type="ServicePosition">Remaining</convert>
++ </widget>
++ </screen>
++ <!-- Translator Info -->
++ <screen name="TranslationInfo" position="center,center" size="420,350" title="Translation">
++ <eLabel position="10,20" size="380,23" font="Regular;23" text="Translation:" />
++ <widget source="TranslatorName" render="Label" position="10,55" size="380,20" font="Regular;20" />
++ <widget source="TranslationInfo" render="Label" position="10,100" size="380,250" font="Regular;20" />
++ </screen>
++ <!-- Tutorial Wizard -->
++ <screen name="TutorialWizard" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="303,140" size="340,300" font="Regular;22" />
++ <widget source="list" render="Listbox" position="253,440" size="440,180" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <widget name="rc" pixmaps="Vu_HD/rc.png,Vu_HD/rcold.png" position="950,150" zPosition="10" size="154,500" alphatest="blend" />
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="blend" />
++ </screen>
++ <!-- Volumebar -->
++ <screen name="Volume" position="92,40" zPosition="1" size="324,62" title="Volume" flags="wfNoBorder" backgroundColor="transparent" >
++ <ePixmap pixmap="Vu_HD/volume_background.png" position="0,0" size="324,62" />
++ <widget name="Volume" pixmap="Vu_HD/volume_up.png" position="60,13" zPosition="1" size="250,34" transparent="1" />
++ </screen>
++
++ <!-- LCD/OLED Screens -->
++
++ <!-- LCD screen (channelselection) -->
++ <screen name="ChannelSelection_summary" position="0,0" size="132,64" id="1">
++ <widget source="parent.ServiceEvent" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="parent.ServiceEvent" render="Progress" position="16,27" size="100,5" borderWidth="1">
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="6,32" size="90,32" font="Regular;32" halign="right" valign="top" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="100,34" zPosition="1" size="26,30" font="Regular;16" valign="top" transparent="1">
++ <convert type="ClockToText">Format:%S</convert>
++ </widget>
++ </screen>
++ <!-- Color OLED screen (ChannelSelection) -->
++ <screen name="ChannelSelection_summary" position="0,0" size="96,64" id="2">
++ <widget source="parent.ServiceEvent" render="Label" position="0,0" size="96,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="parent.ServiceEvent" render="Progress" position="0,27" size="96,5" borderWidth="1" >
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="0,32" size="96,32" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ </screen>
++ <!-- LCD screen (main) -->
++ <screen name="InfoBarSummary" position="0,0" size="132,64" id="1">
++ <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Progress" position="16,27" size="100,5" borderWidth="1">
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="6,32" size="90,32" font="Regular;32" halign="right" valign="top" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="100,34" zPosition="1" size="26,30" font="Regular;16" valign="top" transparent="1">
++ <convert type="ClockToText">Format:%S</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" text=" " position="6,30" zPosition="1" size="120,34">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- Color OLED screen (main) -->
++ <screen name="InfoBarSummary" position="0,0" size="96,64" id="2">
++ <widget source="session.CurrentService" render="Label" position="0,0" size="96,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.Event_Now" render="Progress" position="0,27" size="96,5" borderWidth="1" >
++ <convert type="EventTime">Progress</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="0,32" size="96,32" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" text=" " position="0,32" zPosition="1" size="96,32">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- LCD screen (movieplayer) -->
++ <screen name="InfoBarMoviePlayerSummary" position="0,0" size="132,64" id="1">
++ <widget source="session.CurrentService" render="Label" position="6,0" size="120,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Progress" position="16,27" size="100,5" borderWidth="1">
++ <convert type="ServicePosition">Position</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="6,32" size="120,32" font="Regular;32" halign="center" valign="center" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" text=" " position="6,32" zPosition="1" size="120,32">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- Color OLED screen (movieplayer) -->
++ <screen name="InfoBarMoviePlayerSummary" position="0,0" size="96,64" id="2">
++ <widget source="session.CurrentService" render="Label" position="0,0" size="96,25" font="Regular;14" halign="center" valign="center" >
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Progress" position="0,27" size="96,5" borderWidth="1" >
++ <convert type="ServicePosition">Position</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="0,32" size="96,32" font="Regular;32" halign="center" valign="center" foregroundColor="#FFFFFF" backgroundColor="#000000" >
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" text=" " position="0,32" zPosition="1" size="96,32">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- LCD screen (ChoiceBox) -->
++ <screen name="ChoiceBox_summary" position="0,0" size="132,64" id="1">
++ <widget source="parent.summary_list" render="Label" position="6,0" size="126,64" font="Regular;11" />
++ </screen>
++ <!-- Color OLED screen (ChoiceBox) -->
++ <screen name="ChoiceBox_summary" position="0,0" size="96,64" id="2">
++ <widget source="parent.summary_list" render="Label" position="0,0" size="96,64" font="Regular;10" />
++ </screen>
++ <!-- LCD screen (MessageBox) -->
++ <screen name="MessageBox_summary" position="0,0" size="132,64" id="1">
++ <widget source="parent.Text" render="Label" position="0,0" size="132,52" font="Regular;11" halign="center" valign="center" />
++ <widget source="parent.selectedChoice" render="Label" position="6,50" size="120,14" font="Regular;14" halign="center" valign="center" />
++ </screen>
++ <!-- Color OLED screen (MessageBox) -->
++ <screen name="MessageBox_summary" position="0,0" size="96,64" id="2">
++ <widget source="parent.Text" render="Label" position="0,0" size="96,52" font="Regular;10" halign="center" valign="center" />
++ <widget source="parent.selectedChoice" render="Label" position="0,50" size="96,14" font="Regular;12" halign="center" valign="center" />
++ </screen>
++ <!-- LCD screen (menus) -->
++ <screen name="MenuSummary" position="0,0" size="132,64" id="1">
++ <widget source="parent.title" render="Label" position="6,0" size="120,32" font="Regular;14" halign="center" valign="center"/>
++ <widget source="parent.menu" render="Label" position="6,32" size="120,32" font="Regular;16" halign="center" valign="center">
++ <convert type="StringListSelection" />
++ </widget>
++ </screen>
++ <!-- Color OLED screen (menus) -->
++ <screen name="MenuSummary" position="0,0" size="96,64" id="2">
++ <widget source="parent.title" render="Label" position="0,0" size="96,32" font="Regular;14" halign="center" valign="center"/>
++ <widget source="parent.menu" render="Label" position="0,32" size="96,32" font="Regular;14" halign="center" valign="center">
++ <convert type="StringListSelection" />
++ </widget>
++ </screen>
++ <!-- LCD screen (ServiceScan) -->
++ <screen name="ServiceScanSummary" position="0,0" size="132,64" id="1">
++ <widget name="Title" position="6,4" size="120,42" font="Regular;16" transparent="1" />
++ <widget name="Service" position="6,22" size="120,26" font="Regular;12" transparent="1" />
++ <widget name="scan_progress" position="6,50" zPosition="1" borderWidth="1" size="56,12" backgroundColor="dark" />
++ </screen>
++ <!-- Color OLED screen (ServiceScan) -->
++ <screen name="ServiceScanSummary" position="0,0" size="96,64" id="2">
++ <widget name="Title" position="0,0" size="96,30" font="Regular;14" transparent="1" />
++ <widget name="Service" position="0,30" size="96,20" font="Regular;10" transparent="1" />
++ <widget name="scan_progress" position="0,50" zPosition="1" borderWidth="1" size="96,12" backgroundColor="dark" />
++ </screen>
++ <!-- LCD screen (setup) -->
++ <screen name="SetupSummary" position="0,0" size="132,64" id="1">
++ <widget source="SetupTitle" render="Label" position="6,0" size="120,16" font="Regular;12" />
++ <widget source="SetupEntry" render="Label" position="6,16" size="120,32" font="Regular;12" />
++ <widget source="SetupValue" render="Label" position="6,48" size="120,16" font="Regular;12" />
++ </screen>
++ <!-- Color OLED screen (setup) -->
++ <screen name="SetupSummary" position="0,0" size="96,64" id="2">
++ <widget source="SetupTitle" render="Label" position="0,0" size="96,16" font="Regular;10" />
++ <widget source="SetupEntry" render="Label" position="0,16" size="96,32" font="Regular;10" />
++ <widget source="SetupValue" render="Label" position="0,48" size="96,16" font="Regular;10" />
++ </screen>
++ <!-- LCD screen (misc) -->
++ <screen name="SimpleSummary" position="0,0" size="132,64" id="1">
++ <widget source="parent.Title" render="Label" position="6,0" size="120,64" font="Regular;16" halign="center" valign="center" />
++ </screen>
++ <!-- Color OLED screen (misc) -->
++ <screen name="SimpleSummary" position="0,0" size="96,64" id="2">
++ <widget source="parent.Title" render="Label" position="0,0" size="96,64" font="Regular;14" halign="center" valign="center" />
++ </screen>
++ <!-- LCD screen (standby) -->
++ <screen name="StandbySummary" position="0,0" size="132,64" id="1">
++ <widget source="global.CurrentTime" render="Label" position="6,0" size="120,64" font="Regular;40" halign="center" valign="center">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" position="6,0" zPosition="1" size="120,64" text=" ">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- Color OLED screen (standby) -->
++ <screen name="StandbySummary" position="0,0" size="96,64" id="2">
++ <widget source="global.CurrentTime" render="Label" position="0,0" size="96,64" font="Regular;40" halign="center" valign="center">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <widget source="session.RecordState" render="FixedLabel" position="0,0" zPosition="1" size="96,64" text=" ">
++ <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
++ <convert type="ConditionalShowHide">Blink</convert>
++ </widget>
++ </screen>
++ <!-- LCD screen (JobView) -->
++ <screen name="JobView_summary" position="0,0" size="132,64" id="1">
++ <widget source="parent.summary_job_name" render="Label" position="6,4" size="120,42" font="Regular;16" />
++ <widget source="parent.summary_job_task" render="Label" position="6,22" size="120,26" font="Regular;12" />
++ <widget source="parent.summary_job_progress" render="Progress" position="6,50" size="60,12" borderWidth="1" zPosition="1" />
++ <widget source="parent.summary_job_progress" render="Label" position="66,50" size="50,12" font="Regular;12" zPosition="2" halign="center" transparent="1" >
++ <convert type="ProgressToText" />
++ </widget>
++ </screen>
++ <!-- Color OLED screen (JobView) -->
++ <screen name="JobView_summary" position="0,0" size="96,64" id="2">
++ <widget source="parent.summary_job_name" render="Label" position="0,4" size="96,42" font="Regular;14" />
++ <widget source="parent.summary_job_task" render="Label" position="0,22" size="96,26" font="Regular;10" />
++ <widget source="parent.summary_job_progress" render="Progress" position="0,50" size="60,12" borderWidth="1" zPosition="1" />
++ <widget source="parent.summary_job_progress" render="Label" position="60,50" size="36,12" font="Regular;10" zPosition="2" halign="center" transparent="1" >
++ <convert type="ProgressToText" />
++ </widget>
++ </screen>
++ <!-- LCD screen (Wizard) -->
++ <screen name="WizardSummary" position="0,0" size="132,64" id="1">
++ <widget source="text" render="Label" position="6,0" size="120,16" font="Regular;16" transparent="1" />
++ <widget source="parent.list" render="Label" position="6,18" size="120,46" font="Regular;12">
++ <convert type="StringListSelection" />
++ </widget>
++ </screen>
++ <!-- Color OLED screen (Wizard) -->
++ <screen name="WizardSummary" position="0,0" size="96,64" id="2">
++ <widget source="text" render="Label" position="0,0" size="96,16" font="Regular;14" transparent="1" />
++ <widget source="parent.list" render="Label" position="0,18" size="96,46" font="Regular;12">
++ <convert type="StringListSelection" />
++ </widget>
++ </screen>
++
++ <!-- JobView -->
++ <screen name="JobView" position="center,center" size="520,350" title="Job View">
++ <widget source="job_name" render="Label" position="20,12" size="480,60" font="Regular;28" />
++ <widget source="job_task" render="Label" position="20,90" size="480,50" font="Regular;23" />
++ <widget source="job_progress" render="Progress" position="20,162" size="480,36" borderWidth="2" backgroundColor="#254f7497" />
++ <widget source="job_progress" render="Label" position="120,166" size="280,32" font="Regular;28" foregroundColor="#000000" zPosition="2" halign="center" transparent="1" >
++ <convert type="ProgressToText" />
++ </widget>
++ <widget source="job_status" render="Label" position="20,212" size="480,26" font="Regular;23" />
++ <widget name="config" position="20,254" size="480,20" />
++ <widget source="cancelable" render="Pixmap" pixmap="Vu_HD/buttons/red.png" position="20,300" size="25,25" alphatest="on" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="cancelable" render="FixedLabel" text="Cancel" position="50,300" zPosition="1" size="110,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="finished" render="Pixmap" pixmap="Vu_HD/buttons/green.png" position="190,300" size="25,25" alphatest="on" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="finished" render="FixedLabel" text="OK" font="Regular;20" halign="center" valign="center" position="220,300" size="110,40" transparent="1" backgroundColor="#1f771f" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="backgroundable" render="Pixmap" pixmap="Vu_HD/buttons/blue.png" position="360,300" size="25,25" alphatest="on" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="backgroundable" render="FixedLabel" text="Continue in background" font="Regular;20" halign="center" valign="center" position="390,300" size="110,40" transparent="1" backgroundColor="#18188b" >
++ <convert type="ConditionalShowHide" />
++ </widget>
++ </screen>
++ <!-- VirtualKeyBoard -->
++ <screen name="VirtualKeyBoard" position="center,center" size="560,350" zPosition="99" title="Virtual KeyBoard">
++ <ePixmap pixmap="skin_default/vkey_text.png" position="9,35" zPosition="-4" size="542,52" alphatest="on" />
++ <widget name="header" position="10,10" size="500,20" font="Regular;20" transparent="1" noWrap="1" />
++ <widget name="text" position="12,35" size="536,46" font="Regular;46" transparent="1" noWrap="1" halign="right" />
++ <widget name="list" position="10,100" size="540,225" selectionDisabled="1" foregroundColor="#ececec" backgroundColor="#1c2c5c" transparent="1" />
++ </screen>
++ <!-- FileBrowser -->
++ <screen name="FileBrowser" position="center,120" size="700,500" title="DVD File Browser" >
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="100,0" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="295,0" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="138,0" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="#279e9fa4" transparent="1" />
++ <widget source="key_green" render="Label" position="333,0" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="#279e9fa4" transparent="1" />
++ <widget name="filelist" position="50,50" size="600,450" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="CutListEditor" position="0,0" size="1280,720" title="Cutlist editor" flags="wfNoBorder">
++ <widget source="global.CurrentTime" render="Label" position="1130,40" size="80,26" font="Regular;26" halign="right" transparent="1" >
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="1000,72" size="210,22" font="Regular;20" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%d.%m.%Y</convert>
++ </widget>
++ <eLabel text="Cutlist editor" position="90,120" size="320,32" font="Regular;27" transparent="1" />
++ <eLabel position="80,155" size="340,420" zPosition="1" backgroundColor="black" />
++ <eLabel position="81,156" size="338,418" zPosition="2" backgroundColor="white" />
++ <widget source="cutlist" render="Listbox" position="90,165" zPosition="3" size="320,400" scrollbarMode="showOnDemand" backgroundColor="white" transparent="1" >
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(size=(220, 20), text = 1),
++ MultiContentEntryText(pos=(220,2), size=(100, 20), text = 2, flags = RT_HALIGN_RIGHT)
++ ],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ <eLabel position="479,124" zPosition="3" size="696,377" backgroundColor="#ff000000" />
++ <widget name="Video" position="491,130" zPosition="-10" size="672,365" />
++ <widget source="session.CurrentService" render="Label" position="450,510" size="790,30" zPosition="3" font="Regular;24" backgroundColor="#27c2bbb2" halign="center" valign="center" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Label" position="450,550" size="790,25" zPosition="3" font="Regular;20" halign="center" valign="center" transparent="1">
++ <convert type="ServicePosition">Position,Detailed</convert>
++ </widget>
++ <widget name="Timeline" position="479,587" size="696,20" zPosition="3" pointer="skin_default/position_arrow.png:3,5" backgroundColor="#2707255d" />
++ <eLabel text="OK = Menu" position="1060,630" size="140,22" zPosition="1" font="Regular;20" backgroundColor="#27c2bbb2" transparent="1" />
++ </screen>
++ <screen name="DVDToolbox" position="center,120" size="560,420" title="DVD media toolbox" >
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,0" size="140,40" alphatest="blend" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="info" render="Label" position="20,50" size="520,100" font="Regular;20" />
++ <widget name="details" position="20,180" size="520,200" font="Regular;16" />
++ <widget source="space_bar" render="Progress" position="10,390" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
++ <widget source="space_label" render="Label" position="20,394" size="520,22" zPosition="2" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
++ </screen>
++ <screen name="ProjectSettings" position="center,120" size="560,420" title="Collection settings" >
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="420,0" size="140,40" alphatest="blend" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget name="config" position="5,50" size="550,276" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="Vu_HD/div-h.png" position="0,330" zPosition="1" size="560,2" />
++ <widget source="info" render="Label" position="10,340" size="550,80" font="Regular;18" halign="center" valign="center" />
++ </screen>
++ <screen name="TitleCutter" position="0,0" size="1280,720" title="Cutlist editor" flags="wfNoBorder">
++ <widget source="global.CurrentTime" render="Label" position="1130,40" size="80,26" font="Regular;26" halign="right" transparent="1" >
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="1000,72" size="210,22" font="Regular;20" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%d.%m.%Y</convert>
++ </widget>
++ <eLabel text="Cutlist editor" position="90,120" size="320,32" font="Regular;27" transparent="1" />
++ <eLabel position="80,155" size="340,420" zPosition="1" backgroundColor="black" />
++ <eLabel position="81,156" size="338,418" zPosition="2" backgroundColor="white" />
++ <widget source="cutlist" render="Listbox" position="90,165" zPosition="3" size="320,400" scrollbarMode="showOnDemand" backgroundColor="white" transparent="1" >
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(size=(220, 20), text = 1),
++ MultiContentEntryText(pos=(220,2), size=(100, 20), text = 2, flags = RT_HALIGN_RIGHT)
++ ],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ <eLabel position="479,124" zPosition="3" size="696,377" backgroundColor="#ff000000" />
++ <widget name="Video" position="491,130" zPosition="-10" size="672,365" />
++ <widget source="session.CurrentService" render="Label" position="450,510" size="790,30" zPosition="3" font="Regular;24" backgroundColor="#27c2bbb2" halign="center" valign="center" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Label" position="450,550" size="790,25" zPosition="3" font="Regular;20" halign="center" valign="center" transparent="1">
++ <convert type="ServicePosition">Position,Detailed</convert>
++ </widget>
++ <widget name="Timeline" position="479,587" size="696,20" zPosition="3" pointer="skin_default/position_arrow.png:3,5" backgroundColor="#2707255d" />
++ <eLabel text="OK = Menu" position="1060,630" size="140,22" zPosition="1" font="Regular;20" backgroundColor="#27c2bbb2" transparent="1" />
++ </screen>
++ <screen name="TitleList" position="209,48" size="865,623" title="DVD Tool" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="DVD Tool" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="83,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="473,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_blue" render="Label" position="663,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="title_label" render="Label" position="160,148" size="540,38" font="Regular;18" backgroundColor="#27c2bbb2" transparent="1" />
++ <widget source="error_label" render="Label" position="160,148" size="540,340" zPosition="3" font="Regular;20" backgroundColor="#27c2bbb2" transparent="1" />
++ <widget source="titles" render="Listbox" scrollbarMode="showOnDemand" position="160,186" size="540,277" zPosition="3" transparent="1" >
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (0, 0), size = (420, 20), font = 0, flags = RT_HALIGN_LEFT, text = 1), # index 1 Title,
++ MultiContentEntryText(pos = (0, 20), size = (328, 17), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 description,
++ MultiContentEntryText(pos = (420, 6), size = (120, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 3), # index 3 begin time,
++ MultiContentEntryText(pos = (328, 20), size = (154, 17), font = 1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 channel,
++ MultiContentEntryText(pos = (482, 20), size = (58, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # index 4 channel,
++ ],
++ "fonts": [gFont("Regular", 20), gFont("Regular", 14)],
++ "itemHeight": 37
++ }
++ </convert>
++ </widget>
++ <widget source="space_bar_single" render="Progress" position="160,490" size="270,24" borderWidth="1" zPosition="2" backgroundColor="#254f7497" />
++ <widget source="space_label_single" render="Label" position="160,493" size="270,22" zPosition="3" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
++ <widget source="space_bar_dual" render="Progress" position="160,490" size="540,24" borderWidth="1" backgroundColor="#254f7497" />
++ <widget source="space_label_dual" render="Label" position="160,493" size="540,22" zPosition="2" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
++ </screen>
++ <screen name="DVDMovieSelection" position="center,120" size="560,425" title="Select a movie">
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,0" size="140,40" alphatest="blend" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="waitingtext" position="0,45" size="560,375" zPosition="4" font="Regular;22" halign="center" valign="center" />
++ <widget name="list" position="5,40" size="550,355" zPosition="2" scrollbarMode="showOnDemand" />
++ <widget name="DescriptionBorder" pixmap="Vu_HD/border_eventinfo.png" position="0,296" zPosition="1" size="560,103" transparent="1" alphatest="on" />
++ <widget source="Service" render="Label" position="5,298" zPosition="1" size="480,35" font="Regular;17" foregroundColor="#cccccc">
++ <convert type="MovieInfo">ShortDescription</convert>
++ </widget>
++ <widget source="Service" render="Label" position="495,298" zPosition="1" size="60,22" font="Regular;17" halign="right">
++ <convert type="ServiceTime">Duration</convert>
++ <convert type="ClockToText">AsLength</convert>
++ </widget>
++ <widget source="Service" render="Label" position="380,317" zPosition="2" size="175,22" font="Regular;17" halign="right">
++ <convert type="MovieInfo">RecordServiceName</convert>
++ </widget>
++ <widget source="Service" render="Label" position="5,337" zPosition="1" size="550,58" font="Regular;19">
++ <convert type="EventName">ExtendedDescription</convert>
++ </widget>
++ <widget name="freeDiskSpace" position="10,405" size="540,20" font="Regular;19" valign="center" halign="right" />
++ </screen>
++ <screen name="TitleProperties" position="center,120" size="560,425" title="Properties of current title" >
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="420,0" size="140,40" alphatest="blend" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget source="serviceinfo" render="Label" position="10,46" size="350,144" font="Regular;18" />
++ <widget name="thumbnail" position="370,46" size="180,144" alphatest="on" />
++ <widget name="config" position="10,196" size="540,228" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="DVDPlayer" flags="wfNoBorder" position="200,516" size="880,162" title="InfoBar" backgroundColor="transparent">
++ <!-- Background -->
++ <ePixmap position="0,0" zPosition="-1" size="880,144" pixmap="Vu_HD/Bg_Media_info.png" />
++ <ePixmap position="35,18" size="37,28" pixmap="Vu_HD/menu/ico_title_media-info.png" alphatest="blend" />
++ <!-- colorbuttons -->
++ <ePixmap position="50,75" pixmap="Vu_HD/icons/ico_player.png" size="152,18" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="770,15" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="790,17" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <!-- Servicename -->
++ <ePixmap pixmap="Vu_HD/icons/icon_event.png" position="85,15" zPosition="1" size="15,10" alphatest="on" />
++ <widget source="session.CurrentService" render="Label" position="110,10" size="300,20" font="Regular;20" backgroundColor="#27d9dee2" transparent="1" noWrap="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <!-- Chapter info -->
++ <widget name="chapterLabel" position="110,32" size="360,20" font="Regular;16" foregroundColor="#3c3c3c" backgroundColor="#27d9dee2" transparent="1" />
++ <!-- Audio track info -->
++ <ePixmap pixmap="Vu_HD/icons/icon_dolby.png" position="675,52" zPosition="1" size="43,15" alphatest="blend"/>
++ <widget name="audioLabel" position="720,50" size="130,22" font="Regular;16" backgroundColor="#27aeaeae" transparent="1" />
++ <!-- Subtitle track info -->
++ <widget source="session.CurrentService" render="Pixmap" pixmap="Vu_HD/icons/icon_txt.png" position="520,52" zPosition="1" size="26,16" alphatest="blend" >
++ <convert type="ServiceInfo">HasTelext</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget name="subtitleLabel" position="550,50" size="120,22" font="Regular;16" backgroundColor="#263c59" transparent="1" />
++ <!-- Angle info -->
++ <widget name="anglePix" pixmap="Vu_HD/icons/icon_view.png" position="370,50" size="26,16" alphatest="on" />
++ <widget name="angleLabel" position="400,48" size="120,22" font="Regular;16" backgroundColor="#263c59" transparent="1" />
++ <!-- Elapsed time -->
++ <widget source="session.CurrentService" render="Label" position="240,95" size="100,24" font="Semiboldit;18" halign="left" valign="center" foregroundColor="#3d0e82" backgroundColor="#27aeaeae" transparent="1">
++ <convert type="ServicePosition">Position,ShowHours</convert>
++ </widget>
++ <!-- Progressbar (movie position)-->
++ <ePixmap position="240,75" size="563,18" pixmap="Vu_HD/icons/Mediaplayerbar_gray.png" alphatest="blend" />
++ <widget source="session.CurrentService" render="PositionGauge" position="242,68" size="563,25" zPosition="2" pointer="Vu_HD/icons/Mediaplayerbar_purple.png:563,0" transparent="1">
++ <convert type="ServicePosition">Gauge</convert>
++ </widget>
++ <!-- Remaining time -->
++ <widget source="session.CurrentService" render="Label" position="700,95" size="95,20" font="Regular;16" halign="right" valign="center" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" transparent="1">
++ <convert type="ServicePosition">Remaining,Negate,ShowHours</convert>
++ </widget>
++ </screen>
++ <screen name="ModemSetup" position="180,100" size="320,300" title="Modem" >
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="10,10" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="160,10" size="140,40" alphatest="blend" />
++ <widget name="key_green" position="30,10" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget name="key_red" position="180,10" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget name="list" position="10,60" size="300,120" />
++ <widget name="state" position="10,210" size="300,80" font="Regular;20" />
++ </screen>
++ <screen name="picshow" position="center,120" size="560,420" title="PicturePlayer" >
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="420,0" size="140,40" alphatest="blend" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
++ <widget source="label" render="Label" position="5,55" size="350,140" font="Regular;19" backgroundColor="#25062748" transparent="1" />
++ <widget name="thn" position="360,40" size="180,160" alphatest="on" />
++ <widget name="filelist" position="5,205" zPosition="2" size="550,210" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="Pic_Exif" position="center,center" size="560,360" title="Info" >
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,0" size="140,40" alphatest="blend" />
++ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="menu" render="Listbox" position="5,50" size="550,310" scrollbarMode="showOnDemand" selectionDisabled="1" >
++ <convert type="TemplatedMultiContent">
++ {
++ "template": [ MultiContentEntryText(pos = (5, 5), size = (250, 30), flags = RT_HALIGN_LEFT, text = 0), MultiContentEntryText(pos = (260, 5), size = (290, 30), flags = RT_HALIGN_LEFT, text = 1)],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 30
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="CleanupWizard" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="400,100" size="550,270" font="Regular;23" />
++ <widget source="list" render="Listbox" transparent="1" position="300,400" size="500,300" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="150,250" size="25,25" alphatest="blend" />
++ <widget name="languagetext" position="200,253" size="120,30" font="Regular;18" />
++ <widget name="config" position="300,400" zPosition="1" size="500,300" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="portpic" position="100,400" zPosition="10" size="150,150" transparent="1" alphatest="on"/>
++ <widget name="rc" pixmap="Vu_HD/rc.png" position="950,150" zPosition="10" size="154,500" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown2" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <screen name="CleanupWizardConfiguration" position="209,48" size="865,623" title="CleanupWizard settings" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="CleanupWizard settings" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="config" zPosition="2" position="50,130" itemHeight="36" size="750,324" scrollbarMode="showOnDemand" transparent="1" />
++ <eLabel text=" " position="145,460" zPosition="10" size="560,2" transparent="1" backgroundColor="#8c8c8c" />
++ <widget source="status" render="Label" position="160,525" size="540,60" zPosition="10" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" font="Regular;20" halign="center" valign="center" transparent="1"/>
++ </screen>
++ <screen name="CIselectMainMenu" position="100,80" size="520,538" title="CI assignment" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_Subtitle.png" position="0,0" size="520,538" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="16,36" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="CI assignment" position="69,45" size="400,32" font="Semiboldit;32" foregroundColor="#4c4c4c" backgroundColor="#b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="20,91" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="210,91" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="58,93" zPosition="1" size="150,20" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget source="key_green" render="Label" position="248,93" zPosition="1" size="150,20" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget name="CiList" position="15,125" itemHeight="42" selectionPixmap="Vu_HD/buttons/FocusBar_H42.png" transparent="1" zPosition="1" size="490,336" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="CIconfigMenu" position="209,48" size="865,623" title="CI assignment" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="CI assignment" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="73,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="473,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_blue" render="Label" position="668,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="CAidList_desc" render="Label" position="155,200" size="550,22" font="Regular;20" backgroundColor="#27d9dee2" transparent="1" />
++ <widget source="CAidList" render="Label" position="155,230" size="550,45" font="Regular;20" backgroundColor="#27d9dee2" transparent="1" />
++ <ePixmap pixmap="Vu_HD/div-h.png" position="150,275" zPosition="1" size="560,2" />
++ <widget source="ServiceList_desc" render="Label" position="155,280" size="550,22" font="Regular;20" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="ServiceList" position="155,310" size="550,250" zPosition="1" scrollbarMode="showOnDemand" />
++ <widget source="ServiceList_info" render="Label" position="155,310" size="550,250" zPosition="2" font="Regular;20" backgroundColor="#27d9dee2" transparent="1" />
++ </screen>
++ <screen name="easyCIconfigMenu" position="209,48" size="865,623" title="CI assignment" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="CI assignment" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="73,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="473,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="ServiceList_desc" render="Label" position="155,200" size="550,22" font="Regular;20" backgroundColor="#27d9dee2" transparent="1" />
++ <widget name="ServiceList" position="155,230" size="550,300" zPosition="1" scrollbarMode="showOnDemand" />
++ <widget source="ServiceList_info" render="Label" position="155,230" size="550,300" zPosition="2" font="Regular;20" backgroundColor="#27d9dee2" transparent="1" />
++ </screen>
++ <screen name="CAidSelect" position="209,48" size="865,623" title="select CAId's" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="select CAId's" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="73,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="list" position="155,150" size="540,350" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="Vu_HD/div-h.png" position="150,520" zPosition="1" size="450,2" />
++ <widget source="introduction" render="Label" position="150,530" size="450,40" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#27d9dee2" transparent="1" />
++ </screen>
++ <screen name="myProviderSelection" position="209,48" size="865,623" title="Select provider to add..." flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Select provider to add..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="73,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="473,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_blue" render="Label" position="668,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="list" position="155,150" size="550,350" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="Vu_HD/div-h.png" position="150,510" zPosition="1" size="560,2" />
++ <widget source="introduction" render="Label" position="150,520" size="560,40" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#27d9dee2" transparent="1" />
++ </screen>
++ <screen name="myChannelSelection" position="209,48" size="865,623" title="Select service to add..." flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Select service to add..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="73,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="473,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_blue" render="Label" position="668,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="list" position="155,150" size="550,350" scrollbarMode="showOnDemand" />
++ <ePixmap pixmap="Vu_HD/div-h.png" position="150,510" zPosition="1" size="560,2" />
++ <widget source="introduction" render="Label" position="150,520" size="560,40" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#27d9dee2" transparent="1" />
++ </screen>
++ <screen name="CrashlogAutoSubmitConfiguration" position="209,48" size="865,623" title="CrashlogAutoSubmit settings" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="CrashlogAutoSubmit settings" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" halign="right" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="config" zPosition="2" position="50,130" itemHeight="36" size="750,324" scrollbarMode="showOnDemand" transparent="1" />
++ <eLabel text=" " position="145,460" zPosition="10" size="560,2" transparent="1" backgroundColor="#8c8c8c" />
++ <widget source="status" render="Label" position="160,525" size="540,60" zPosition="10" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" font="Regular;20" halign="center" valign="center" transparent="1"/>
++ <widget name="VKeyIcon" pixmap="Vu_HD/buttons/key_text.png" position="160,490" zPosition="10" size="35,25" transparent="1" alphatest="on" />
++ <widget name="HelpWindow" pixmap="Vu_HD/vkey_icon.png" position="310,400" zPosition="1" size="1,1" transparent="1" alphatest="on" />
++ </screen>
++ <screen name="DefaultServiceScan" position="150,115" size="420,390" title="Service Scan">
++ <widget source="FrontendInfo" render="Pixmap" pixmap="Vu_HD/icons/scan-s.png" position="5,5" size="64,64" transparent="1" alphatest="blend">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">0,0</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="FrontendInfo" render="Pixmap" pixmap="Vu_HD/icons/scan-c.png" position="5,5" size="64,64" transparent="1" alphatest="on">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">1,1</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="FrontendInfo" render="Pixmap" pixmap="Vu_HD/icons/scan-t.png" position="5,5" size="64,64" transparent="1" alphatest="on">
++ <convert type="FrontendInfo">TYPE</convert>
++ <convert type="ValueRange">2,2</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget name="network" position="80,15" size="330,20" font="Regular;20" />
++ <widget name="transponder" position="80,40" size="330,20" font="Regular;20" />
++ <widget name="scan_state" position="10,80" zPosition="2" size="400,20" font="Regular;18" />
++ <widget name="pass" position="10,80" size="400,20" font="Regular;18" />
++ <widget name="scan_progress" position="10,105" size="400,15" pixmap="Vu_HD/progress_big.png" borderWidth="2" borderColor="#cccccc" />
++ <widget name="servicelist" position="10,135" size="400,265" selectionDisabled="1" />
++ </screen>
++ <screen name="DiseqcTester" position="90,100" size="520,400" title="DiSEqC Tester" >
++ <!--ePixmap pixmap="Vu_HD/icons/dish_scan.png" position="5,25" zPosition="0" size="119,110" transparent="1" alphatest="on" />
++ <widget source="Frontend" render="Label" position="190,10" zPosition="2" size="260,20" font="Regular;19" halign="center" valign="center" transparent="1">
++ <convert type="FrontendInfo">SNRdB</convert>
++ </widget>
++ <eLabel name="snr" text="SNR:" position="120,35" size="60,22" font="Regular;21" halign="right" transparent="1" />
++ <widget source="Frontend" render="Progress" position="190,35" size="260,20" pixmap="Vu_HD/bar_snr.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">SNR</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="460,35" size="60,22" font="Regular;21">
++ <convert type="FrontendInfo">SNR</convert>
++ </widget>
++ <eLabel name="agc" text="AGC:" position="120,60" size="60,22" font="Regular;21" halign="right" transparent="1" />
++ <widget source="Frontend" render="Progress" position="190,60" size="260,20" pixmap="Vu_HD/bar_snr.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="460,60" size="60,22" font="Regular;21">
++ <convert type="FrontendInfo">AGC</convert>
++ </widget>
++ <eLabel name="ber" text="BER:" position="120,85" size="60,22" font="Regular;21" halign="right" transparent="1" />
++ <widget source="Frontend" render="Progress" position="190,85" size="260,20" pixmap="Vu_HD/bar_ber.png" borderWidth="2" borderColor="#cccccc">
++ <convert type="FrontendInfo">BER</convert>
++ </widget>
++ <widget source="Frontend" render="Label" position="460,85" size="60,22" font="Regular;21">
++ <convert type="FrontendInfo">BER</convert>
++ </widget>
++ <eLabel name="lock" text="Lock:" position="120,115" size="60,22" font="Regular;21" halign="right" />
++ <widget source="Frontend" render="Pixmap" pixmap="Vu_HD/icons/lock_on.png" position="190,110" zPosition="1" size="38,31" alphatest="on">
++ <convert type="FrontendInfo">LOCK</convert>
++ <convert type="ConditionalShowHide" />
++ </widget>
++ <widget source="Frontend" render="Pixmap" pixmap="skin_default/icons/lock_off.png" position="190,110" zPosition="1" size="38,31" alphatest="on">
++ <convert type="FrontendInfo">LOCK</convert>
++ <convert type="ConditionalShowHide">Invert</convert>
++ </widget-->
++ <widget source="progress_list" render="Listbox" position="0,0" size="510,150" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (10, 0), size = (330, 25), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the index name,
++ MultiContentEntryText(pos = (330, 0), size = (150, 25), flags = RT_HALIGN_RIGHT, text = 2) # index 2 is the status,
++ ],
++ "fonts": [gFont("Regular", 20)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ <eLabel name="overall_progress" text="Overall progress:" position="20,162" size="480,22" font="Regular;21" halign="center" transparent="1" />
++ <widget source="overall_progress" render="Progress" position="20,192" size="480,20" borderWidth="2" backgroundColor="#254f7497" />
++ <eLabel name="overall_progress" text="Progress:" position="20,222" size="480,22" font="Regular;21" halign="center" transparent="1" />
++ <widget source="sub_progress" render="Progress" position="20,252" size="480,20" borderWidth="2" backgroundColor="#254f7497" />
++
++ <eLabel name="" text="Failed:" position="20,282" size="140,22" font="Regular;21" halign="left" transparent="1" />
++ <widget source="failed_counter" render="Label" position="160,282" size="100,20" font="Regular;21" />
++
++ <eLabel name="" text="Succeeded:" position="20,312" size="140,22" font="Regular;21" halign="left" transparent="1" />
++ <widget source="succeeded_counter" render="Label" position="160,312" size="100,20" font="Regular;21" />
++
++ <eLabel name="" text="With errors:" position="20,342" size="140,22" font="Regular;21" halign="left" transparent="1" />
++ <widget source="witherrors_counter" render="Label" position="160,342" size="100,20" font="Regular;21" />
++
++ <eLabel name="" text="Not tested:" position="20,372" size="140,22" font="Regular;21" halign="left" transparent="1" />
++ <widget source="untestable_counter" render="Label" position="160,372" size="100,20" font="Regular;21" />
++
++ <widget source="CmdText" render="Label" position="300,282" size="180,200" font="Regular;21" />
++ </screen>
++ <screen name="DiseqcTesterNimSelection" position="center,center" size="400,330" title="Choose Tuner">
++ <widget source="nimlist" render="Listbox" position="0,0" size="380,300" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (10, 5), size = (360, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name,
++ MultiContentEntryText(pos = (50, 30), size = (320, 30), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings,
++ ],
++ "fonts": [gFont("Regular", 20), gFont("Regular", 15)],
++ "itemHeight": 70
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="FPUpgrade" position="150,200" size="450,200" title="FP upgrade required" >
++ <widget name="text" position="0,0" size="550,50" font="Regular;20" />
++ <widget name="oldversion_label" position="10,100" size="290,25" font="Regular;20" />
++ <widget name="newversion_label" position="10,125" size="290,25" font="Regular;20" />
++ <widget name="oldversion" position="300,100" size="50,25" font="Regular;20" />
++ <widget name="newversion" position="300,125" size="50,25" font="Regular;20" />
++ </screen>
++ <screen name="SystemMessage" position="150,200" size="450,200" title="System Message" >
++ <widget source="text" position="0,0" size="450,200" font="Regular;20" halign="center" valign="center" render="Label" />
++ <ePixmap pixmap="Vu_HD/icons/input_error.png" position="5,5" size="53,53" alphatest="on" />
++ </screen>
++ <screen name="NFIDownload" position="90,95" size="560,420" title="Image download utility">
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,0" zPosition="0" size="140,40" transparent="1" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,0" zPosition="0" size="140,40" transparent="1" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,0" zPosition="0" size="140,40" transparent="1" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="420,0" zPosition="0" size="140,40" transparent="1" alphatest="blend" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;19" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;19" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;19" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;19" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
++
++ <widget source="label_top" render="Label" position="10,44" size="240,20" font="Regular;16" />
++ <widget name="feedlist" position="10,66" size="250,222" scrollbarMode="showOnDemand" />
++ <widget name="destlist" position="0,66" size="260,222" scrollbarMode="showOnDemand" />
++
++ <widget source="label_bottom" render="Label" position="10,312" size="240,18" font="Regular;16"/>
++ <widget source="path_bottom" render="Label" position="10,330" size="250,42" font="Regular;18" />
++
++ <widget source="infolabel" render="Label" position="270,44" size="280,284" font="Regular;16" />
++ <widget source="job_progressbar" render="Progress" position="10,374" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
++ <widget source="job_progresslabel" render="Label" position="130,378" zPosition="2" font="Regular;18" halign="center" transparent="1" size="300,22" foregroundColor="#000000" />
++ <widget source="statusbar" render="Label" position="10,404" size="540,16" font="Regular;16" foregroundColor="#cccccc" />
++ </screen>
++ <screen name="NFIFlash" position="90,95" size="560,420" title="Image flash utility">
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="420,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
++ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
++ <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
++ <widget source="listlabel" render="Label" position="16,44" size="200,21" valign="center" font="Regular;18" />
++ <widget name="filelist" position="0,68" size="260,260" scrollbarMode="showOnDemand" />
++ <widget source="infolabel" render="Label" position="270,44" size="280,284" font="Regular;16" />
++ <widget source="job_progressbar" render="Progress" position="10,374" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
++ <widget source="job_progresslabel" render="Label" position="180,378" zPosition="2" font="Regular;18" halign="center" transparent="1" size="200,22" foregroundColor="#000000" />
++ <widget source="statusbar" render="Label" position="10,404" size="540,16" font="Regular;16" foregroundColor="#cccccc" />
++ </screen>
++ <screen name="BackupSelection" position="center,130" size="560,400" title="Select files/folders to backup">
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,0" size="140,40" alphatest="blend" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="checkList" position="5,50" size="550,250" transparent="1" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="RestoreMenu" position="center,130" size="560,400" title="Restore backups" >
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,0" size="140,40" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,0" size="140,40" alphatest="blend" />
++ <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
++ <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
++ <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
++ <widget name="filelist" position="5,50" size="550,230" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="UpdatePluginMenu" position="209,48" size="865,623" title="Software management" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Software management" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
++ <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%H:%M</convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <ePixmap pixmap="Vu_HD/border_menu.png" position="60,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
++ <widget source="menu" render="Listbox" position="70,150" size="322,338" scrollbarMode="showOnDemand" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (2, 2), size = (330, 24), flags = RT_HALIGN_LEFT, text = 1), # index 0 is the MenuText,
++ ],
++ "fonts": [gFont("Regular", 22)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ <widget source="menu" render="Listbox" position="420,150" size="390,338" scrollbarMode="showNever" selectionDisabled="1" backgroundColor="#27d9dee2" transparent="1">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (2, 2), size = (380, 300), flags = RT_HALIGN_CENTER|RT_VALIGN_CENTER|RT_WRAP, text = 2), # index 2 is the Description,
++ ],
++ "fonts": [gFont("Regular", 22)],
++ "itemHeight": 300
++ }
++ </convert>
++ </widget>
++ <widget source="status" render="Label" position="50,500" zPosition="10" size="750,50" halign="center" valign="center" font="Regular;22" transparent="1" backgroundColor="#27aeaeae" />
++ </screen>
++ <screen name="PluginManager" position="209,48" size="865,623" title="Extensions management" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Extensions management" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="473,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_blue" render="Label" position="668,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="list" render="Listbox" position="50,130" size="750,416" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"templates":
++ {"default": (51,[
++ MultiContentEntryText(pos = (30, 1), size = (670, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (30, 25), size = (670, 24), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
++ MultiContentEntryPixmapAlphaTest(pos = (675, 0), size = (48, 48), png = 5), # index 5 is the status pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (750, 2), png = 6), # index 6 is the div pixmap
++ ]),
++ "category": (40,[
++ MultiContentEntryText(pos = (30, 0), size = (700, 22), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (30, 22), size = (700, 16), font=2, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the description
++ MultiContentEntryPixmapAlphaTest(pos = (0, 38), size = (750, 2), png = 3), # index 3 is the div pixmap
++ ])
++ },
++ "fonts": [gFont("Regular", 22),gFont("Regular", 20),gFont("Regular", 16)],
++ "itemHeight": 52
++ }
++ </convert>
++ </widget>
++ <widget source="status" render="Label" position="50,560" zPosition="10" size="750,23" halign="center" valign="center" font="Regular;22" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" transparent="1"/>
++ </screen>
++ <screen name="PluginManagerInfo" position="209,48" size="865,623" title="Plugin manager activity information" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Plugin manager activity information" position="90,50" size="700,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="list" render="Listbox" position="50,140" size="750,400" scrollbarMode="showOnDemand" selectionDisabled="1">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (50, 0), size = (250, 26), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (50, 27), size = (640, 23), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
++ MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (0, 48), size = (750, 2), png = 3), # index 3 is the div pixmap
++ ],
++ "fonts": [gFont("Regular", 24),gFont("Regular", 22)],
++ "itemHeight": 50
++ }
++ </convert>
++ </widget>
++ <widget source="status" render="Label" position="50,560" zPosition="10" size="750,44" halign="center" valign="center" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" font="Regular;22" transparent="1" />
++ </screen>
++ <screen name="PluginManagerHelp" position="209,48" size="865,623" title="Plugin manager help" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Plugin manager help" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="list" render="Listbox" position="80,140" size="700,400" scrollbarMode="showOnDemand" selectionDisabled="1">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (50, 0), size = (540, 26), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (50, 27), size = (540, 23), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the state
++ MultiContentEntryPixmapAlphaTest(pos = (0, 1), size = (48, 48), png = 2), # index 2 is the status pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (0, 48), size = (550, 2), png = 3), # index 3 is the div pixmap
++ ],
++ "fonts": [gFont("Regular", 24),gFont("Regular", 22)],
++ "itemHeight": 50
++ }
++ </convert>
++ </widget>
++ <ePixmap pixmap="Vu_HD/div-h.png" position="70,550" zPosition="10" size="720,2" transparent="1" alphatest="on" />
++ <widget source="status" render="Label" position="50,560" zPosition="10" size="750,44" halign="center" valign="center" font="Regular;22" backgroundColor="#27aeaeae" transparent="1" />
++ </screen>
++ <screen name="PluginDetails" position="209,48" size="865,623" title="Plugin details" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Plugin details" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="author" render="Label" position="60,140" size="700,25" zPosition="10" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" font="Regular;21" transparent="1" />
++ <widget name="statuspic" position="770,130" size="48,48" alphatest="on"/>
++ <widget name="divpic" position="60,190" size="740,2" alphatest="on"/>
++ <widget name="detailtext" position="70,200" size="400,400" zPosition="10" font="Regular;21" foregroundColor="#3c3c3c" backgroundColor="#27aeaeae" transparent="1" halign="left" valign="top"/>
++ <widget name="screenshot" position="490,230" size="300,330" alphatest="on"/>
++ </screen>
++ <screen name="UpdatePlugin" position="209,48" size="865,623" title="Software update" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Software update" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget name="activityslider" position="60,140" size="720,5" />
++ <widget source="package" render="Label" position="70,160" size="700,20" font="Regular;18" halign="center" valign="center" backgroundColor="darkgrey" transparent="1" />
++ <widget source="status" render="Label" position="70,190" size="700,45" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" transparent="1" />
++ <widget name="slider" position="70,250" size="700,30" />
++ </screen>
++ <screen name="IPKGMenu" position="209,48" size="865,623" title="Select upgrade source to edit." flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Select upgrade source to edit." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="filelist" position="50,140" size="750,440" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="IPKGSource" position="209,48" size="865,623" title="Edit upgrade source url." flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Edit upgrade source url." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="text" position="50,150" size="750,25" font="Regular;20" backgroundColor="background" foregroundColor="#cccccc" />
++ </screen>
++ <screen name="PacketManager" position="209,48" size="865,623" title="Packet manager" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Packet manager" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="list" render="Listbox" position="50,150" size="750,416" scrollbarMode="showOnDemand">
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (5, 1), size = (640, 28), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (5, 26), size = (640, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
++ MultiContentEntryPixmapAlphaTest(pos = (645, 2), size = (48, 48), png = 4), # index 4 is the status pixmap
++ MultiContentEntryPixmapAlphaTest(pos = (5, 50), size = (740, 2), png = 5), # index 4 is the div pixmap
++ ],
++ "fonts": [gFont("Regular", 22),gFont("Regular", 14)],
++ "itemHeight": 52
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="IpkgInstaller" position="209,48" size="865,623" title="Install extensions" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Plugin.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Install extensions" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="list" position="50,150" size="750,350" />
++ <ePixmap pixmap="Vu_HD/div-h.png" position="50,520" zPosition="10" size="750,2" transparent="1" alphatest="on" />
++ <widget source="introduction" render="Label" position="50,540" zPosition="10" size="750,30" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <screen name="VideoWizard" position="0,0" size="1280,720" title="Welcome..." flags="wfNoBorder" >
++ <widget name="text" position="400,100" size="550,270" font="Regular;23" />
++ <widget source="list" render="Listbox" transparent="1" position="300,400" size="500,300" scrollbarMode="showOnDemand" >
++ <convert type="StringList" />
++ </widget>
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="150,250" size="25,25" alphatest="blend" />
++ <widget name="languagetext" position="200,253" size="120,30" font="Regular;18" />
++ <widget name="config" position="300,400" zPosition="1" size="500,300" transparent="1" scrollbarMode="showOnDemand" />
++ <widget name="portpic" position="100,400" zPosition="10" size="150,150" transparent="1" alphatest="on"/>
++ <widget name="rc" pixmap="Vu_HD/rc.png" position="950,150" zPosition="10" size="154,500" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowdown2" pixmap="Vu_HD/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ <widget name="arrowup2" pixmap="Vu_HD/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="blend"/>
++ </screen>
++ <!-- FileBrowser -->
++ <screen name="FilebrowserScreen" position="0,0" size="1280,720" title="" flags="wfNoBorder">
++ <widget source="global.CurrentTime" render="Label" position="1130,40" size="80,26" font="Regular;26" halign="right" transparent="1">
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="1000,72" size="210,22" font="Regular;20" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%d.%m.%Y</convert>
++ </widget>
++ <eLabel text="Filebrowser" position=" 80,110" size="1120,35" zPosition="3" font="Regular;32" foregroundColor="#3c3c3c" halign="center" transparent="1" />
++ <eLabel position=" 80,150" size="1120,2" backgroundColor="black" zPosition="5" />
++ <eLabel position=" 80,152" size="1120,2" zPosition="5" />
++ <widget name="list_left" position=" 90,167" size="540,437" scrollbarMode="showOnDemand" transparent="1" />
++ <eLabel position="638,155" size="1,460" backgroundColor="black" zPosition="5" />
++ <eLabel position="639,155" size="2,460" zPosition="5" />
++ <widget name="list_right" position="650,167" size="540,437" scrollbarMode="showOnDemand" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="100,643" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="390,643" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="680,643" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="970,643" size="25,25" alphatest="blend" />
++ <widget name="red" position="150,645" size="220,30" font="Regular;24" foregroundColor="#3c3c3c" halign="left" transparent="1" />
++ <widget name="green" position="440,645" size="220,30" font="Regular;24" foregroundColor="#3c3c3c" halign="left" transparent="1" />
++ <widget name="yellow" position="730,645" size="220,30" font="Regular;24" foregroundColor="#3c3c3c" halign="left" transparent="1" />
++ <widget name="blue" position="1020,645" size="220,30" font="Regular;24" foregroundColor="#3c3c3c" halign="left" transparent="1" />
++ </screen>
++ <screen name="FilebrowserConfigScreen" position="0,0" size="1280,720" title="" flags="wfNoBorder">
++ <widget source="global.CurrentTime" render="Label" position="1130,40" size="80,26" font="Regular;26" halign="right" transparent="1">
++ <convert type="ClockToText">Default</convert>
++ </widget>
++ <widget source="global.CurrentTime" render="Label" position="1000,72" size="210,22" font="Regular;20" halign="right" transparent="1">
++ <convert type="ClockToText">Format:%d.%m.%Y</convert>
++ </widget>
++ <widget source="session.VideoPicture" render="Pig" position="75,115" size="380,215" zPosition="3" backgroundColor="#ff000000" />
++ <eLabel text="FilebrowserConfigScreen" position="510,110" size="700,35" zPosition="3" font="Regular;32" foregroundColor="#3c3c3c" transparent="1" />
++ <eLabel position="500,150" size="730,2" backgroundColor="black" zPosition="5" />
++ <eLabel position="500,152" size="730,2" zPosition="5" />
++ <widget name="config" position="510,175" size="660,450" zPosition="3" scrollbarMode="showOnDemand" transparent="1" />
++ <eLabel position="476,110" size="1,500" backgroundColor="black" zPosition="5" />
++ <eLabel position="477,110" size="2,500" zPosition="5" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="100,643" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="390,643" size="25,25" alphatest="blend" />
++ <widget name="buttonred" position="150,645" size="220,30" font="Regular;24" foregroundColor="#3c3c3c" halign="left" transparent="1" />
++ <widget name="buttongreen" position="440,645" size="220,30" font="Regular;24" foregroundColor="#3c3c3c" halign="left" transparent="1" />
++ </screen>
++ <screen name="VideoFinetune" position="0,0" size="1280,720" backgroundColor="black">
++ <widget source="Canvas" render="Canvas" position="280,70" size="720,576" />
++ </screen>
++ <screen name="RecordPathsSettings" position="209,48" size="865,623" title="Recording paths" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Recording paths" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/button_off.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="config" position="50,130" itemHeight="36" size="750,300" backgroundColor="#27d9dee2" transparent="1"/>
++ </screen>
++ <screen name="SecParameterSetup" position="209,48" size="865,623" title="Satellite Equipment Setup" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Satellite Equipment Setup" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <widget name="config" position="130,140" size="600,450" transparent="1"/>
++ </screen>
++ <screen name="SatNimSelection" position="100,80" size="520,538" title="Subtitle selection" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_Subtitle.png" position="0,0" size="520,538" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="16,36" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="select Slot" position="69,45" size="400,32" font="Semiboldit;32" foregroundColor="#4c4c4c" backgroundColor="#b5b9bd" transparent="1" />
++ <widget name="nimlist" position="15,83" itemHeight="42" selectionPixmap="Vu_HD/buttons/FocusBar_H42.png" transparent="1" zPosition="1" size="490,420" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="RotorNimSelection" position="100,80" size="520,538" title="Subtitle selection" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_Subtitle.png" position="0,0" size="520,538" zPosition="-1" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="16,36" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="select Slot" position="69,45" size="400,32" font="Semiboldit;32" foregroundColor="#4c4c4c" backgroundColor="#b5b9bd" transparent="1" />
++ <widget name="nimlist" position="15,83" itemHeight="42" selectionPixmap="Vu_HD/buttons/FocusBar_H42.png" transparent="1" zPosition="1" size="490,420" scrollbarMode="showOnDemand" />
++ </screen>
++ <screen name="PositionerSetup" position="209,48" size="865,623" title="Positioner setup..." flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Positioner setup..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget name="red" position="83,97" size="150,25" backgroundColor="darkgrey" halign="center" valign="center" font="Regular;20" transparent="1"/>
++ <widget name="green" position="278,97" size="150,25" backgroundColor="darkgrey" halign="center" valign="center" font="Regular;20" transparent="1"/>
++ <widget name="yellow" position="473,97" size="150,25" backgroundColor="darkgrey" halign="center" valign="center" font="Regular;20" transparent="1"/>
++ <widget name="blue" position="668,97" size="150,25" backgroundColor="darkgrey" halign="center" valign="center" font="Regular;20" transparent="1"/>
++
++ <widget name="list" position="200,160" size="450,155" backgroundColor="#27d9dee2" transparent="1"/>
++
++ <widget name="snr_db" position="210,355" size="150,22" halign="center" valign="center" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <eLabel text="SNR:" position="150,380" size="60,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <eLabel text="BER:" position="150,405" size="60,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <eLabel text="Lock:" position="150,430" size="60,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="snr_percentage" position="370,380" size="60,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="ber_value" position="370,405" size="60,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="lock_state" position="210,430" size="150,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="snr_bar" position="210,380" size="150,22" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="ber_bar" position="210,405" size="150,22" backgroundColor="#27d9dee2" transparent="1"/>
++
++ <eLabel text="Frequency:" position="450,355" size="120,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <eLabel text="Symbolrate:" position="450,380" size="120,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <eLabel text="FEC:" position="450,405" size="120,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="frequency_value" position="570,355" size="120,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="symbolrate_value" position="570,380" size="120,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ <widget name="fec_value" position="570,405" size="120,22" font="Regular;21" backgroundColor="#27d9dee2" transparent="1"/>
++ </screen>
++ <screen name="VideoEnhancementSetup" position="209,48" size="865,623" title="VideoEnhancementSetup" flags="wfNoBorder" backgroundColor="transparent">
++ <ePixmap pixmap="Vu_HD/Bg_EPG_list.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend" transparent="1" />
++ <eLabel text="Video enhancement setup" position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="435,98" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="86,97" zPosition="1" size="150,25" font="Regular;20" halign="left" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="278,97" zPosition="1" size="150,25" font="Regular;20" halign="left" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_yellow" render="Label" position="473,97" zPosition="1" size="150,25" font="Regular;20" halign="left" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_blue" render="Label" position="668,97" zPosition="1" size="150,25" font="Regular;20" halign="left" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="config" position="50,133" itemHeight="36" size="750,360" selectionPixmap="Vu_HD/buttons/FocusBar_H36.png" transparent="1"/>
++ <eLabel text=" " position="50,527" size="750,2" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#5c5c5c" />
++ <widget source="introduction" render="Label" position="50,530" size="750,30" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#27b5b9bd" transparent="1" />
++ </screen>
++ <screen name="VideoEnhancementPreview" position="center,360" size="560,170" title="VideoEnhancementPreview">
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,10" size="25,25" alphatest="blend" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="280,10" size="25,25" alphatest="blend" />
++ <widget source="key_red" render="Label" position="35,10" zPosition="1" size="140,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget source="key_green" render="Label" position="315,10" zPosition="1" size="140,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
++ <widget name="config" position="5,50" size="550,80" scrollbarMode="showOnDemand" />
++ <eLabel text=" " position="0,130" size="560,2" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#5c5c5c" />
++ <widget source="introduction" render="Label" position="0,140" size="550,25" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#27b5b9bd" transparent="1" />
++ </screen>
++ <screen name="MyTubePlayerMainScreen" flags="wfNoBorder" position="280,70" size="720,576" title="MyTubePlayerMainScreen..." >
++ <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
++ <widget name="config" zPosition="2" position="60,60" size="600,50" scrollbarMode="showNever" transparent="1" />
++ <widget source="feedlist" render="Listbox" position="49,110" size="628,385" zPosition="1" scrollbarMode="showOnDemand" backgroundColorSelected="#5c8cac" transparent="1" backgroundPixmap="~/list_bg.png" selectionPixmap="~/list_sel.png" >
++ <convert type="TemplatedMultiContent">
++ {"templates":
++ {"default": (77,[
++ MultiContentEntryPixmapAlphaTest(pos = (0, 0), size = (100, 75), png = 4), # index 4 is the thumbnail
++ MultiContentEntryText(pos = (100, 1), size = (500, 22), font=0, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP| RT_WRAP, text = 1), # index 1 is the Title
++ MultiContentEntryText(pos = (100, 24), size = (300, 18), font=1, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP| RT_WRAP, text = 5), # index 5 is the Published Date
++ MultiContentEntryText(pos = (100, 43), size = (300, 18), font=1, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP| RT_WRAP, text = 6), # index 6 is the Views Count
++ MultiContentEntryText(pos = (400, 24), size = (200, 18), font=1, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP| RT_WRAP, text = 7), # index 7 is the duration
++ MultiContentEntryText(pos = (400, 43), size = (200, 18), font=1, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP| RT_WRAP, text = 8), # index 8 is the ratingcount
++ ]),
++ "state": (77,[
++ MultiContentEntryText(pos = (10, 1), size = (560, 28), font=2, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP| RT_WRAP, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (10, 22), size = (560, 46), font=3, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP| RT_WRAP, text = 1), # index 2 is the description
++ ])
++ },
++ "fonts": [gFont("Regular", 22),gFont("Regular", 18),gFont("Regular", 26),gFont("Regular", 20)],
++ "itemHeight": 77
++ }
++ </convert>
++ </widget>
++
++ <ePixmap pixmap="skin_default/buttons/key_info.png" position="50,500" zPosition="4" size="35,25" alphatest="on" transparent="1" />
++ <ePixmap pixmap="skin_default/buttons/key_menu.png" position="50,520" zPosition="4" size="35,25" alphatest="on" transparent="1" />
++ <ePixmap position="90,500" size="100,40" zPosition="4" pixmap="~/plugin.png" alphatest="on" transparent="1" />
++ <ePixmap position="190,500" zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
++ <ePixmap position="330,500" zPosition="4" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
++ <ePixmap position="470,500" zPosition="4" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
++ <widget name="key_red" position="190,500" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="key_green" position="330,500" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="key_yellow" position="470,500" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="ButtonBlue" pixmap="skin_default/buttons/button_blue.png" position="610,510" zPosition="10" size="15,16" transparent="1" alphatest="on" />
++ <widget name="VKeyIcon" pixmap="skin_default/vkey_icon.png" position="620,495" zPosition="10" size="60,48" transparent="1" alphatest="on" />
++ <widget name="thumbnail" position="0,0" size="100,75" alphatest="on"/> # fake entry for dynamic thumbnail resizing, currently there is no other way doing this.
++ <widget name="HelpWindow" position="340,325" zPosition="1" size="1,1" transparent="1" alphatest="on" />
++ </screen>
++ <screen name="MyTubeVideoInfoScreen" flags="wfNoBorder" position="center,center" size="720,576" title="MyTubePlayerMainScreen..." >
++ <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
++ <widget name="title" position="60,50" size="600,50" zPosition="5" valign="center" halign="left" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="starsbg" pixmap="~/starsbar_empty.png" position="560,220" zPosition="5" size="100,20" transparent="1" alphatest="on" />
++ <widget name="stars" pixmap="~/starsbar_filled.png" position="560,220" zPosition="6" size="100,20" transparent="1" />
++ <widget source="infolist" render="Listbox" position="50,110" size="620,110" zPosition="6" scrollbarMode="showNever" foregroundColor="white" backgroundColor="#1c3c5c" selectionDisabled="1" transparent="1">
++ <convert type="TemplatedMultiContent">
++ {"templates":
++ {"default": (110,[
++ MultiContentEntryPixmapAlphaTest(pos = (0, 4), size = (130, 98), png = 0), # index 0 is the thumbnail
++ MultiContentEntryPixmapAlphaTest(pos = (130, 4), size = (130, 98), png = 1), # index 0 is the thumbnail
++ MultiContentEntryPixmapAlphaTest(pos = (260, 4), size = (130, 98), png = 2), # index 0 is the thumbnail
++ MultiContentEntryPixmapAlphaTest(pos = (390, 4), size = (130, 98), png = 3), # index 0 is the thumbnail
++ ]),
++ "state": (110,[
++ MultiContentEntryText(pos = (10, 40), size = (550, 38), font=2, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP| RT_WRAP, text = 0), # index 0 is the name
++ ])
++ },
++ "fonts": [gFont("Regular", 20),gFont("Regular", 14),gFont("Regular", 28)],
++ "itemHeight": 110
++ }
++ </convert>
++ </widget>
++ <widget name="author" position="60,220" size="300,20" zPosition="10" font="Regular;21" transparent="1" foregroundColor="white" backgroundColor="#1c3c5c" halign="left" valign="top" />
++ <widget name="duration" position="370,220" size="200,20" zPosition="10" font="Regular;21" transparent="1" foregroundColor="white" backgroundColor="#1c3c5c" halign="left" valign="top" />
++ <widget name="published" position="60,245" size="300,20" zPosition="10" font="Regular;21" transparent="1" foregroundColor="white" backgroundColor="#1c3c5c" halign="left" valign="top" />
++ <widget name="views" position="370,245" size="200,20" zPosition="10" font="Regular;21" transparent="1" foregroundColor="white" backgroundColor="#1c3c5c" halign="left" valign="top" />
++ <widget name="tags" position="60,270" size="600,20" zPosition="10" font="Regular;21" transparent="1" foregroundColor="white" backgroundColor="#1c3c5c" halign="left" valign="top" />
++ <widget name="detailtext" position="60,300" size="610,200" zPosition="10" font="Regular;21" transparent="1" foregroundColor="white" backgroundColor="#1c3c5c" halign="left" valign="top"/>
++ <ePixmap position="100,500" size="100,40" zPosition="0" pixmap="~/plugin.png" alphatest="on" transparent="1" />
++ <ePixmap position="220,500" zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
++ <widget name="key_red" position="220,500" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="thumbnail" position="0,0" size="130,98" alphatest="on"/>
++ </screen>
++ <screen name="MyTubeVideoHelpScreen" flags="wfNoBorder" position="center,center" size="720,576" title="MyTubePlayerMainScreen..." >
++ <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
++ <widget name="title" position="60,50" size="600,50" zPosition="5" valign="center" halign="left" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
++ <widget name="detailtext" position="60,120" size="610,370" zPosition="10" font="Regular;21" foregroundColor="white" backgroundColor="#1c3c5c" transparent="1" halign="left" valign="top"/>
++ <ePixmap position="100,500" size="100,40" zPosition="0" pixmap="~/plugin.png" alphatest="on" transparent="1" />
++ <ePixmap position="220,500" zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
++ <widget name="key_red" position="220,500" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
++ </screen>
++ <screen name="MyTubePlayer" flags="wfNoBorder" position="center,550" size="720,160" title="InfoBar" backgroundColor="transparent">
++ <ePixmap position="0,0" pixmap="skin_default/info-bg_mp.png" zPosition="-1" size="720,160" />
++ <ePixmap position="29,40" pixmap="skin_default/screws_mp.png" size="665,104" alphatest="on" />
++ <ePixmap position="48,70" pixmap="skin_default/icons/mp_buttons.png" size="108,13" alphatest="on" />
++ <ePixmap pixmap="skin_default/icons/icon_event.png" position="207,78" size="15,10" alphatest="on" />
++ <widget source="session.CurrentService" render="Label" position="230,73" size="360,40" font="Regular;20" foregroundColor="#ececec" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ServiceName">Name</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Label" position="580,73" size="90,24" font="Regular;20" foregroundColor="#ececec" halign="right" backgroundColor="#4e5a74" transparent="1">
++ <convert type="ServicePosition">Length</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Label" position="205,129" size="100,20" font="Regular;18" foregroundColor="#ececec" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ServicePosition">Position</convert>
++ </widget>
++ <widget source="session.CurrentService" render="PositionGauge" position="300,133" size="270,10" zPosition="2" pointer="skin_default/position_pointer.png:540,0" transparent="1" foregroundColor="#20224f">
++ <convert type="ServicePosition">Gauge</convert>
++ </widget>
++ <widget source="session.CurrentService" render="Label" position="576,129" size="100,20" font="Regular;18" foregroundColor="#ececec" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1">
++ <convert type="ServicePosition">Remaining</convert>
++ </widget>
++ </screen>
++ <screen name="MyTubeSuggestionsListScreen" position="340,163" zPosition="6" size="610,160" flags="wfNoBorder" >
++ <ePixmap position="0,0" zPosition="-1" size="610,160" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MyTube/suggestions_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
++ <widget source="suggestionslist" render="Listbox" position="10,5" zPosition="7" size="580,150" scrollbarMode="showOnDemand" transparent="1" foregroundColor="#cccccc" backgroundColor="#1c3c5c" >
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (0, 1), size = (340, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ MultiContentEntryText(pos = (350, 1), size = (180, 24), font=1, flags = RT_HALIGN_RIGHT, text = 1), # index 1 are the rtesults
++ ],
++ "fonts": [gFont("Regular", 22),gFont("Regular", 18)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="MyTubeHistoryScreen" position="340,163" zPosition="6" size="610,160" flags="wfNoBorder" >
++ <ePixmap position="0,0" zPosition="-1" size="610,160" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MyTube/suggestions_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
++ <widget source="historylist" render="Listbox" position="10,5" zPosition="7" size="580,150" scrollbarMode="showOnDemand" transparent="1" foregroundColor="#cccccc" backgroundColor="#1c3c5c" >
++ <convert type="TemplatedMultiContent">
++ {"template": [
++ MultiContentEntryText(pos = (0, 1), size = (340, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
++ ],
++ "fonts": [gFont("Regular", 22),gFont("Regular", 18)],
++ "itemHeight": 25
++ }
++ </convert>
++ </widget>
++ </screen>
++ <screen name="FactoryTest" position="300,100" size="660,550" title="Test Menu" >
++ <widget name="testlist" position="10,0" size="440,455" itemHeight="35" />
++ <widget name="resultlist" position="470,0" size="60,455" itemHeight="35" />
++ <widget name="testdate" position="20,470" size="250,35" font="Regular;30" />
++ <widget name="testversion" position="20,505" size="250,35" font="Regular;30" />
++ <widget name="mactext" position="320,470" size="340,35" font="Regular;30" />
++ </screen>
++ <screen name="MacConfig" position="center,center" size="520,100" title="Mac Config" >
++ <eLabel text="Mac Address " position="10,15" size="200,40" font="Regular;30" />
++ <widget name="text" position="230,15" size="230,40" font="Regular;30" halign="right"/>
++ <widget name="text1" position="470,15" size="40,40" font="Regular;30" />
++ <eLabel text=" " position="5,55" zPosition="-1" size="510,5" backgroundColor="#02e1e8e6" />
++ <widget name="stattext" position="30,75" size="450,35" font="Regular;30" />
++ </screen>
++ <screen name="ScCiTest" position="center,center" size="440,200" title="CI Smartcard Test" >
++ <widget name="testlist" position="10,0" size="340,120" />
++ <widget name="resultlist" position="370,0" size="60,120" />
++ <eLabel text=" " position="5,125" zPosition="-1" size="430,5" backgroundColor="#02e1e8e6" />
++ <widget name="text" position="10,140" size="420,50" font="Regular;25" />
++ </screen>
++ <screen name="SmartCardTest" position="center,center" size="300,120" title="SmartCard Test" >
++ <widget name="text" position="10,10" size="280,100" font="Regular;30" />
++ </screen>
++ <screen name="FrontTest" position="center,center" size="300,180" title="Front Test" >
++ <widget name="text" position="10,10" size="280,160" font="Regular;30" />
++ </screen>
++ <screen name="FrontTest_solo" position="center,center" size="300,180" title="Front Test" >
++ <widget name="text" position="10,10" size="280,160" font="Regular;30" />
++ </screen>
++ <screen name="RS232Test" position="center,center" size="260,100" title="RS232 Test" >
++ <widget name="text" position="10,10" size="240,80" font="Regular;30" />
++ </screen>
++ <screen name="AgingTest" position="center,center" size="350,150" title="Aging Test" >
++ <widget name="text1" position="10,10" size="330,40" font="Regular;30" />
++ <widget name="text2" position="10,60" size="330,40" font="Regular;30" />
++ </screen>
++ <screen name="FancontrolConfiguration" position="center,center" size="560,300" title="Standbymode Fancontrol settings" >
++ <ePixmap pixmap="Vu_HD/buttons/red.png" position="10,10" size="25,25" alphatest="on" />
++ <ePixmap pixmap="Vu_HD/buttons/green.png" position="290,10" size="25,25" alphatest="on" />
++ <widget source="key_red" render="Label" position="40,10" zPosition="1" size="140,25" font="Regular;20" halign="center" valign="center" transparent="1" />
++ <widget source="key_green" render="Label" position="320,10" zPosition="1" size="140,25" font="Regular;20" halign="center" valign="center" transparent="1" />
++ <widget name="config" zPosition="2" position="5,50" size="550,200" scrollbarMode="showOnDemand" transparent="1" />
++ </screen>
++</skin>
+diff --git a/data/fonts/Makefile.am b/data/fonts/Makefile.am
+index f743b8c..87650c8 100644
+--- a/data/fonts/Makefile.am
++++ b/data/fonts/Makefile.am
+@@ -4,4 +4,8 @@ dist_install_DATA = \
+ ae_AlMateen.ttf \
+ lcd.ttf \
+ md_khmurabi_10.ttf \
+- nmsbd.ttf
++ nmsbd.ttf \
++ MyriadPro-Regular.otf \
++ MyriadPro-Semibold.otf \
++ MyriadPro-SemiboldIt.otf
++
+diff --git a/data/skin.xml b/data/skin.xml
+index cde03f4..77c5f64 100755
+--- a/data/skin.xml
++++ b/data/skin.xml
+@@ -179,11 +179,10 @@
+ <convert type="ConditionalShowHide" />
+ </widget>
+ <!-- Audio icon (is there multichannel audio?) -->
+-<!-- ikseong
+ <widget source="session.CurrentService" render="Pixmap" pixmap="skin_default/icons/icon_dolby.png" position="645,48" zPosition="1" size="26,16" alphatest="on">
+ <convert type="ServiceInfo">IsMultichannel</convert>
+ <convert type="ConditionalShowHide" />
+- </widget> -->
++ </widget>
+ <!-- Progressbar (current event duration)-->
+ <ePixmap pixmap="skin_default/progress_bg.png" position="48,77" size="84,7" transparent="1" alphatest="on" />
+ <widget source="session.Event_Now" render="Progress" pixmap="skin_default/progress_small.png" position="50,78" zPosition="1" size="80,5" transparent="1">
+diff --git a/lib/gdi/epng.cpp b/lib/gdi/epng.cpp
+index 972a89d..2629ef8 100644
+--- a/lib/gdi/epng.cpp
++++ b/lib/gdi/epng.cpp
+@@ -115,10 +115,71 @@ int loadPNG(ePtr<gPixmap> &result, const char *filename)
+ }
+ surface->clut.start=0;
+ png_read_end(png_ptr, end_info);
++#ifndef BUILD_VUPLUS
+ } else {
+ result=0;
+ eDebug("%s: %dx%dx%d png, %d", filename, (int)width, (int)height, (int)bit_depth, color_type);
+ }
++#else //csh Support for 32bit png file.
++ }else if (color_type == PNG_COLOR_TYPE_RGB_ALPHA && bit_depth == 8){
++// eDebug("%s: %dx%dx%d png, %d", filename, (int)width, (int)height, (int)bit_depth, color_type);
++ result=new gPixmap(eSize(width, height), bit_depth*4);
++ gSurface *surface = result->surface;
++ int pass;
++ png_bytep *rowptr=new png_bytep[height];
++
++
++ //png_set_swap_alpha(png_ptr);
++
++ if (color_type & PNG_COLOR_MASK_COLOR)
++ png_set_bgr(png_ptr);
++
++
++
++ int number_passes = png_set_interlace_handling(png_ptr);
++
++ for (unsigned int i=0; i<height; i++)
++ rowptr[i]=((png_byte*)(surface->data))+i*surface->stride;
++
++ for (pass = 0; pass < number_passes; pass++)
++ for (int y = 0; y < height; y++)
++ {
++ png_read_rows(png_ptr, &rowptr[y], png_bytepp_NULL, 1);
++ }
++
++/*
++ png_bytep testptr = rowptr[32] + sizeof(unsigned int)*32;
++
++ for(int i = 0 ; i < 40 ; i ++)
++ fprintf(stderr, "0x%x\n", testptr[i]);
++*/
++ for (int y = 0; y < height; y++){ //csh
++ __u32 col;
++ unsigned int *ptr = (unsigned int *)rowptr[y];
++ for(int i = 0 ; i < width ; i ++){
++ col= ptr[i];
++ col ^=0xFF000000;
++ ptr[i] = col;
++ }
++ }
++
++ surface->clut.data=0;
++ surface->clut.colors=0;
++ surface->clut.start=0;
++/*
++ testptr = rowptr[32] + sizeof(unsigned int)*32;
++ fprintf(stderr, "----------------------------------------------\n");
++ for(int i = 0 ; i < 40 ; i ++)
++ fprintf(stderr, "0x%x\n", testptr[i]);
++*/
++ delete [] rowptr;
++ png_read_end(png_ptr, end_info);
++
++ } else {
++ result=0;
++ eDebug("%s: %dx%dx%d png, %d", filename, (int)width, (int)height, (int)bit_depth, color_type);
++ }
++#endif
+
+ png_destroy_read_struct(&png_ptr, &info_ptr,&end_info);
+ fclose(fp);
+diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py
+index 7ddbcbf..46f96a9 100755
+--- a/lib/python/Screens/ChannelSelection.py
++++ b/lib/python/Screens/ChannelSelection.py
+@@ -2,6 +2,8 @@ from Tools.Profile import profile
+
+ from Screen import Screen
+ from Components.Button import Button
++# ikseong
++from Components.Label import Label
+ from Components.ServiceList import ServiceList
+ from Components.ActionMap import NumberActionMap, ActionMap, HelpableActionMap
+ from Components.MenuList import MenuList
+@@ -703,6 +705,9 @@ class ChannelSelectionBase(Screen):
+ self["key_yellow"] = Button(_("Provider"))
+ self["key_blue"] = Button(_("Favourites"))
+
++ # ikseong
++ self["etitle"] = Label(_('Channel Selection'))
++
+ self["list"] = ServiceList()
+ self.servicelist = self["list"]
+
+@@ -848,25 +853,51 @@ class ChannelSelectionBase(Screen):
+ pos = titleStr.find(']')
+ if pos == -1:
+ pos = titleStr.find(')')
+- if pos != -1:
+- titleStr = titleStr[:pos+1]
+- Len = len(self.servicePath)
+- if Len > 0:
+- base_ref = self.servicePath[0]
+- if Len > 1:
+- end_ref = self.servicePath[Len-1]
+- else:
+- end_ref = None
+- nameStr = self.getServiceName(base_ref)
+- titleStr += ' ' + nameStr
+- if end_ref is not None:
+- if Len > 2:
+- titleStr += '/../'
++ # ikseong
++ if config.skin.primary_skin.value =="750S/skin.xml":
++ if pos != -1:
++ titleStr = titleStr[:pos+1]
++ Len = len(self.servicePath)
++ if Len > 0:
++ base_ref = self.servicePath[0]
++ if Len > 1:
++ end_ref = self.servicePath[Len-1]
+ else:
+- titleStr += '/'
+- nameStr = self.getServiceName(end_ref)
+- titleStr += nameStr
+- self.setTitle(titleStr)
++ end_ref = None
++ nameStr = self.getServiceName(base_ref)
++ if end_ref is not None:
++ titles = ".../"+ nameStr
++ if Len > 2:
++ titles += '/../'
++ else:
++ titles += '/'
++ nameStr = self.getServiceName(end_ref)
++ titles += nameStr
++ self["etitle"].setText(titles)
++ else:
++ titles = "Channel Selection "+titleStr + ' ' + nameStr
++ self["etitle"].setText(titles)
++ else:
++ #
++ if pos != -1:
++ titleStr = titleStr[:pos+1]
++ Len = len(self.servicePath)
++ if Len > 0:
++ base_ref = self.servicePath[0]
++ if Len > 1:
++ end_ref = self.servicePath[Len-1]
++ else:
++ end_ref = None
++ nameStr = self.getServiceName(base_ref)
++ titleStr += ' ' + nameStr
++ if end_ref is not None:
++ if Len > 2:
++ titleStr += '/../'
++ else:
++ titleStr += '/'
++ nameStr = self.getServiceName(end_ref)
++ titleStr += nameStr
++ self.setTitle(titleStr)
+
+ def moveUp(self):
+ self.servicelist.moveUp()
+diff --git a/lib/python/Screens/FixedMenu.py b/lib/python/Screens/FixedMenu.py
+index 0122346..add611b 100644
+--- a/lib/python/Screens/FixedMenu.py
++++ b/lib/python/Screens/FixedMenu.py
+@@ -20,3 +20,10 @@ class FixedMenu(Screen):
+ })
+
+ self["title"] = StaticText(title)
++ # ikseong
++ self["thistory"] = StaticText(title)
++ self["title0"] = StaticText('')
++ self["title1"] = StaticText('')
++ self["title2"] = StaticText('')
++ #
++
+diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py
+index 2a8801c..20403d8 100755
+--- a/lib/python/Screens/Menu.py
++++ b/lib/python/Screens/Menu.py
+@@ -22,6 +22,28 @@ from Screens.Setup import Setup, getSetupTitle
+ # read the menu
+ mdom = xml.etree.cElementTree.parse(resolveFilename(SCOPE_SKIN, 'menu.xml'))
+
++# ikseong make menu title
++class title_History:
++ def __init__(self):
++ self.thistory = ''
++ def reset(self):
++ self.thistory = ''
++ def reducehistory(self):
++# print "reducehistory" , self.thistory
++ history_len = len(self.thistory.split('>'))
++ if(history_len < 3):
++ self.reset()
++ return
++ if(self.thistory == ''):
++ return
++ result = self.thistory.rsplit('>',2)
++ if(result[0] == ''):
++ self.reset()
++ return
++ self.thistory = result[0] + '> '
++
++t_history = title_History()
++#
+ class boundFunction:
+ def __init__(self, fnc, *args):
+ self.fnc = fnc
+@@ -237,9 +259,41 @@ class Menu(Screen):
+ a = a and _(a)
+ if a is None:
+ a = _(parent.get("text", "").encode("UTF-8"))
++ # ikseong - enter Main menu
++ else:
++ t_history.reset()
++
+ self["title"] = StaticText(a)
+ self.menu_title = a
+
++ # ikseong make menu title
++ self["thistory"] = StaticText(t_history.thistory)
++ history_len = len(t_history.thistory)
++ self["title0"] = StaticText('')
++ self["title1"] = StaticText('')
++ self["title2"] = StaticText('')
++ if history_len < 13 :
++ self["title0"] = StaticText(a)
++ elif history_len < 21 :
++ self["title0"] = StaticText('')
++ self["title1"] = StaticText(a)
++ else:
++ self["title0"] = StaticText('')
++ self["title1"] = StaticText('')
++ self["title2"] = StaticText(a)
++
++# english title
++# if(t_history.thistory ==''):
++# t_history.thistory = str(etitle) + ' > '
++# else:
++# t_history.thistory = t_history.thistory + str(etitle) + ' > '
++
++ if(t_history.thistory ==''):
++ t_history.thistory = str(a) + ' > '
++ else:
++ t_history.thistory = t_history.thistory + str(a) + ' > '
++ #
++
+ def keyNumberGlobal(self, number):
+ print "menu keyNumber:", number
+ # Calculate index
+@@ -250,9 +304,15 @@ class Menu(Screen):
+ self.okbuttonClick()
+
+ def closeNonRecursive(self):
++ # ikseong for menu title
++ t_history.reducehistory()
++ #
+ self.close(False)
+
+ def closeRecursive(self):
++ # ikseong for menu title
++ t_history.reset()
++ #
+ self.close(True)
+
+ def createSummary(self):
+diff --git a/skin.py b/skin.py
+index b490f73..bbd9ddd 100755
+--- a/skin.py
++++ b/skin.py
+@@ -50,7 +50,7 @@ def loadSkin(name, scope = SCOPE_SKIN):
+
+ # example: loadSkin("nemesis_greenline/skin.xml")
+ config.skin = ConfigSubsection()
+-config.skin.primary_skin = ConfigText(default = "skin.xml")
++config.skin.primary_skin = ConfigText(default = "Vu_HD/skin.xml")
+
+ profile("LoadSkin")
+ try:
+@@ -133,6 +133,36 @@ def loadPixmap(path, desktop):
+ raise SkinError("pixmap file %s not found!" % (path))
+ return ptr
+
++# ikseong
++from enigma import runMainloop, eDVBDB, eTimer, quitMainloop, \
++ getDesktop, ePythonConfigQuery, eAVSwitch, eServiceEvent
++pngcache = []
++def cachemenu():
++ pixmaplist = []
++ for (path, skin) in dom_skins:
++ for x in skin.findall("screen"):
++ if x.attrib.get('name') == 'menu_mainmenu':
++ print x.attrib.get('name')
++ for s in x.findall("ePixmap"):
++ if s.attrib.get('pixmap','') is not '':
++ pixmaplist.append(s.attrib.get('pixmap',''))
++ for s in x.findall('widget'):
++ if s.attrib.get('pixmap','') is not '':
++ pixmaplist.append(s.attrib.get('pixmap',''))
++ desktop = getDesktop(0)
++ for s in pixmaplist:
++ value ='/usr/share/enigma2/'+s
++# print value
++ ptr = loadPixmap(value, desktop)
++ pngcache.append((value,ptr))
++# ikseong
++try:
++ if config.skin.primary_skin.value == "750S/skin.xml" or config.skin.primary_skin.value == "Vu_HD/skin.xml":
++ cachemenu()
++except:
++ print "fail cache main menu"
++#
++
+ def applySingleAttribute(guiObject, desktop, attrib, value, scale = ((1,1),(1,1))):
+ # and set attributes
+ try:
+@@ -151,7 +181,15 @@ def applySingleAttribute(guiObject, desktop, attrib, value, scale = ((1,1),(1,1)
+ elif attrib == 'itemHeight':
+ guiObject.setItemHeight(int(value))
+ elif attrib in ("pixmap", "backgroundPixmap", "selectionPixmap"):
+- ptr = loadPixmap(value, desktop) # this should already have been filename-resolved.
++#ikseong
++ global pngcache
++ ptr = None
++ for cvalue, cptr in pngcache:
++ if cvalue== value:
++ ptr=cptr
++ if ptr is None:
++ ptr = loadPixmap(value, desktop) # this should already have been filename-resolved.
++#
+ if attrib == "pixmap":
+ guiObject.setPixmap(ptr)
+ elif attrib == "backgroundPixmap":
SRC_URI = "${SOURCEFORGE_MIRROR}/gkernel/ethtool-${PV}.tar.gz"
+SRC_URI_append_vuplus = " \
+ file://ethtool_vuplus.patch;patch=1"
+
inherit autotools
--- /dev/null
+Index: ethtool-4/ethtool.c
+===================================================================
+--- ethtool-4/ethtool.c (revision 3)
++++ ethtool-4/ethtool.c (working copy)
+@@ -1578,6 +1578,27 @@
+ } else if (errno != EOPNOTSUPP) {
+ perror("Cannot get link status");
+ }
++#if 1 /* ikseong - check running flags */
++ else
++ {
++ if(ioctl(fd, SIOCGIFFLAGS, ifr) < 0)
++ {
++ fprintf(stdout,"SIOCGIFFLAGS error \n");
++ }
++ else
++ {
++ if((ifr->ifr_flags & IFF_RUNNING))
++ {
++ fprintf(stdout, " Link detected: yes\n");
++ }
++ else
++ {
++ fprintf(stdout, " Link detected: no\n");
++ }
++ allfail=0;
++ }
++ }
++#endif
+
+ if (allfail) {
+ fprintf(stdout, "No data available\n");
+Index: ethtool-4/Makefile.in
+===================================================================
+--- ethtool-4/Makefile.in (revision 4)
++++ ethtool-4/Makefile.in (working copy)
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.6 from Makefile.am.
++# Makefile.in generated by automake 1.9.3 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005 Free Software Foundation, Inc.
++# 2003, 2004 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -14,6 +14,8 @@
+
+ @SET_MAKE@
+
++SOURCES = $(ethtool_SOURCES)
++
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+Index: ethtool-4/aclocal.m4
+===================================================================
+--- ethtool-4/aclocal.m4 (revision 4)
++++ ethtool-4/aclocal.m4 (working copy)
+@@ -1,7 +1,7 @@
+-# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
++# generated automatically by aclocal 1.9.3 -*- Autoconf -*-
+
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+-# 2005 Free Software Foundation, Inc.
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
++# Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -11,12 +11,24 @@
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+
+-# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# -*- Autoconf -*-
++# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++# Generated from amversion.in; do not edit by hand.
+
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++
+ # AM_AUTOMAKE_VERSION(VERSION)
+ # ----------------------------
+ # Automake X.Y traces this macro to ensure aclocal.m4 has been
+@@ -28,16 +40,27 @@
+ # Call AM_AUTOMAKE_VERSION so it can be traced.
+ # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+- [AM_AUTOMAKE_VERSION([1.9.6])])
++ [AM_AUTOMAKE_VERSION([1.9.3])])
+
+-# AM_AUX_DIR_EXPAND -*- Autoconf -*-
++# AM_AUX_DIR_EXPAND
+
+-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
+ # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+ # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+ # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+@@ -83,17 +106,27 @@
+ am_aux_dir=`cd $ac_aux_dir && pwd`
+ ])
+
+-# AM_CONDITIONAL -*- Autoconf -*-
++# AM_CONDITIONAL -*- Autoconf -*-
+
+-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
+-# Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+
+-# serial 7
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
+
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 6
++
+ # AM_CONDITIONAL(NAME, SHELL-CONDITION)
+ # -------------------------------------
+ # Define a conditional.
+@@ -116,16 +149,27 @@
+ Usually this means the macro was only invoked conditionally.]])
+ fi])])
+
++# serial 7 -*- Autoconf -*-
+
+-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+
+-# serial 8
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
+
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++
+ # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+ # written in clear, in which case automake, when reading aclocal.m4,
+ # will think it sees a *use*, and therefore will trigger all it's
+@@ -133,6 +177,7 @@
+ # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
++
+ # _AM_DEPENDENCIES(NAME)
+ # ----------------------
+ # See how the compiler implements dependency checking.
+@@ -272,17 +317,28 @@
+ AC_SUBST([AMDEPBACKSLASH])
+ ])
+
+-# Generate code to set up dependency tracking. -*- Autoconf -*-
++# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+-# Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
++# Free Software Foundation, Inc.
+
+-#serial 3
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
+
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++#serial 2
++
+ # _AM_OUTPUT_DEPENDENCY_COMMANDS
+ # ------------------------------
+ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+@@ -340,20 +396,31 @@
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+ ])
+
+-# Do all the work for Automake. -*- Autoconf -*-
++# Do all the work for Automake. -*- Autoconf -*-
+
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
++# This macro actually does too much some checks are only needed if
++# your package does certain things. But this isn't really a big deal.
++
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+
+-# serial 12
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
+
+-# This macro actually does too much. Some checks are only needed if
+-# your package does certain things. But this isn't really a big deal.
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
+
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 11
++
+ # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+ # AM_INIT_AUTOMAKE([OPTIONS])
+ # -----------------------------------------------
+@@ -454,28 +521,52 @@
+ done
+ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+-
+ # AM_PROG_INSTALL_SH
+ # ------------------
+ # Define $install_sh.
++
++# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
+ AC_DEFUN([AM_PROG_INSTALL_SH],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ install_sh=${install_sh-"$am_aux_dir/install-sh"}
+ AC_SUBST(install_sh)])
+
+-# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# -*- Autoconf -*-
++# Copyright (C) 2003 Free Software Foundation, Inc.
+
+-# serial 2
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
+
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 1
++
+ # Check whether the underlying file-system supports filenames
+ # with a leading dot. For instance MS-DOS doesn't.
+ AC_DEFUN([AM_SET_LEADING_DOT],
+@@ -489,18 +580,29 @@
+ rmdir .tst 2>/dev/null
+ AC_SUBST([am__leading_dot])])
+
+-# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
++# Add --enable-maintainer-mode option to configure.
+ # From Jim Meyering
+
+-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
++# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+
+-# serial 4
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
+
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 3
++
+ AC_DEFUN([AM_MAINTAINER_MODE],
+ [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+@@ -518,16 +620,27 @@
+
+ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+-# Check to see how 'make' treats includes. -*- Autoconf -*-
++# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+-# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+-# serial 3
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
+
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 2
++
+ # AM_MAKE_INCLUDE()
+ # -----------------
+ # Check to see how make treats includes.
+@@ -570,17 +683,28 @@
+ rm -f confinc confmf
+ ])
+
+-# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
++# -*- Autoconf -*-
+
+-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
+-# Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+
+-# serial 4
++# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 3
++
+ # AM_MISSING_PROG(NAME, PROGRAM)
+ # ------------------------------
+ AC_DEFUN([AM_MISSING_PROG],
+@@ -605,16 +729,27 @@
+ fi
+ ])
+
+-# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+-
+ # AM_PROG_MKDIR_P
+ # ---------------
+ # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+-#
++
++# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
+ # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+ # created by `make install' are always world readable, even if the
+ # installer happens to have an overly restrictive umask (e.g. 077).
+@@ -668,16 +803,27 @@
+ fi
+ AC_SUBST([mkdir_p])])
+
+-# Helper functions for option handling. -*- Autoconf -*-
++# Helper functions for option handling. -*- Autoconf -*-
+
+-# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+-# serial 3
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
+
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 2
++
+ # _AM_MANGLE_OPTION(NAME)
+ # -----------------------
+ AC_DEFUN([_AM_MANGLE_OPTION],
+@@ -701,17 +847,29 @@
+ AC_DEFUN([_AM_IF_OPTION],
+ [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+-# Check to make sure that the build environment is sane. -*- Autoconf -*-
+-
+-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+-# Free Software Foundation, Inc.
+ #
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# Check to make sure that the build environment is sane.
++#
+
+-# serial 4
++# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 3
++
+ # AM_SANITY_CHECK
+ # ---------------
+ AC_DEFUN([AM_SANITY_CHECK],
+@@ -753,14 +911,25 @@
+ fi
+ AC_MSG_RESULT(yes)])
+
+-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# AM_PROG_INSTALL_STRIP
+
+-# AM_PROG_INSTALL_STRIP
+-# ---------------------
++# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
+ # One issue with vendor `install' (even GNU) is that you can't
+ # specify the program used to strip binaries. This is especially
+ # annoying in cross-compiling environments, where the build's strip
+@@ -783,14 +952,26 @@
+
+ # Check how to create a tarball. -*- Autoconf -*-
+
+-# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+-#
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
++# Copyright (C) 2004 Free Software Foundation, Inc.
+
+-# serial 2
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
+
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 1
++
++
+ # _AM_PROG_TAR(FORMAT)
+ # --------------------
+ # Check how to create a tarball in format FORMAT.
+Index: ethtool-4/install-sh
+===================================================================
+--- ethtool-4/install-sh (revision 4)
++++ ethtool-4/install-sh (working copy)
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+ # install - install a program, script, or datafile
+
+-scriptversion=2004-09-10.20
++scriptversion=2004-10-22.00
+
+ # This originates from X11R5 (mit/util/scripts/install.sh), which was
+ # later released in X11R6 (xc/config/util/install.sh) with the
+@@ -213,7 +213,7 @@
+ fi
+
+ # This sed command emulates the dirname command.
+- dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
++ dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+
+ # Make sure that the destination directory exists.
+
+@@ -226,7 +226,8 @@
+ oIFS=$IFS
+ # Some sh's can't handle IFS=/ for some reason.
+ IFS='%'
+- set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
++ set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
++ shift
+ IFS=$oIFS
+
+ pathcomp=
SRC_URI += "file://not-run-updaterc.d-on-host.patch;patch=1"
SRC_URI_append_opendreambox = " file://dev_misc_fuse.patch;patch=1"
+SRC_URI_append_vuplus = " file://dev_misc_fuse.patch;patch=1"
EXTRA_OECONF = " --disable-kernel-module"
LICENSE = "GPL"
DEPENDS = "libproxy glib-2.0 gnutls libxml2 sqlite3 gnome-keyring"
DEPENDS_opendreambox = "glib-2.0 gnutls libxml2 sqlite3"
+DEPENDS_vuplus = "glib-2.0 gnutls libxml2 sqlite3"
#inherit gnome
inherit autotools
S = "${WORKDIR}/libsoup-${PV}"
EXTRA_OECONF_opendreambox += "--without-gnome"
+EXTRA_OECONF_vuplus += "--without-gnome"
#the following is needed for dm800 .. i dont know why...
SRC_URI_append_opendreambox = " file://libsoup-libz-hack.patch;patch=1;pnum=1"
+SRC_URI_append_vuplus = " file://libsoup-libz-hack.patch;patch=1;pnum=1"
PACKAGES =+ "libsoup-gnome"
FILES_libsoup-gnome = "${libdir}/libsoup-gnome*.so.*"
DEPENDS += "gst-plugins-base"
EXTRA_OECONF_opendreambox += "--disable-apexsink --disable-dvdnav --disable-cdaudio --disable-mpeg2enc --disable-mplex"
+EXTRA_OECONF_vuplus += "--disable-apexsink --disable-dvdnav --disable-cdaudio --disable-mpeg2enc --disable-mplex"
SRC_URI_append_opendreambox += " file://mpegpsdemux_speedup.diff;patch=1;pnum=0 \
file://mpegtsdemux_fix_ac3_detection.diff;patch=1;pnum=0"
+SRC_URI_append_vuplus += " file://mpegpsdemux_speedup.diff;patch=1;pnum=0 \
+ file://mpegtsdemux_fix_ac3_detection.diff;patch=1;pnum=0"
RCONFLICTS_gst-plugin-mpegdemux = "gst-plugin-fluendo-mpegdemux"
RREPLACES_gst-plugin-mpegdemux = "gst-plugin-fluendo-mpegdemux"
DEPENDS += "gst-plugins-base"
EXTRA_OECONF_opendreambox += "--disable-apexsink --disable-dvdnav --disable-cdaudio --disable-mpeg2enc --disable-mplex"
+EXTRA_OECONF_vuplus += "--disable-apexsink --disable-dvdnav --disable-cdaudio --disable-mpeg2enc --disable-mplex"
SRC_URI_append_opendreambox += " file://mpegpsdemux_speedup.diff;patch=1;pnum=0 \
file://mpegtsdemux_fix_ac3_detection.diff;patch=1;pnum=0"
+SRC_URI_append_vuplus += " file://mpegpsdemux_speedup.diff;patch=1;pnum=0 \
+ file://mpegtsdemux_fix_ac3_detection.diff;patch=1;pnum=0"
RCONFLICTS_gst-plugin-mpegdemux = "gst-plugin-fluendo-mpegdemux"
RREPLACES_gst-plugin-mpegdemux = "gst-plugin-fluendo-mpegdemux"
--- /dev/null
+diff --git a/tests/examples/seek/jsseek.c b/tests/examples/seek/jsseek.c
+index 16167e4..dd51990 100644
+--- a/tests/examples/seek/jsseek.c
++++ b/tests/examples/seek/jsseek.c
+@@ -3007,8 +3007,10 @@ main (int argc, char **argv)
+ * asks for the XID of the window to render onto */
+ gtk_widget_realize (window);
+
++#ifdef HAVE_X
+ /* we should have the XID now */
+ g_assert (embed_xid != 0);
++#endif
+
+ if (verbose) {
+ g_signal_connect (pipeline, "deep_notify",
file://playbin2-Set-subtitle-encoding-on-the-decodebins-a.patch;patch=1 \
file://playbin2-If-a-text-sink-is-provided-let-subtitle-p.patch;patch=1 "
+SRC_URI_append_vuplus = " file://samihack.patch;patch=1 \
+file://playbin2-Set-subtitle-encoding-on-the-decodebins-a.patch;patch=1 \
+file://playbin2-If-a-text-sink-is-provided-let-subtitle-p.patch;patch=1 "
+
PR = "${INC_PR}.1"
PROVIDES += "gst-plugins"
# if alsa has been built and is present. You will
# not get an error if this is not present, just
# a missing alsa plugin
-DEPENDS += "${@base_contains('DISTRO', 'opendreambox', 'alsa-lib', 'cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype gnome-vfs libxv', d)}"
+#DEPENDS += "${@base_contains('DISTRO', 'opendreambox', 'alsa-lib', 'cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype gnome-vfs libxv', d)}"
+DEPENDS += "${@base_contains('DISTRO', 'vuplus', 'alsa-lib', 'cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype gnome-vfs libxv', d)}"
+
EXTRA_OECONF_opendreambox += "--disable-theora --disable-pango --with-audioresample-format=int"
+EXTRA_OECONF_vuplus += "--disable-theora --disable-pango --with-audioresample-format=int"
file://playbin2-If-a-text-sink-is-provided-let-subtitle-p.patch;patch=1 \
file://playbin2-capsless-textsink.patch;patch=1 "
+SRC_URI_append_vuplus = " file://samihack.patch;patch=1 \
+file://playbin2-Set-subtitle-encoding-on-the-decodebins-a.patch;patch=1 \
+file://playbin2-If-a-text-sink-is-provided-let-subtitle-p.patch;patch=1 \
+file://playbin2-capsless-textsink.patch;patch=1 "
+
PR = "${INC_PR}.0"
PROVIDES += "gst-plugins"
# if alsa has been built and is present. You will
# not get an error if this is not present, just
# a missing alsa plugin
-DEPENDS += "${@base_contains('DISTRO', 'opendreambox', 'alsa-lib', 'cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype gnome-vfs libxv', d)}"
+#DEPENDS += "${@base_contains('DISTRO', 'opendreambox', 'alsa-lib', 'cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype gnome-vfs libxv', d)}"
+DEPENDS += "${@base_contains('DISTRO', 'vuplus', 'alsa-lib', 'cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype gnome-vfs libxv', d)}"
EXTRA_OECONF_opendreambox += "--disable-theora --disable-pango --with-audioresample-format=int"
+EXTRA_OECONF_vuplus += "--disable-theora --disable-pango --with-audioresample-format=int"
require gst-plugins.inc
SRC_URI_append_opendreambox = " file://dvdsubdec-addproperty-singlebuffer.patch;patch=1"
+SRC_URI_append_vuplus = " file://dvdsubdec-addproperty-singlebuffer.patch;patch=1"
PR = "${INC_PR}.0"
DEPENDS = "gstreamer libmikmod liboil libogg tremor libvorbis"
DEPENDS += "${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad libid3tag', d)}"
DEPENDS += "${@base_conditional('DISTRO', 'opendreambox', 'libmad libsoup-2.4 flac libmatroska libcdio libid3tag', '', d)}"
+DEPENDS += "${@base_conditional('DISTRO', 'vuplus', 'libmad libsoup-2.4 flac libmatroska libcdio libid3tag', '', d)}"
INC_PR = "r8"
EXTRA_OECONF = "--enable-introspection=no --disable-aalib --disable-shout2 --disable-sdl --disable-cdaudio --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR} "
EXTRA_OECONF_append_shr = " --disable-dvdnav "
EXTRA_OECONF_opendreambox = "--disable-x --disable-aalib --disable-esd --disable-shout2 --disable-sdl --with-check=no --enable-neon "
+EXTRA_OECONF_vuplus = "--disable-x --disable-aalib --disable-esd --disable-shout2 --disable-sdl --with-check=no --enable-neon "
acpaths = "-I ${S}/common/m4 -I ${S}/m4"
install -d ${D}/${sbindir} ${D}/${mandir}/man8
oe_runmake 'DESTDIR=${D}' install
}
+
--- /dev/null
+export IMAGE_BASENAME = "vuplus-image"
+
+VUPLUS_COMMON = "\
+ task-boot \
+ task-vuplus-base \
+ task-vuplus-dvbapi \
+ task-vuplus-ui \
+"
+
+
+
+# add bootstrap stuff
+DEPENDS = "${VUPLUS_COMMON}"
+IMAGE_INSTALL = "${VUPLUS_COMMON}"
+
+# we don't want any locales, at least not in the common way.
+IMAGE_LINGUAS = " "
+
+inherit image
+
+vuplus_rootfs_postprocess() {
+ curdir=$PWD
+ cd ${IMAGE_ROOTFS}
+
+ # generate /etc/image-version
+ IMAGE_VERSION="000"
+ IMAGE_DATE="$(date +%Y%m%d%H%M)"
+ IMAGE_TYPE="1"
+ echo "version=${IMAGE_TYPE}${IMAGE_VERSION}${IMAGE_DATE}" > etc/image-version
+ echo "comment=${DISTRO_NAME}" >> etc/image-version
+ echo "target=9" >> etc/image-version
+ echo "creator=OpenEmbedded <oe@vuplus.com>" >> etc/image-version
+ echo "url=http://www.vuplus.com/" >> etc/image-version
+ echo "catalog=http://www.vuplus.com/" >> etc/image-version
+
+ # because we're so used to it
+ ln -s opkg usr/bin/ipkg || true
+ ln -s opkg-cl usr/bin/ipkg-cl || true
+
+ cd $curdir
+}
+
+ROOTFS_POSTPROCESS_COMMAND += "vuplus_rootfs_postprocess; "
+
+export NFO = '${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.nfo'
+
+generate_nfo() {
+ VER=`grep Version: "${IMAGE_ROOTFS}/usr/lib/ipkg/info/enigma2.control" | cut -b 10-26`
+ echo "Enigma2: ${VER}" > ${NFO}
+ echo "Machine: Vuplus ${MACHINE}" >> ${NFO}
+ DATE=`date +%Y-%m-%d' '%H':'%M`
+ echo "Date: ${DATE}" >> ${NFO}
+ echo "Issuer: Vuplus" >> ${NFO}
+ echo "Link: ${DISTRO_FEED_URI}" >> ${NFO}
+ if [ "${DESC}" != "" ]; then
+ echo "Description: ${DESC}" >> ${NFO}
+ echo "${DESC}" >> ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.desc
+ fi
+ MD5SUM=`md5sum ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.nfi | cut -b 1-32`
+ echo "MD5: ${MD5SUM}" >> ${NFO}
+}
+
+do_rootfs_append_bm750() {
+ generate_nfo
+}
+
+do_rootfs_append_vusolo() {
+ generate_nfo
+}
--- /dev/null
+
+
+for mod in input evdev i2c-core firmware_class; do
+ modprobe $mod
+done
+
+for mod in snd snd-pcm; do
+ modprobe $mod
+done
+
+insmod /lib/modules/2.6.18-7.3/extra/procmk.ko
+insmod /lib/modules/2.6.18-7.3/extra/fb.ko
+insmod /lib/modules/2.6.18-7.3/extra/dvb-core.ko
+insmod /lib/modules/2.6.18-7.3/extra/dvb-bcm7335.ko
+insmod /lib/modules/2.6.18-7.3/extra/brcmfb.ko
+
+
+depmod -Ae
+echo 12 > /proc/progress
+
+for mod in isofs cifs usb-storage sr_mod vfat cdrom ntfs; do
+ modprobe $mod
+done
+
+for mod in sata_svw libata nls_base nls_cp437 nls_iso8859-1; do
+ modprobe $mod
+done
+
+echo 13 > /proc/progress
+
+
+mount -at nonfs,nosmbfs,noncpfs,nocifs
+echo 14 > /proc/progress
+
+swapon -a
+echo 15 > /proc/progress
+
+tar xzf /etc/var.tar.gz -C /
+echo 16 > /proc/progress
+
+# sleep after 10min
+hdparm -S 120 /dev/sda
+
+echo 17 > /proc/progress
+
+# accustic management
+hdparm -M128 /dev/sda
+
+echo 19 > /proc/progress
+
+cat /etc/videomode > /proc/stb/video/videomode
+
+echo 20 > /proc/progress
+
+
+echo 21 > /proc/progress
+
+[ -e /etc/dropbear/dropbear_rsa_host_key ] && /usr/bin/showiframe /boot/bootlogo.mvi || /usr/bin/showiframe /boot/bootlogo_wait.mvi
+
+hostname -F /etc/hostname
+
+echo 22 > /proc/progress
+
+echo 23 > /proc/progress
+
+[ -e "/etc/sysctl.conf" ] && /sbin/sysctl -p "/etc/sysctl.conf"
+
+echo 24 > /proc/progress
+
+ldconfig
+
+echo 25 > /proc/progress
+
+ipkg-cl configure
+
+if [ -f /usr/local/bin/vucamd ];
+then /usr/local/bin/vucamd &
+fi
+
+/usr/bin/hotplug_br &
--- /dev/null
+#! /bin/sh
+#
+# halt Execute the halt command.
+#
+# Version: @(#)halt 2.84-2 07-Jan-2002 miquels@cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# See if we need to cut the power.
+if test -x /etc/init.d/ups-monitor
+then
+ /etc/init.d/ups-monitor poweroff
+fi
+
+# Don't shut down drives if we're using RAID.
+hddown="-h"
+if grep -qs '^md.*active' /proc/mdstat
+then
+ hddown=""
+fi
+
+showiframe /usr/share/switchoff.mvi
+
+/usr/bin/turnoff_power
+
+halt -d -f -i -p $hddown
+
+: exit 0
--- /dev/null
+
+
+for mod in input evdev i2c-core firmware_class; do
+ modprobe $mod
+done
+
+for mod in snd snd-pcm; do
+ modprobe $mod
+done
+
+
+insmod /lib/modules/2.6.18-7.3/extra/procmk.ko
+insmod /lib/modules/2.6.18-7.3/extra/fb.ko
+insmod /lib/modules/2.6.18-7.3/extra/dvb-core.ko
+insmod /lib/modules/2.6.18-7.3/extra/dvb-bcm7325.ko
+insmod /lib/modules/2.6.18-7.3/extra/brcmfb.ko
+
+
+
+
+
+depmod -Ae
+echo 12 > /proc/progress
+
+for mod in isofs cifs usb-storage sr_mod vfat cdrom ntfs; do
+ modprobe $mod
+done
+
+for mod in nls_base nls_cp437 nls_iso8859-1 nls_utf8; do
+ modprobe $mod
+done
+
+echo 13 > /proc/progress
+
+
+mount -at nonfs,nosmbfs,noncpfs,nocifs
+echo 14 > /proc/progress
+
+swapon -a
+echo 15 > /proc/progress
+
+tar xzf /etc/var.tar.gz -C /
+echo 16 > /proc/progress
+
+# sleep after 10min
+hdparm -S 120 /dev/sda
+
+echo 17 > /proc/progress
+
+# accustic management
+hdparm -M 128 /dev/sda
+
+
+
+echo 19 > /proc/progress
+
+cat /etc/videomode > /proc/stb/video/videomode
+
+echo 20 > /proc/progress
+
+
+echo 21 > /proc/progress
+
+[ -e /etc/dropbear/dropbear_rsa_host_key ] && /usr/bin/showiframe /boot/bootlogo.mvi || /usr/bin/showiframe /boot/bootlogo_wait.mvi
+
+hostname -F /etc/hostname
+
+echo 22 > /proc/progress
+
+
+echo 23 > /proc/progress
+
+[ -e "/etc/sysctl.conf" ] && /sbin/sysctl -p "/etc/sysctl.conf"
+
+echo 24 > /proc/progress
+
+ldconfig
+
+echo 25 > /proc/progress
+
+ipkg-cl configure
+
+if [ -f /usr/local/bin/vucamd ];
+then /usr/local/bin/vucamd &
+fi
+
+
+/usr/bin/hotplug_br &
--- /dev/null
+#! /bin/sh
+#
+# halt Execute the halt command.
+#
+# Version: @(#)halt 2.84-2 07-Jan-2002 miquels@cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# See if we need to cut the power.
+if test -x /etc/init.d/ups-monitor
+then
+ /etc/init.d/ups-monitor poweroff
+fi
+
+# Don't shut down drives if we're using RAID.
+hddown="-h"
+if grep -qs '^md.*active' /proc/mdstat
+then
+ hddown=""
+fi
+
+showiframe /usr/share/switchoff.mvi
+
+/usr/bin/turnoff_power
+
+halt -d -f -i -p $hddown
+
+: exit 0
--- /dev/null
+DESCRIPTION = "SysV init scripts for VuPlus"
+SECTION = "base"
+PRIORITY = "required"
+DEPENDS = "makedevs"
+RDEPENDS = "makedevs"
+LICENSE = "GPL"
+PR = "r23"
+
+#FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/${P}', '${FILE_DIRNAME}/initscripts-${PV}', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
+#deprecated
+FILESPATHPKG = "initscripts-${PV}:initscripts:files"
+
+
+SRC_URI = "file://halt \
+ file://umountfs \
+ file://devpts.sh \
+ file://devpts \
+ file://turnoff_power \
+ file://reboot \
+ file://single \
+ file://sendsigs \
+ file://rmnologin \
+ file://umountnfs.sh \
+ file://netmount.sh \
+ file://var.tar.gz.default \
+ file://sysfs.sh \
+ file://hotplug_br \
+ file://make_mac_sector \
+ file://bootup"
+
+
+do_install () {
+#
+# Create directories and install device independent scripts
+#
+ install -d ${D}${sysconfdir}/init.d \
+ ${D}${sysconfdir}/rcS.d \
+ ${D}${sysconfdir}/rc0.d \
+ ${D}${sysconfdir}/rc1.d \
+ ${D}${sysconfdir}/rc2.d \
+ ${D}${sysconfdir}/rc3.d \
+ ${D}${sysconfdir}/rc4.d \
+ ${D}${sysconfdir}/rc5.d \
+ ${D}${sysconfdir}/rc6.d \
+ ${D}/usr/bin \
+ ${D}${sysconfdir}/default
+
+ install -m 0755 ${WORKDIR}/halt ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/turnoff_power ${D}/usr/bin
+ install -m 0755 ${WORKDIR}/hotplug_br ${D}/usr/bin
+ install -m 0755 ${WORKDIR}/make_mac_sector ${D}/usr/bin
+ install -m 0755 ${WORKDIR}/reboot ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/rmnologin ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/sendsigs ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/single ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/bootup ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/devpts.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/devpts ${D}${sysconfdir}/default
+ install -m 0755 ${WORKDIR}/sysfs.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/var.tar.gz.default ${D}${sysconfdir}/var.tar.gz
+
+#
+# Install device dependent scripts
+#
+ install -m 0755 ${WORKDIR}/umountfs ${D}${sysconfdir}/init.d/umountfs
+ install -d ${D}${sysconfdir}/network/if-up.d
+ install -m 0755 ${WORKDIR}/netmount.sh ${D}${sysconfdir}/network/if-up.d/02netmount
+ install -d ${D}${sysconfdir}/network/if-down.d
+ install -m 0755 ${WORKDIR}/umountnfs.sh ${D}${sysconfdir}/network/if-down.d/02umountnfs
+
+ echo "[ -f /etc/shadow ] && /bin/true || touch /etc/shadow" >> ${D}${sysconfdir}/init.d/bootup
+
+ ln -sf ../init.d/rmnologin ${D}${sysconfdir}/rc2.d/S99rmnologin
+ ln -sf ../init.d/rmnologin ${D}${sysconfdir}/rc3.d/S99rmnologin
+ ln -sf ../init.d/rmnologin ${D}${sysconfdir}/rc4.d/S99rmnologin
+ ln -sf ../init.d/rmnologin ${D}${sysconfdir}/rc5.d/S99rmnologin
+ ln -sf ../init.d/sendsigs ${D}${sysconfdir}/rc6.d/S20sendsigs
+ ln -sf ../init.d/umountfs ${D}${sysconfdir}/rc6.d/S40umountfs
+ ln -sf ../init.d/reboot ${D}${sysconfdir}/rc6.d/S90reboot
+ ln -sf ../init.d/sendsigs ${D}${sysconfdir}/rc0.d/S20sendsigs
+ ln -sf ../init.d/umountfs ${D}${sysconfdir}/rc0.d/S40umountfs
+ ln -sf ../init.d/halt ${D}${sysconfdir}/rc0.d/S90halt
+ ln -sf ../init.d/sysfs.sh ${D}${sysconfdir}/rcS.d/S02sysfs
+ ln -sf ../init.d/devpts.sh ${D}${sysconfdir}/rcS.d/S38devpts.sh
+ ln -sf ../init.d/bootup ${D}${sysconfdir}/rcS.d/S05bootup
+
+}
+
CFLAGS_dm800se_append = " -DHARDWARE_SUPPORT_LPCM"
CFLAGS_dm8000_append = " -DHARDWARE_SUPPORT_LPCM"
#CFLAGS_dm800_append = " -DHARDWARE_SUPPORT_LPCM"
+CFLAGS_vusolo_append = " -DHARDWARE_SUPPORT_LPCM"
+CFLAGS_bm750_append = " -DHARDWARE_SUPPORT_LPCM"
S = "${WORKDIR}/libdreamdvd"
LICENSE = "GPL"
DEPENDS = "libdvdcss"
DEPENDS_opendreambox = ""
+DEPENDS_vuplus = ""
SECTION = "libs/multimedia"
PR = "r2"
"
EXTRA_OECONF_opendreambox = ""
+EXTRA_OECONF_vuplus = ""
do_stage() {
autotools_stage_all
--- /dev/null
+DESCRIPTION = "Linux kernel for vuplus duo"
+LICENSE = "GPL"
+KV = "2.6.18-7.3"
+PV = "2.6.18-7.3"
+PR = "r4"
+
+MODULE = "stblinux-2.6.18"
+
+
+SRC_URI = "http://archive.vuplus.com/download/stblinux-${KV}.tar.bz2 \
+ file://linux_bm750_nand.patch;patch=1;pnum=0 \
+ file://linux_bm750_proc.patch;patch=1;pnum=0 \
+ file://linux_bm750_resource.patch;patch=1;pnum=0 \
+ file://linux_bm750_serial.patch;patch=1;pnum=0 \
+ file://linux_bm750_setup.patch;patch=1;pnum=0 \
+ file://linux_bm750_arch_makefile.patch;patch=1;pnum=0 \
+ file://linux_bm750_kobject.patch;patch=1;pnum=0 \
+ file://linux_bm750_dvb-core_fe.patch;patch=1;pnum=0 \
+ file://bm750_defconfig \
+ "
+
+
+S = "${WORKDIR}/stblinux-2.6.18"
+
+inherit kernel
+
+FILES_kernel-image = "/boot/vmlinux.gz /boot/autoexec.bat"
+
+export OS = "Linux"
+KERNEL_IMAGETYPE = "vmlinux"
+KERNEL_OUTPUT = "vmlinux"
+KERNEL_OBJECT_SUFFIX = "ko"
+
+
+do_configure_prepend() {
+ oe_machinstall -m 0644 ${WORKDIR}/bm750_defconfig ${S}/.config
+ if [ -d ${WORKDIR}/cdfs-${PV} ]; then
+ mv ${WORKDIR}/cdfs-${PV} ${S}/fs/cdfs
+ cd ${S} & patch -p0 < ${S}/fs/cdfs/patch.cdfs
+ fi;
+ oe_runmake oldconfig
+}
+
+do_install_append () {
+ install -d ${D}/boot
+ install -m 0755 vmlinux ${D}/boot/vmlinux
+ gzip ${D}/boot/vmlinux
+}
+
+pkg_preinst_kernel-image () {
+ [ -d /proc/stb ] && mount -o rw,remount /boot
+ true
+ if [ -f /boot/vmlinux.gz ];
+ then rm -f /boot/vmlinux.gz;
+ fi
+}
+
+pkg_postinst_kernel-image () {
+ if [ -d /proc/stb ];
+ then flash_eraseall /dev/mtd1; nandwrite /dev/mtd1 /boot/vmlinux.gz -p;
+ fi
+ [ -d /proc/stb ] && mount -o ro,remount /boot
+ true
+
+}
+
+pkg_prerm_kernel-image () {
+ [ -d /proc/stb ] && mount -o rw,remount /boot
+ true
+}
+
+pkg_postrm_kernel-image () {
+ [ -d /proc/stb ] && mount -o ro,remount /boot
+ true
+}
--- /dev/null
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18-6.1
+# Thu Sep 25 13:49:47 2008
+#
+CONFIG_MIPS=y
+
+#
+# Machine selection
+#
+# CONFIG_MIPS_BCM3548BX_SPI is not set
+# CONFIG_MIPS_BCM3548BX_NAND is not set
+# CONFIG_MIPS_BCM3563CX is not set
+# CONFIG_MIPS_BCM3563CX_DDR1 is not set
+# CONFIG_MIPS_BCM3563CX_NAND is not set
+# CONFIG_MIPS_BCM7038CX is not set
+# CONFIG_MIPS_BCM7118AX is not set
+# CONFIG_MIPS_BCM7118AX_NAND is not set
+# CONFIG_MIPS_BCM7118CX is not set
+# CONFIG_MIPS_BCM7118CX_NAND is not set
+# CONFIG_MIPS_BCM7405AX is not set
+# CONFIG_MIPS_BCM7405BX is not set
+# CONFIG_MIPS_BCM97459BX is not set
+# CONFIG_MIPS_BCM7405BX_NAND is not set
+# CONFIG_MIPS_BCM97459BX_NAND is not set
+CONFIG_MIPS_BCM7335BX=y
+# CONFIG_MIPS_BCM7420AX is not set
+# CONFIG_MIPS_BCM97456DX is not set
+# CONFIG_MIPS_BCM7400DX is not set
+# CONFIG_MIPS_BCM7400DX_NAND is not set
+# CONFIG_MIPS_BCM97456DX_NAND is not set
+# CONFIG_MIPS_BCM97455CX is not set
+# CONFIG_MIPS_BCM97455CX_NAND is not set
+# CONFIG_MIPS_BCM7401CX is not set
+# CONFIG_MIPS_BCM7401CX_NAND is not set
+# CONFIG_MIPS_BCM97401CX_SW is not set
+# CONFIG_MIPS_BCM97458AX is not set
+# CONFIG_MIPS_BCM97458AX_NAND is not set
+# CONFIG_MIPS_BCM7402CX is not set
+# CONFIG_MIPS_BCM7402CX_NAND is not set
+# CONFIG_MIPS_BCM7454 is not set
+# CONFIG_MIPS_BCM7403AX is not set
+# CONFIG_MIPS_BCM7403AX_NAND is not set
+# CONFIG_MIPS_BCM7325AX is not set
+# CONFIG_MIPS_BCM7440BX is not set
+# CONFIG_MIPS_BCM7440BX_NAND is not set
+# CONFIG_MIPS_BCM7443AX is not set
+# CONFIG_MIPS_MTX1 is not set
+# CONFIG_MIPS_BOSPORUS is not set
+# CONFIG_MIPS_PB1000 is not set
+# CONFIG_MIPS_PB1100 is not set
+# CONFIG_MIPS_PB1500 is not set
+# CONFIG_MIPS_PB1550 is not set
+# CONFIG_MIPS_PB1200 is not set
+# CONFIG_MIPS_DB1000 is not set
+# CONFIG_MIPS_DB1100 is not set
+# CONFIG_MIPS_DB1500 is not set
+# CONFIG_MIPS_DB1550 is not set
+# CONFIG_MIPS_DB1200 is not set
+# CONFIG_MIPS_MIRAGE is not set
+# CONFIG_BASLER_EXCITE is not set
+# CONFIG_MIPS_COBALT is not set
+# CONFIG_MACH_DECSTATION is not set
+# CONFIG_MIPS_EV64120 is not set
+# CONFIG_MIPS_EV96100 is not set
+# CONFIG_MIPS_IVR is not set
+# CONFIG_MIPS_ITE8172 is not set
+# CONFIG_MACH_JAZZ is not set
+# CONFIG_LASAT is not set
+# CONFIG_MIPS_ATLAS is not set
+# CONFIG_MIPS_MALTA is not set
+# CONFIG_MIPS_SEAD is not set
+# CONFIG_WR_PPMC is not set
+# CONFIG_MIPS_SIM is not set
+# CONFIG_MOMENCO_JAGUAR_ATX is not set
+# CONFIG_MOMENCO_OCELOT is not set
+# CONFIG_MOMENCO_OCELOT_3 is not set
+# CONFIG_MOMENCO_OCELOT_C is not set
+# CONFIG_MOMENCO_OCELOT_G is not set
+# CONFIG_MIPS_XXS1500 is not set
+# CONFIG_PNX8550_V2PCI is not set
+# CONFIG_PNX8550_JBS is not set
+# CONFIG_DDB5477 is not set
+# CONFIG_MACH_VR41XX is not set
+# CONFIG_PMC_YOSEMITE is not set
+# CONFIG_QEMU is not set
+# CONFIG_MARKEINS is not set
+# CONFIG_SGI_IP22 is not set
+# CONFIG_SGI_IP27 is not set
+# CONFIG_SGI_IP32 is not set
+# CONFIG_SIBYTE_BIGSUR is not set
+# CONFIG_SIBYTE_SWARM is not set
+# CONFIG_SIBYTE_SENTOSA is not set
+# CONFIG_SIBYTE_RHONE is not set
+# CONFIG_SIBYTE_CARMEL is not set
+# CONFIG_SIBYTE_PTSWARM is not set
+# CONFIG_SIBYTE_LITTLESUR is not set
+# CONFIG_SIBYTE_CRHINE is not set
+# CONFIG_SIBYTE_CRHONE is not set
+# CONFIG_SNI_RM200_PCI is not set
+# CONFIG_TOSHIBA_JMR3927 is not set
+# CONFIG_TOSHIBA_RBTX4927 is not set
+# CONFIG_TOSHIBA_RBTX4938 is not set
+CONFIG_BRCM_BUILD_TARGET="unknown"
+CONFIG_LONG_LONG_SUPPORT=y
+# CONFIG_MIPS_BCM_NDVD is not set
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_DMA_NONCOHERENT=y
+CONFIG_DMA_NEED_PCI_MAP_STATE=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
+CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
+CONFIG_IRQ_CPU=y
+CONFIG_MIPS_BRCM97XXX=y
+# CONFIG_BMIPS3300 is not set
+CONFIG_BMIPS4380=y
+# CONFIG_BMIPS5000 is not set
+# CONFIG_MTI_R5K is not set
+# CONFIG_MTI_R24K is not set
+# CONFIG_MTI_R34K is not set
+# CONFIG_BRCM_SCM_L2 is not set
+CONFIG_MIPS_BCM7335B0=y
+CONFIG_MIPS_BCM7335=y
+CONFIG_MIPS_BRCM=y
+# CONFIG_BRCM_7XXX_SERIAL is not set
+CONFIG_SERIAL=y
+CONFIG_BRCM_SKIP_CHECK_BOOTROM=y
+CONFIG_MIPS_L1_CACHE_SHIFT=6
+CONFIG_SYS_SUPPORTS_PM=y
+CONFIG_SYS_SUPPORTS_CPUFREQ=y
+
+#
+# Power management
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_BRCM=y
+CONFIG_BRCM_PM=y
+CONFIG_HOTPLUG_CPU=y
+
+#
+# CPU selection
+#
+CONFIG_CPU_MIPS32_R1=y
+# CONFIG_CPU_MIPS32_R2 is not set
+# CONFIG_CPU_MIPS64_R1 is not set
+# CONFIG_CPU_MIPS64_R2 is not set
+# CONFIG_CPU_R3000 is not set
+# CONFIG_CPU_TX39XX is not set
+# CONFIG_CPU_VR41XX is not set
+# CONFIG_CPU_R4300 is not set
+# CONFIG_CPU_R4X00 is not set
+# CONFIG_CPU_TX49XX is not set
+# CONFIG_CPU_R5000 is not set
+# CONFIG_CPU_R5432 is not set
+# CONFIG_CPU_R6000 is not set
+# CONFIG_CPU_NEVADA is not set
+# CONFIG_CPU_R8000 is not set
+# CONFIG_CPU_R10000 is not set
+# CONFIG_CPU_RM7000 is not set
+# CONFIG_CPU_RM9000 is not set
+# CONFIG_CPU_SB1 is not set
+CONFIG_SYS_HAS_CPU_MIPS32_R1=y
+CONFIG_CPU_MIPS32=y
+CONFIG_CPU_MIPSR1=y
+CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
+CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
+
+#
+# Kernel type
+#
+CONFIG_32BIT=y
+# CONFIG_64BIT is not set
+CONFIG_PAGE_SIZE_4KB=y
+# CONFIG_PAGE_SIZE_8KB is not set
+# CONFIG_PAGE_SIZE_16KB is not set
+# CONFIG_PAGE_SIZE_64KB is not set
+CONFIG_CPU_HAS_PREFETCH=y
+CONFIG_MIPS_MT_DISABLED=y
+# CONFIG_MIPS_MT_SMTC is not set
+# CONFIG_MIPS_MT_SMP is not set
+# CONFIG_MIPS_VPE_LOADER is not set
+# CONFIG_64BIT_PHYS_ADDR is not set
+CONFIG_CPU_HAS_LLSC=y
+CONFIG_CPU_HAS_SYNC=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_IRQ_PER_CPU=y
+CONFIG_CPU_SUPPORTS_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_SMP=y
+CONFIG_SYS_SUPPORTS_SMP=y
+CONFIG_NR_CPUS=2
+# CONFIG_HZ_48 is not set
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_128 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_256 is not set
+CONFIG_HZ_1000=y
+# CONFIG_HZ_1024 is not set
+CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
+CONFIG_HZ=1000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+CONFIG_AUDIT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_CPUSETS=y
+CONFIG_RELAY=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_VMALLOC_NOGUARD is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+
+#
+# Block layer
+#
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Bus options (PCI, PCMCIA, EISA, ISA, TC)
+#
+CONFIG_HW_HAS_PCI=y
+CONFIG_PCI=y
+CONFIG_MMU=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_TRAD_SIGNALS=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+
+#CONFIG_IP_PNP=y
+#CONFIG_IP_PNP_DHCP=y
+#CONFIG_IP_PNP_BOOTP=y
+#CONFIG_IP_PNP_RARP=y
+
+#
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=y
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_CFI_AMDSTD_USE_WORD_WRITE is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_BCM7XXX=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+CONFIG_MTD_BRCMNAND=y
+# CONFIG_MTD_BRCMNAND_VERIFY_WRITE is not set
+# CONFIG_MTD_BLOCK_ROMBLOCK is not set
+CONFIG_MTD_BRCMNAND_VERSION=3
+CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING=y
+CONFIG_MTD_BRCMNAND_USE_ISR=y
+#
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=m
+# CONFIG_SATA_FORCE_SPINUP is not set
+# CONFIG_SATA_AHCI is not set
+CONFIG_SATA_SVW=m
+# CONFIG_SATA_SVW_NCQ is not set
+CONFIG_SATA_SVW_PORTS=2
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_NETIF_DMA=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_BCMINTEMAC_7038=y
+CONFIG_BCMINTEMAC_NETLINK=y
+CONFIG_BCMINTEMAC_7038_STREAMING=y
+# CONFIG_BCMINTEMAC_7038_EXTMII is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_DM9000 is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_PCI is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=m
+
+#
+## Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=m
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+# CONFIG_SERIAL_8250_PCI is not set
+CONFIG_SERIAL_8250_NR_UARTS=0
+CONFIG_SERIAL_8250_RUNTIME_UARTS=0
+# CONFIG_SERIAL_8250_EXTENDED is not set
+#
+#
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+#
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+CONFIG_USB_BRCM=y
+# CONFIG_USB_BRCM_PWR_CTL is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+# csh 20090706 CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT=y
+
+
+#
+# USB HID Boot Protocol drivers
+#
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+CONFIG_USB_PEGASUS=y
+CONFIG_USB_RTL8150=y
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=y
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=y
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=y
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_XFS_FS=m
+CONFIG_XFS_EXPORT=y
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+#
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_YAFFS_FS=y
+CONFIG_YAFFS_YAFFS1=y
+# CONFIG_YAFFS_DOES_ECC is not set
+CONFIG_YAFFS_YAFFS2=y
+CONFIG_YAFFS_AUTO_YAFFS2=y
+# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
+CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10
+# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
+# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
+CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
+#
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=y
+CONFIG_SQUASHFS=y
+CONFIG_SQUASHFS_EMBEDDED=y
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+CONFIG_SQUASHFS_VMALLOC=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_DEBUG2 is not set
+#
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=15
+# CONFIG_DEBUG_FS is not set
+# CONFIG_WANT_EXTRA_DEBUG_INFORMATION is not set
+CONFIG_CROSSCOMPILE=y
+CONFIG_CMDLINE="root=/dev/sda1 rw console=ttyS0,115200n8"
+CONFIG_SYS_SUPPORTS_KGDB=y
+# CONFIG_MIPS_BRCM_SIM is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
--- /dev/null
+Index: drivers/mtd/brcmnand/bcm7xxx-nand.c
+===================================================================
+--- drivers/mtd/brcmnand/bcm7xxx-nand.c (revision 1)
++++ drivers/mtd/brcmnand/bcm7xxx-nand.c (working copy)
+@@ -149,20 +149,33 @@
+
+ static struct mtd_partition bcm7XXX_no_xor_partition[] =
+ {
+- /* XOR disabled: Everything is shifted down 4MB */
+- { name: N_ROOTFS, offset: 0x00400000, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) }, // Less 1MB for BBT
+- { name: N_ALL, offset: 0, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) },
+- { name: N_KERNEL, offset: 0x00b00000, size: 4<<20 },
+- /* BBT0 1MB not mountable by anyone */
+-
+- /* Following partitions only present on flash with size > 512MB */
+- { name: N_DATA, offset: 0x20000000, size: 0 },
+- /* BBT1 4MB not mountable by anyone */
+- {name: NULL, offset: 0, size: 0} /* End marker */
++ { name: N_ROOTFS, offset: 0, size: DEFAULT_ROOTFS_SIZE },
++#ifdef CONFIG_MTD_ECM_PARTITION
++ { name: N_AVAIL1, offset: DEFAULT_ROOTFS_SIZE, size: DEFAULT_AVAIL1_SIZE },
++ { name: N_OCAP, offset: DEFAULT_ROOTFS_SIZE+DEFAULT_AVAIL1_SIZE, size: DEFAULT_OCAP_SIZE },
++#endif
++#ifdef USE_SPLASH
++ { name: N_KERNEL, offset: 0x00200000, size: 4<<20 },
++ { name: "boot", offset: 0x00600000, size: 4<<20 },
++ { name: "bootimg", offset: 0x00A00000, size: 2<<20 },
++#else
++ { name: N_KERNEL, offset: 0x00600000, size: 2<<20 },
++ { name: "boot", offset: 0x07800000, size: 4<<20 },
++#endif
++ { name: N_CFE, offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: N_NVM, offset: 0x07E00000, size: 1<<20 },
++ /* BBT 1MB not mountable by anyone */
++ { name: N_DATA, offset: 0x20000000, size: 0 },
++/* Add 1 extra place-holder partition for splash, and a safety guard element */
++ {name: NULL, offset: 0, size: 0},
++ {name: NULL, offset: 0, size: 0}
+ };
+
+ static struct mtd_partition bcm7XXX_new_partition[] =
+ {
++
+ { name: N_ROOTFS, offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ { name: N_ALL, offset: 0x0, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) },
+ { name: N_KERNEL, offset: 0x00800000, size: 4<<20 },
+@@ -267,7 +280,8 @@
+ if (device_size(mtd) <= (512ULL <<20)) {
+ bcm7XXX_nand_parts[ALL_PART].size =
+ device_size(mtd) - (uint64_t) (DEFAULT_BBT0_SIZE_MB<<20);
+- *numParts = 3;
++// *numParts = 3;
++ *numParts = 7;
+ }
+ else {
+ bcm7XXX_nand_parts[ALL_PART].size = ((512-DEFAULT_BBT1_SIZE_MB)<<20);
--- /dev/null
+Index: arch/mips/Makefile
+===================================================================
+--- arch/mips/Makefile (revision 1)
++++ arch/mips/Makefile (working copy)
+@@ -18,15 +18,15 @@
+ # Select the object file format to substitute into the linker script.
+ #
+ ifdef CONFIG_CPU_LITTLE_ENDIAN
+-32bit-tool-prefix = mipsel-linux-
+-64bit-tool-prefix = mips64el-linux-
++32bit-tool-prefix = mipsel-oe-linux-
++64bit-tool-prefix = mips64el-oe-linux-
+ 32bit-bfd = elf32-tradlittlemips
+ 64bit-bfd = elf64-tradlittlemips
+ 32bit-emul = elf32ltsmip
+ 64bit-emul = elf64ltsmip
+ else
+-32bit-tool-prefix = mips-linux-
+-64bit-tool-prefix = mips64-linux-
++32bit-tool-prefix = mips-oe-linux-
++64bit-tool-prefix = mips64-oe-linux-
+ 32bit-bfd = elf32-tradbigmips
+ 64bit-bfd = elf64-tradbigmips
+ 32bit-emul = elf32btsmip
--- /dev/null
+Index: drivers/media/dvb/dvb-core/dvb_frontend.h
+===================================================================
+--- drivers/media/dvb/dvb-core/dvb_frontend.h (revision 1)
++++ drivers/media/dvb/dvb-core/dvb_frontend.h (working copy)
+@@ -41,14 +41,40 @@
+ #include "dvbdev.h"
+
+ struct dvb_frontend_tune_settings {
+- int min_delay_ms;
+- int step_size;
+- int max_drift;
+- struct dvb_frontend_parameters parameters;
++ int min_delay_ms;
++ int step_size;
++ int max_drift;
++ struct dvb_frontend_parameters parameters;
+ };
+
+ struct dvb_frontend;
+
++//NOTE : LINUX_2_6_31 related stuffs are added to make back-porting of frontend driver easier.
++
++#define LINUX_2_6_31 1
++
++#ifdef LINUX_2_6_31
++
++#define FE_TUNE_MODE_ONESHOT 0x01
++#define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */
++
++struct delayed_work {
++ struct work_struct work;
++ struct timer_list timer;
++};
++
++#define DVB_MAX_ADAPTERS 8
++
++#define DVB_UNSET (-1)
++
++#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \
++ static short adapter_nr[] = \
++ {[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \
++ module_param_array(adapter_nr, short, NULL, 0444); \
++ MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers")
++
++
++
+ struct dvb_tuner_info {
+ char name[128];
+
+@@ -61,6 +87,132 @@
+ u32 bandwidth_step;
+ };
+
++struct analog_parameters {
++ unsigned int frequency;
++ unsigned int mode;
++ unsigned int audmode;
++ u64 std;
++};
++
++enum dvbfe_modcod {
++ DVBFE_MODCOD_DUMMY_PLFRAME = 0,
++ DVBFE_MODCOD_QPSK_1_4,
++ DVBFE_MODCOD_QPSK_1_3,
++ DVBFE_MODCOD_QPSK_2_5,
++ DVBFE_MODCOD_QPSK_1_2,
++ DVBFE_MODCOD_QPSK_3_5,
++ DVBFE_MODCOD_QPSK_2_3,
++ DVBFE_MODCOD_QPSK_3_4,
++ DVBFE_MODCOD_QPSK_4_5,
++ DVBFE_MODCOD_QPSK_5_6,
++ DVBFE_MODCOD_QPSK_8_9,
++ DVBFE_MODCOD_QPSK_9_10,
++ DVBFE_MODCOD_8PSK_3_5,
++ DVBFE_MODCOD_8PSK_2_3,
++ DVBFE_MODCOD_8PSK_3_4,
++ DVBFE_MODCOD_8PSK_5_6,
++ DVBFE_MODCOD_8PSK_8_9,
++ DVBFE_MODCOD_8PSK_9_10,
++ DVBFE_MODCOD_16APSK_2_3,
++ DVBFE_MODCOD_16APSK_3_4,
++ DVBFE_MODCOD_16APSK_4_5,
++ DVBFE_MODCOD_16APSK_5_6,
++ DVBFE_MODCOD_16APSK_8_9,
++ DVBFE_MODCOD_16APSK_9_10,
++ DVBFE_MODCOD_32APSK_3_4,
++ DVBFE_MODCOD_32APSK_4_5,
++ DVBFE_MODCOD_32APSK_5_6,
++ DVBFE_MODCOD_32APSK_8_9,
++ DVBFE_MODCOD_32APSK_9_10,
++ DVBFE_MODCOD_RESERVED_1,
++ DVBFE_MODCOD_BPSK_1_3,
++ DVBFE_MODCOD_BPSK_1_4,
++ DVBFE_MODCOD_RESERVED_2
++};
++
++enum tuner_param {
++ DVBFE_TUNER_FREQUENCY = (1 << 0),
++ DVBFE_TUNER_TUNERSTEP = (1 << 1),
++ DVBFE_TUNER_IFFREQ = (1 << 2),
++ DVBFE_TUNER_BANDWIDTH = (1 << 3),
++ DVBFE_TUNER_REFCLOCK = (1 << 4),
++ DVBFE_TUNER_IQSENSE = (1 << 5),
++ DVBFE_TUNER_DUMMY = (1 << 31)
++};
++
++/*
++ * ALGO_HW: (Hardware Algorithm)
++ * ----------------------------------------------------------------
++ * Devices that support this algorithm do everything in hardware
++ * and no software support is needed to handle them.
++ * Requesting these devices to LOCK is the only thing required,
++ * device is supposed to do everything in the hardware.
++ *
++ * ALGO_SW: (Software Algorithm)
++ * ----------------------------------------------------------------
++ * These are dumb devices, that require software to do everything
++ *
++ * ALGO_CUSTOM: (Customizable Agorithm)
++ * ----------------------------------------------------------------
++ * Devices having this algorithm can be customized to have specific
++ * algorithms in the frontend driver, rather than simply doing a
++ * software zig-zag. In this case the zigzag maybe hardware assisted
++ * or it maybe completely done in hardware. In all cases, usage of
++ * this algorithm, in conjunction with the search and track
++ * callbacks, utilizes the driver specific algorithm.
++ *
++ * ALGO_RECOVERY: (Recovery Algorithm)
++ * ----------------------------------------------------------------
++ * These devices have AUTO recovery capabilities from LOCK failure
++ */
++enum dvbfe_algo {
++ DVBFE_ALGO_HW = (1 << 0),
++ DVBFE_ALGO_SW = (1 << 1),
++ DVBFE_ALGO_CUSTOM = (1 << 2),
++ DVBFE_ALGO_RECOVERY = (1 << 31)
++};
++
++struct tuner_state {
++ u32 frequency;
++ u32 tunerstep;
++ u32 ifreq;
++ u32 bandwidth;
++ u32 iqsense;
++ u32 refclock;
++};
++
++/*
++ * search callback possible return status
++ *
++ * DVBFE_ALGO_SEARCH_SUCCESS
++ * The frontend search algorithm completed and returned succesfully
++ *
++ * DVBFE_ALGO_SEARCH_ASLEEP
++ * The frontend search algorithm is sleeping
++ *
++ * DVBFE_ALGO_SEARCH_FAILED
++ * The frontend search for a signal failed
++ *
++ * DVBFE_ALGO_SEARCH_INVALID
++ * The frontend search algorith was probably supplied with invalid
++ * parameters and the search is an invalid one
++ *
++ * DVBFE_ALGO_SEARCH_ERROR
++ * The frontend search algorithm failed due to some error
++ *
++ * DVBFE_ALGO_SEARCH_AGAIN
++ * The frontend search algorithm was requested to search again
++ */
++enum dvbfe_search {
++ DVBFE_ALGO_SEARCH_SUCCESS = (1 << 0),
++ DVBFE_ALGO_SEARCH_ASLEEP = (1 << 1),
++ DVBFE_ALGO_SEARCH_FAILED = (1 << 2),
++ DVBFE_ALGO_SEARCH_INVALID = (1 << 3),
++ DVBFE_ALGO_SEARCH_AGAIN = (1 << 4),
++ DVBFE_ALGO_SEARCH_ERROR = (1 << 31),
++};
++
++
+ struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+@@ -71,22 +223,73 @@
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
++ int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
++ /** This is to allow setting tuner-specific configs */
++ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
++
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+ #define TUNER_STATUS_LOCKED 1
++#define TUNER_STATUS_STEREO 2
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
++ int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
++
++ /*
++ * These are provided seperately from set_params in order to facilitate silicon
++ * tuners which require sophisticated tuning loops, controlling each parameter seperately.
++ */
++ int (*set_state)(struct dvb_frontend *fe, enum tuner_param param, struct tuner_state *state);
++ int (*get_state)(struct dvb_frontend *fe, enum tuner_param param, struct tuner_state *state);
+ };
++struct analog_demod_info {
++ char *name;
++};
+
++struct analog_demod_ops {
++
++ struct analog_demod_info info;
++
++ void (*set_params)(struct dvb_frontend *fe,
++ struct analog_parameters *params);
++ int (*has_signal)(struct dvb_frontend *fe);
++ int (*is_stereo)(struct dvb_frontend *fe);
++ int (*get_afc)(struct dvb_frontend *fe);
++ void (*tuner_status)(struct dvb_frontend *fe);
++ void (*standby)(struct dvb_frontend *fe);
++ void (*release)(struct dvb_frontend *fe);
++ int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable);
++
++ /** This is to allow setting tuner-specific configuration */
++ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
++};
++struct dtv_property {
++ __u32 cmd;
++ __u32 reserved[3];
++ union {
++ __u32 data;
++ struct {
++ __u8 data[32];
++ __u32 len;
++ __u32 reserved1[3];
++ void *reserved2;
++ } buffer;
++ } u;
++ int result;
++} __attribute__ ((packed));
++
++
++#endif
++
+ struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+@@ -95,7 +298,7 @@
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+-
++#ifdef LINUX_2_6_31
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+@@ -106,11 +309,11 @@
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
++#endif
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
++ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+- int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+-
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+@@ -123,11 +326,27 @@
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+- int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+- int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+- int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
++ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, int arg);
++ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned int cmd);
+
+- struct dvb_tuner_ops tuner_ops;
++#ifdef LINUX_2_6_31
++ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
++ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
++
++ /* These callbacks are for devices that implement their own
++ * tuning algorithms, rather than a simple swzigzag
++ */
++ enum dvbfe_search (*search)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
++ int (*track)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
++
++ struct dvb_tuner_ops tuner_ops;
++ struct analog_demod_ops analog_ops;
++
++ int (*set_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
++ int (*get_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
++#endif
++
++ int (*set_sw_loopthrough)(struct dvb_frontend* fe, int* arg);
+ };
+
+ #define MAX_EVENT 8
+@@ -141,13 +360,102 @@
+ struct semaphore sem;
+ };
+
++
++#ifdef LINUX_2_6_31
++// 2.6.31
++typedef enum fe_pilot {
++ PILOT_ON,
++ PILOT_OFF,
++ PILOT_AUTO,
++} fe_pilot_t;
++
++typedef enum fe_rolloff {
++ ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */
++ ROLLOFF_20,
++ ROLLOFF_25,
++ ROLLOFF_AUTO,
++} fe_rolloff_t;
++
++typedef enum fe_delivery_system {
++ SYS_UNDEFINED,
++ SYS_DVBC_ANNEX_AC,
++ SYS_DVBC_ANNEX_B,
++ SYS_DVBT,
++ SYS_DSS,
++ SYS_DVBS,
++ SYS_DVBS2,
++ SYS_DVBH,
++ SYS_ISDBT,
++ SYS_ISDBS,
++ SYS_ISDBC,
++ SYS_ATSC,
++ SYS_ATSCMH,
++ SYS_DMBTH,
++ SYS_CMMB,
++ SYS_DAB,
++} fe_delivery_system_t;
++
++struct dtv_frontend_properties {
++
++ /* Cache State */
++ u32 state;
++
++ u32 frequency;
++ fe_modulation_t modulation;
++
++ fe_sec_voltage_t voltage;
++ fe_sec_tone_mode_t sectone;
++ fe_spectral_inversion_t inversion;
++ fe_code_rate_t fec_inner;
++ fe_transmit_mode_t transmission_mode;
++ u32 bandwidth_hz; /* 0 = AUTO */
++ fe_guard_interval_t guard_interval;
++ fe_hierarchy_t hierarchy;
++ u32 symbol_rate;
++ fe_code_rate_t code_rate_HP;
++ fe_code_rate_t code_rate_LP;
++
++ fe_pilot_t pilot;
++ fe_rolloff_t rolloff;
++
++ fe_delivery_system_t delivery_system;
++};
++
++
++
++#ifndef false
++#define false 0
++#endif
++
++#ifndef true
++#define true 1
++#endif
++
++#define KERN_CONT "<c>"
++
++#endif
++
++
+ struct dvb_frontend {
++#ifndef LINUX_2_6_31
++ struct dvb_frontend_ops* ops;
++ struct dvb_adapter *dvb;
++ void* demodulator_priv;
++ void* frontend_priv;
++#else
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void* demodulator_priv;
+- void* tuner_priv;
+- void* frontend_priv;
+- void* misc_priv;
++ void *tuner_priv;
++ void *frontend_priv;
++ void *sec_priv;
++ void *analog_demod_priv;
++ struct dtv_frontend_properties dtv_property_cache;
++#define DVB_FRONTEND_COMPONENT_TUNER 0
++ int (*callback)(void *adapter_priv, int component, int cmd, int arg);
++ int id;
++
++#endif
+ };
+
+ extern int dvb_register_frontend(struct dvb_adapter* dvb,
+@@ -155,8 +463,6 @@
+
+ extern int dvb_unregister_frontend(struct dvb_frontend* fe);
+
+-extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+-
+ extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+ extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
--- /dev/null
+Index: lib/kobject.c
+===================================================================
+--- lib/kobject.c (revision 1)
++++ lib/kobject.c (working copy)
+@@ -581,6 +581,7 @@
+ EXPORT_SYMBOL(kobject_init);
+ EXPORT_SYMBOL(kobject_register);
+ EXPORT_SYMBOL(kobject_unregister);
++EXPORT_SYMBOL(kobject_get_path);
+ EXPORT_SYMBOL(kobject_get);
+ EXPORT_SYMBOL(kobject_put);
+ EXPORT_SYMBOL(kobject_add);
--- /dev/null
+Index: drivers/mtd/brcmnand/bcm7xxx-nand.c
+===================================================================
+--- drivers/mtd/brcmnand/bcm7xxx-nand.c (revision 1)
++++ drivers/mtd/brcmnand/bcm7xxx-nand.c (working copy)
+@@ -48,6 +48,8 @@
+
+ #define PRINTK(...)
+ //#define PRINTK printk
++//
++//#define USE_SPLASH
+
+ #define DRIVER_NAME "bcm7xxx-nand"
+ #define DRIVER_INFO "Broadcom STB NAND controller"
+@@ -74,31 +76,25 @@
+ * start of flash 1f7f_ffff flashSize-8MB rootfs Linux File System
+ */
+ #define SMALLEST_FLASH_SIZE (16<<20)
++#if 0 /* csh */
+ #define DEFAULT_RESERVED_SIZE (8<<20)
+-#define DEFAULT_SPLASH_SIZE (1<<20)
++#else
++/*#define DEFAULT_RESERVED_SIZE (6<<20) */
++/* csh add boot partition 20090828 */
++/* csh splash */
++#ifdef USE_SPLASH
++#define DEFAULT_RESERVED_SIZE (12<<20)
++#else
++#define DEFAULT_RESERVED_SIZE (10<<20)
++#endif
++#endif
++#define DEFAULT_SPLASH_SIZE (2<<20)
+ #define DEFAULT_BBT0_SIZE_MB (1)
+ #define DEFAULT_BBT1_SIZE_MB (4)
+
+ #define ROOTFS_PART (0)
+
+-#if defined( CONFIG_MTD_BRCMNAND_DISABLE_XOR )
+-/* Implies new partition scheme, starting with 7420
+- cfe: 0-4MB (not mapped)
+- mtd0: rootfs: Starts at 4MB offset
+- mtd1: all flash less BBT0 (1MB) for flash <= 512MB
+- mtd2: Kernel (4MB)
+- mtd3: Data, for flash>512MB, from 512MB up to flash - BBT1 (4MB)
+- */
+-
+-#define ALL_PART (1)
+-#define KERNEL_PART (2)
+-#define DATA_PART (3)
+-#define AVAIL1_PART (-1)
+-
+-#define DEFAULT_ECM_SIZE (0)
+-#define DEFAULT_AVAIL1_SIZE (0)
+-
+-#elif defined( CONFIG_MTD_NEW_PARTITION )
++#ifdef CONFIG_MTD_NEW_PARTITION
+ /* New partition scheme, starting with 7420
+ mtd0: rootfs
+ mtd1: all flash less BBT0 (1MB) for flash <= 512MB
+@@ -114,26 +110,20 @@
+ #define DEFAULT_ECM_SIZE (0)
+ #define DEFAULT_AVAIL1_SIZE (0)
+
+-#else
+- #if defined( CONFIG_MTD_ECM_PARTITION )
++#elif defined( CONFIG_MTD_ECM_PARTITION )
+ #define DEFAULT_OCAP_SIZE (6<<20)
+ #define DEFAULT_AVAIL1_SIZE (32<<20)
+ #define DEFAULT_ECM_SIZE (DEFAULT_OCAP_SIZE+DEFAULT_AVAIL1_SIZE)
+ #define AVAIL1_PART (1)
+ #define OCAP_PART (2)
+- #else
++#else
+ #define DEFAULT_ECM_SIZE (0)
+ #define DEFAULT_OCAP_SIZE (0)
+ #define DEFAULT_AVAIL1_SIZE (0)
+ #define AVAIL1_PART (-1)
+ #define OCAP_PART (-1)
+- #endif // if ECM
+-
+- /* Definitions for NOR+NAND */
+-#define ALL_PART (1)
+-#define KERNEL_PART (2)
+-#define DATA_PART (3)
+ #endif
++
+ #define DEFAULT_ROOTFS_SIZE (SMALLEST_FLASH_SIZE - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
+
+ #define N_ROOTFS "rootfs"
+@@ -147,22 +137,9 @@
+ #define N_ALL "all"
+
+
+-static struct mtd_partition bcm7XXX_no_xor_partition[] =
++static struct mtd_partition bcm7XXX_nand_parts[] =
++#ifdef CONFIG_MTD_NEW_PARTITION
+ {
+- /* XOR disabled: Everything is shifted down 4MB */
+- { name: N_ROOTFS, offset: 0x00400000, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) }, // Less 1MB for BBT
+- { name: N_ALL, offset: 0, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) },
+- { name: N_KERNEL, offset: 0x00b00000, size: 4<<20 },
+- /* BBT0 1MB not mountable by anyone */
+-
+- /* Following partitions only present on flash with size > 512MB */
+- { name: N_DATA, offset: 0x20000000, size: 0 },
+- /* BBT1 4MB not mountable by anyone */
+- {name: NULL, offset: 0, size: 0} /* End marker */
+-};
+-
+-static struct mtd_partition bcm7XXX_new_partition[] =
+-{
+ { name: N_ROOTFS, offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ { name: N_ALL, offset: 0x0, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) },
+ { name: N_KERNEL, offset: 0x00800000, size: 4<<20 },
+@@ -174,8 +151,9 @@
+ {name: NULL, offset: 0, size: 0} /* End marker */
+ };
+
+-static struct mtd_partition bcm7XXX_old_partition[] =
++#else
+ {
++#if 0 /* csh */
+ { name: N_ROOTFS, offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ #ifdef CONFIG_MTD_ECM_PARTITION
+ { name: N_AVAIL1, offset: DEFAULT_ROOTFS_SIZE, size: DEFAULT_AVAIL1_SIZE },
+@@ -189,18 +167,49 @@
+ /* Add 1 extra place-holder partition for splash, and a safety guard element */
+ {name: NULL, offset: 0, size: 0},
+ {name: NULL, offset: 0, size: 0}
+-};
+-
+-#if defined( CONFIG_MTD_BRCMNAND_DISABLE_XOR )
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+-
+-#elif defined( CONFIG_MTD_NEW_PARTITION )
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_new_partition;
+-
+ #else
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
++#if 0
++#define ROOTFS_PART (0)
++ { name: "rootfs", offset: 0, size: DEFAULT_ROOTFS_SIZE }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x00A00000, size: 2<<20 },
++ { name: "cfe", offset: 0x00C00000, size: 2<<20 },
++ { name: "nvm", offset: 0x00E00000, size: 2<<20 },
++ /* BBT 1MB not mountable by anyone */
++ { name: "data", offset: 0x20000000, size: 0 },
++/* Add 1 extra place-holder partition for splash, and a safety guard element */
++ {name: NULL, offset: 0, size: 0},
++ {name: NULL, offset: 0, size: 0}
++#else
++/* csh add boot partition 20090828 */
++#define ROOTFS_PART (0)
++ { name: "rootfs", offset: 0, size: DEFAULT_ROOTFS_SIZE }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++#ifndef USE_SPLASH /* csh splash */
++ { name: "kernel", offset: 0x00600000, size: 2<<20 },
++ { name: "boot", offset: 0x00800000, size: 4<<20 },
++#else
++ { name: "kernel", offset: 0x00500000, size: 2<<20 },
++ { name: "boot", offset: 0x00700000, size: 4<<20 },
++ { name: "bootimg", offset: 0x00B00000, size: DEFAULT_SPLASH_SIZE },
+ #endif
++#if 0 /*12 09 */
++ { name: "cfe", offset: 0x00C00000, size: 2<<20 },
++#else
++ { name: "cfe", offset: 0x00C00000, size: 1<<20 },
++ { name: "mac", offset: 0x00D00000, size: 1<<19 },
++ { name: "env", offset: 0x00D80000, size: 1<<19 },
++#endif
++ { name: "nvm", offset: 0x00E00000, size: 1<<20 }, //csh change to 1 20091207
++ /* BBT 1MB not mountable by anyone */
++ { name: "data", offset: 0x20000000, size: 0 },
++/* Add 1 extra place-holder partition for splash, and a safety guard element */
++ {name: NULL, offset: 0, size: 0},
++ {name: NULL, offset: 0, size: 0}
+
++#endif
++#endif
++};
++#endif
++
+ struct brcmnand_info {
+ struct mtd_info mtd;
+ struct mtd_partition* parts;
+@@ -253,41 +262,17 @@
+ unsigned int ocap_size = DEFAULT_OCAP_SIZE;
+ #endif
+ unsigned int avail1_size = DEFAULT_AVAIL1_SIZE;
+- int oldNumParts = ARRAY_SIZE(bcm7XXX_old_partition);
+
+-//printk("========================> %s\n", __FUNCTION__);
+-
+-
+- /*
+- * Is XOR disabled? if so use the new partition.
+- */
+- if (nandinfo->brcmnand.xor_disable) {
+- bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+-
+- if (device_size(mtd) <= (512ULL <<20)) {
+- bcm7XXX_nand_parts[ALL_PART].size =
+- device_size(mtd) - (uint64_t) (DEFAULT_BBT0_SIZE_MB<<20);
+- *numParts = 3;
+- }
+- else {
+- bcm7XXX_nand_parts[ALL_PART].size = ((512-DEFAULT_BBT1_SIZE_MB)<<20);
+- *numParts = 4;
+- }
+- for (i=0; i<*numParts;i++) {
+- bcm7XXX_nand_parts[i].ecclayout = mtd->ecclayout;
+- }
+-
+- // Kernel partition will be initialized by Env Vars.
+- //printk("<-- %s, device_size=%0llx\n", __FUNCTION__, device_size(mtd));
+- //print_partition(*numParts);
+-
+- nandinfo->parts = bcm7XXX_nand_parts;
+-
+- return;
++ if (device_size(mtd) <= (512ULL <<20)) {
++ size = (unsigned long) device_size(mtd); // mtd->size may be different than nandinfo->size
++ *numParts = ARRAY_SIZE(bcm7XXX_nand_parts) - 3; /* take into account the extra 2 parts
++ and the data partition */
++ } else {
++ size = 512 << 20;
++ *numParts = ARRAY_SIZE(bcm7XXX_nand_parts) - 2; // take into account the extra 2 parts
+ }
+
+-
+-#if defined( CONFIG_MTD_NEW_PARTITION )
++#ifdef CONFIG_MTD_NEW_PARTITION
+ if (device_size(mtd) <= (512ULL <<20)) {
+ bcm7XXX_nand_parts[ALL_PART].size =
+ device_size(mtd) - (uint64_t) (DEFAULT_BBT0_SIZE_MB<<20);
+@@ -308,53 +293,8 @@
+ nandinfo->parts = bcm7XXX_nand_parts;
+
+ return;
+-#else
+-
+- /* NAND on CS1, same partition as that of CONFIG_MTD_NEW_PARTITION */
+-PRINTK("nandinfo->brcmnand.CS[0] = %d\n", nandinfo->brcmnand.CS[0]);
+-PRINTK("bcm7XXX_nand_parts=%p, bcm7XXX_new_partition=%p, bcm7XXX_old_partition=%p\n",
+- bcm7XXX_nand_parts, &bcm7XXX_new_partition[0], &bcm7XXX_old_partition[0]);
+- if (nandinfo->brcmnand.CS[0] != 0) {
+- bcm7XXX_nand_parts = bcm7XXX_new_partition;
+-
+- if (device_size(mtd) <= (512ULL <<20)) {
+- bcm7XXX_nand_parts[0].size = device_size(mtd) - DEFAULT_RESERVED_SIZE - ecm_size;
+- bcm7XXX_nand_parts[ALL_PART].size =
+- device_size(mtd) - ((uint64_t) (DEFAULT_BBT0_SIZE_MB) <<20);
+- *numParts = 3;
+- }
+- else {
+- bcm7XXX_nand_parts[0].size = (512ULL <<20) - DEFAULT_RESERVED_SIZE - ecm_size;
+- bcm7XXX_nand_parts[ALL_PART].size =
+- device_size(mtd) - ((uint64_t) (DEFAULT_BBT1_SIZE_MB)<<20);
+- *numParts = 4;
+- }
+- for (i=0; i<*numParts;i++) {
+- bcm7XXX_nand_parts[i].ecclayout = mtd->ecclayout;
+- }
++#elif defined( CONFIG_MTD_ECM_PARTITION )
+
+- nandinfo->parts = bcm7XXX_nand_parts;
+-
+-#if 1
+-PRINTK("%s: NAND on CS1: numparts=%d\n", __FUNCTION__, *numParts);
+-print_partition(*numParts);
+-#endif
+-
+- return;
+- }
+-
+- /* From now on, we are only dealing with old partition table */
+- if (device_size(mtd) <= (512ULL <<20)) {
+- size = (unsigned long) device_size(mtd); // mtd->size may be different than nandinfo->size
+- *numParts = oldNumParts - 3; /* take into account the extra 2 parts
+- and the data partition */
+- } else {
+- size = 512 << 20;
+- *numParts = oldNumParts - 2; // take into account the extra 2 parts
+- }
+-
+- #if defined( CONFIG_MTD_ECM_PARTITION )
+-
+ /* Do not generate AVAIL1 partition if usable flash size is less than 64MB */
+
+ if (size < (64<<20)) {
+@@ -370,12 +310,11 @@
+ ecm_size = ocap_size + avail1_size;
+ }
+
+- #endif
++
+ #endif
+ nandinfo->parts = bcm7XXX_nand_parts;
+ bcm7XXX_nand_parts[0].size = size - DEFAULT_RESERVED_SIZE - ecm_size;
+ bcm7XXX_nand_parts[0].ecclayout = mtd->ecclayout;
+-PRINTK("numParts=%d\n", numParts);
+ PRINTK("Part[%d] name=%s, size=%llx, offset=%llx\n", i, bcm7XXX_nand_parts[0].name,
+ bcm7XXX_nand_parts[0].size, bcm7XXX_nand_parts[0].offset);
+
+@@ -550,6 +489,7 @@
+ int i; // Index into mtd partition
+
+ // Not configured for Splash, but does CFE define it?
++#ifndef USE_SPLASH /* csh splash*/
+ if (!gBcmSplash) {
+ for (i=0; i < gCfePartitions.numParts; i++) {
+ if (gCfePartitions.parts[i].part == SPLASH_PT) {
+@@ -558,6 +498,7 @@
+ }
+ }
+ }
++#endif
+
+ /*
+ * Remove OCAP partitions if Env Vars are defined
+@@ -640,7 +581,6 @@
+ //unsigned long size = res->end - res->start + 1;
+ int err = 0;
+ int numParts = 0;
+- struct brcmnand_chip* chip;
+
+ gPageBuffer = NULL;
+ info = kmalloc(sizeof(struct brcmnand_info), GFP_KERNEL);
+@@ -672,7 +612,7 @@
+ //info->brcmnand.mmcontrol = NULL; // THT: Sync Burst Read TBD. pdata->mmcontrol;
+
+ info->mtd.name = pdev->dev.bus_id;
+- chip = info->mtd.priv = &info->brcmnand;
++ info->mtd.priv = &info->brcmnand;
+ info->mtd.owner = THIS_MODULE;
+
+ /* Enable the following for a flash based bad block table */
+@@ -690,19 +630,12 @@
+
+ //print_partition(numParts);
+
+- // Nand not on CS0, set it up to allow 1 partition, as in the new partition scheme
+- if (chip->CS[0] != 0) {
+- bcm7XXX_nand_parts = bcm7XXX_new_partition;
+- }
+-
+ if (gCfePartitions.numParts == 0) {
+ brcmnanddrv_setup_mtd_partitions(info, &numParts);
+ }
+ else {
+ brcmnanddrv_setup_mtdpart_cfe_env(info, &numParts);
+ }
+-
+-
+
+ //print_partition(numParts);
+
+@@ -711,20 +644,6 @@
+ //printk(" dev_set_drvdata\n");
+ dev_set_drvdata(&pdev->dev, info);
+ //printk("<-- brcmnanddrv_probe\n");
+-
+-/* NOR+NAND configuration */
+-#ifdef CONFIG_MTD_BRCMNAND_NOR_ACCESS
+- /* Append NOR partition to the end */
+- {
+- extern void (*gInitialize_Nor_Partition)(void);
+-
+- if (gInitialize_Nor_Partition) {
+- (*gInitialize_Nor_Partition) ();
+- }
+- // Else NAND is loaded first, NOR will append when it is started.
+- }
+-
+-#endif
+ return 0;
+
+
+Index: drivers/mtd/brcmnand/brcmnand_base.c
+===================================================================
+--- drivers/mtd/brcmnand/brcmnand_base.c (revision 1)
++++ drivers/mtd/brcmnand/brcmnand_base.c (working copy)
+@@ -39,8 +39,6 @@
+ #include <linux/byteorder/generic.h>
+ #include <linux/reboot.h>
+ #include <linux/vmalloc.h>
+-#include <linux/dma-mapping.h>
+-#include <linux/interrupt.h>
+
+ #include <asm/io.h>
+ #include <asm/bug.h>
+@@ -60,26 +58,6 @@
+
+ //#define DEBUG_HW_ECC
+
+-//#define BRCMNAND_READ_VERIFY
+-#undef BRCMNAND_READ_VERIFY
+-
+-//#ifdef CONFIG_MTD_BRCMNAND_VERIFY_WRITE
+-//#define BRCMNAND_WRITE_VERIFY
+-//#endif
+-#undef BRCMNAND_WRITE_VERIFY
+-
+-//#define DEBUG_ISR
+-#undef DEBUG_ISR
+-#if defined( DEBUG_ISR ) || defined(BRCMNAND_READ_VERIFY) \
+- || defined(BRCMNAND_WRITE_VERIFY)
+-#if defined(DEBUG_ISR ) || defined(BRCMNAND_READ_VERIFY)
+-#define EDU_DEBUG_4
+-#endif
+-#if defined(DEBUG_ISR ) || defined(BRCMNAND_WRITE_VERIFY)
+-#define EDU_DEBUG_5
+-#endif
+-#endif
+-
+ #define my_be32_to_cpu(x) be32_to_cpu(x)
+
+ #if defined( CONFIG_MTI_R24K ) || defined( CONFIG_MTI_R34K ) || defined( CONFIG_MTD_BRCMNAND_EDU )
+@@ -131,7 +109,21 @@
+
+ #define HW_AUTOOOB_LAYOUT_SIZE 32 /* should be enough */
+
++#define BRCMNAND_CORRECTABLE_ECC_ERROR (1)
++#define BRCMNAND_SUCCESS (0)
++#define BRCMNAND_UNCORRECTABLE_ECC_ERROR (-1)
++#define BRCMNAND_FLASH_STATUS_ERROR (-2)
++#define BRCMNAND_TIMED_OUT (-3)
+
++#ifdef CONFIG_MTD_BRCMNAND_EDU
++#define BRCMEDU_CORRECTABLE_ECC_ERROR (4)
++#define BRCMEDU_UNCORRECTABLE_ECC_ERROR (-4)
++
++#define BRCMEDU_MEM_BUS_ERROR (-5)
++
++//uint32_t EDU_ldw;
++#endif // #ifdef CONFIG_MTD_BRCMNAND_EDU
++
+ #ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+ /* Avoid infinite recursion between brcmnand_refresh_blk() and brcmnand_read_ecc() */
+ static atomic_t inrefresh = ATOMIC_INIT(0);
+@@ -166,7 +158,6 @@
+ uint32 options;
+ uint32_t idOptions; // Whether chip has all 5 ID bytes
+ uint32 timing1, timing2; // Specify a non-zero value to override the default timings.
+- int nop; // Number of partial writes per page
+ unsigned int ctrlVersion; // Required controller version if different than 0
+ } brcmnand_chip_Id;
+
+@@ -183,7 +174,6 @@
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .timing1 = 0, //00070000,
+ .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0, /* THT Verified on data-sheet 7/10/08: Allows 4 on main and 4 on OOB */
+ },
+
+@@ -195,7 +185,6 @@
+ .idOptions = 0,
+ .timing1 = 0, //0x6474555f,
+ .timing2 = 0, //0x00000fc7,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+ { /* 2 */
+@@ -206,7 +195,6 @@
+ .idOptions = 0,
+ .timing1 = 0, //0x6474555f,
+ .timing2 = 0, //0x00000fc7,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+ #if 0 // EOL
+@@ -228,7 +216,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -239,7 +226,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+ /* This is just the 16 bit version of the above?
+@@ -259,8 +245,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 6 */
+@@ -270,8 +255,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+
+@@ -282,7 +266,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -295,7 +278,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -306,7 +288,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -317,7 +298,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -328,7 +308,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -339,7 +318,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -350,7 +328,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -361,7 +338,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -372,7 +348,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -383,7 +358,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -394,7 +368,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -405,7 +378,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -416,7 +388,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -427,7 +398,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -438,11 +408,10 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+- /* The following 6 ST chips only allow 4 writes per page, and requires version2.1 (4) of the controller or later */
++ /* The following 6 ST chips only allow 4 writes per page, and requires version2.2 (5) of the controller or later */
+ { /* 22 */
+ .chipId = ST_NAND01GW3B,
+ .mafId = FLASHTYPE_ST,
+@@ -450,8 +419,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 23 */
+@@ -461,8 +429,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 24 */
+@@ -472,8 +439,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+ { /* 25 */
+ .chipId = ST_NAND02GW3B,
+@@ -482,8 +448,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 26 */
+@@ -493,8 +458,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+ { /* 27 */
+ .chipId = ST_NAND08GW3B,
+@@ -503,8 +467,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 28 */
+@@ -514,9 +477,8 @@
+ .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+- .timing1 = 0,
++ .timing1 = 0, //00070000,
+ .timing2 = 0,
+- .nop=1,
+ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_3_0,
+ },
+
+@@ -527,9 +489,8 @@
+ .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES_TYPE2,
+- .timing1 = 0,
++ .timing1 = 0, //00070000,
+ .timing2 = 0,
+- .nop=1,
+ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_3_0,
+ },
+
+@@ -540,24 +501,10 @@
+ .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+- .timing1 = 0,
++ .timing1 = 0, //00070000,
+ .timing2 = 0,
+- .nop=1,
+ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_3_0,
+ },
+-
+- { /* 31 */
+- .chipId = HYNIX_HY27UAG8T2M,
+- .mafId = FLASHTYPE_HYNIX,
+- .chipIdStr = "HYNIX_HY27UAG8T2M",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
+- //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+- .idOptions = BRCMNAND_ID_EXT_BYTES,
+- .timing1 = 0,
+- .timing2 = 0,
+- .nop=1,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_3_0,
+- },
+
+ { /* LAST DUMMY ENTRY */
+ .chipId = 0,
+@@ -613,7 +560,7 @@
+
+ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
+ (nandCtrlReg & 0x3) != 0) {
+- printk("brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
++ printk(KERN_ERR "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+ if (gdebug > 3) printk("%s: CMDREG=%08x val=%08x\n", __FUNCTION__, (unsigned int) nandCtrlReg, (unsigned int)*pReg);
+ return (uint32_t) (*pReg);
+@@ -627,7 +574,7 @@
+
+ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
+ (nandCtrlReg & 0x3) != 0) {
+- printk( "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
++ printk(KERN_ERR "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+ *pReg = (volatile unsigned long) (val);
+ if (gdebug > 3) printk("%s: CMDREG=%08x val=%08x\n", __FUNCTION__, nandCtrlReg, val);
+@@ -670,14 +617,13 @@
+ }
+
+ if (gdebug) printk("CS=%d, chip->CS[cs]=%d\n", cs, chip->CS[cs]);
+- // ldw is lower 32 bit of chipOffset, need to add pbase when on CS0 and XOR is ON.
+- if (!chip->xor_disable[cs]) {
++ // ldw is lower 32 bit of chipOffset, need to add pbase when on CS0
++ if (chip->CS[cs] == 0) {
+ ldw = chipOffset.s.low + chip->pbase;
+- }
++ }
+ else {
+ ldw = chipOffset.s.low;
+- }
+-
++ }
+ udw = chipOffset.s.high | (chip->CS[cs] << 16);
+
+ if (gdebug > 3) printk("%s: offset=%0llx cs=%d ldw = %08x, udw = %08x\n", __FUNCTION__, offset, cs, ldw, udw);
+@@ -692,7 +638,7 @@
+ #if 1
+ /* Dont delete, may be useful for debugging */
+
+-static void print_diagnostics(struct brcmnand_chip* chip)
++static void print_diagnostics(void)
+ {
+ uint32_t nand_acc_control = brcmnand_ctrl_read(BCHP_NAND_ACC_CONTROL);
+ uint32_t nand_select = brcmnand_ctrl_read(BCHP_NAND_CS_NAND_SELECT);
+@@ -703,7 +649,7 @@
+ uint32_t pageAddrExt = brcmnand_ctrl_read(BCHP_NAND_PROGRAM_PAGE_EXT_ADDR);
+ #endif
+
+-
++ uint32_t ebiCSBase0 = * ((volatile unsigned long*) (0xb0000000|BCHP_EBI_CS_BASE_0));
+ //unsigned long nand_timing1 = brcmnand_ctrl_read(BCHP_NAND_TIMING_1);
+ //unsigned long nand_timing2 = brcmnand_ctrl_read(BCHP_NAND_TIMING_2);
+
+@@ -712,17 +658,7 @@
+ #if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_1_0
+ printk("PAGE_EXT_ADDR=%08x\n", pageAddrExt);
+ #endif
+- if (chip->CS[0] == 0) {
+- uint32_t ebiCSBase0 = * ((volatile unsigned long*) (0xb0000000|BCHP_EBI_CS_BASE_0));
+- printk("PAGE_ADDR=%08x, \tCS0_BASE=%08x\n", pageAddr, ebiCSBase0);
+- }
+- else {
+- //uint32_t ebiCSBaseN = * ((volatile unsigned long*) (0xb0000000|(BCHP_EBI_CS_BASE_0));
+- uint32_t csNandBaseN = *(volatile unsigned long*) (0xb0000000 + BCHP_EBI_CS_BASE_0 + 8*chip->CS[0]);
+-
+- printk("PAGE_ADDR=%08x, \tCS%-d_BASE=%08x\n", pageAddr, chip->CS[0], csNandBaseN);
+- printk("pbase=%08lx, vbase=%p\n", chip->pbase, chip->vbase);
+- }
++ printk("PAGE_ADDR=%08x, \tCS0_BASE=%08x\n", pageAddr, ebiCSBase0);
+ }
+ #endif
+
+@@ -739,51 +675,6 @@
+ nand_acc_control, nand_config, flash_id, nand_timing1, nand_timing2);
+ }
+
+-#define NUM_NAND_REGS (1+((BCHP_NAND_BLK_WR_PROTECT-BCHP_NAND_REVISION)/4))
+-
+-static void print_nand_ctrl_regs(void)
+-{
+- int i;
+-
+- for (i=0; i<NUM_NAND_REGS; i++) {
+- uint32_t reg = (uint32_t) (BCHP_NAND_REVISION+(i*4));
+- uint32_t regval;
+- uint32_t regoff = reg - BCHP_NAND_REVISION; // i*4
+-
+- if ((i % 4) == 0) {
+- printk("\n%08x:", reg);
+- }
+-
+-#if CONFIG_MTD_BRCMNAND_VERSION < CONFIG_MTD_BRCMNAND_VERS_1_0
+- // V0.0, V0.1 7401Cx
+- if (regoff == 0x14 || regoff == 0x18 || regoff == 0x1c ) { // No NAND register at 0x281c
+- regval = 0;
+- }
+-#elif CONFIG_MTD_BRCMNAND_VERSION < CONFIG_MTD_BRCMNAND_VERS_2_0
+- // V1.0 7440Bx
+- if (regoff == 0x18 || regoff == 0x1c ) { // No NAND register at 0x281c
+- regval = 0;
+- }
+-#elif CONFIG_MTD_BRCMNAND_VERSION < CONFIG_MTD_BRCMNAND_VERS_3_0
+- // V2.x 7325, 7335, 7405bx
+- if (regoff == 0x1c) { // No NAND register at 0x281c
+- regval = 0;
+- }
+-#else // if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_3_0
+- // V3.x 3548, 7420a0, 7420b0
+- if (regoff == 0x1c || regoff == 0x44 || regoff == 0x4c || regoff == 0x5c
+- || regoff == 0x88 || regoff == 0x8c
+- || regoff == 0xb8 || regoff == 0xbc) {
+- regval = 0;
+- }
+-#endif
+- else {
+- regval = (uint32_t) brcmnand_ctrl_read(reg);
+- }
+- printk(" %08x", regval);
+- }
+-}
+-
+ void print_NandCtrl_Status(void)
+ {
+ #ifdef CONFIG_MTD_BRCMNAND_EDU
+@@ -1021,8 +912,11 @@
+ uint32_t rd_data;
+
+
+- rd_data = ISR_cache_is_valid();
++ rd_data = ISR_cache_is_valid(intr);
+
++
++
++
+ if (rd_data == 0) {
+ /* timed out */
+ printk("%s: rd_data=0 TIMEOUT\n", __FUNCTION__);
+@@ -1158,7 +1052,7 @@
+ return 0;
+ }
+
+- if (state != FL_READING && (!wr_preempt_en) && !in_interrupt())
++ if (state != FL_READING && (!wr_preempt_en))
+ cond_resched();
+ //touch_softlockup_watchdog();
+ }
+@@ -1192,10 +1086,6 @@
+
+ if (ready & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK &&
+ (ready & BCHP_NAND_INTFC_STATUS_SPARE_AREA_VALID_MASK)) {
+-
+-
+-#if 0
+-// THT 6/15/09: Reading OOB would not affect ECC
+ int ecc;
+
+ if (!raw) {
+@@ -1205,10 +1095,9 @@
+ return -1;
+ }
+ }
+-#endif
+ return 1;
+ }
+- if (state != FL_READING && !wr_preempt_en && !in_interrupt())
++ if (state != FL_READING && !wr_preempt_en)
+ cond_resched();
+ }
+
+@@ -1261,7 +1150,7 @@
+ //}
+ //return BRCMNAND_SUCCESS;
+ }
+- if (state != FL_READING && (!wr_preempt_en) && !in_interrupt())
++ if (state != FL_READING && (!wr_preempt_en))
+ cond_resched();
+
+ }
+@@ -1292,7 +1181,7 @@
+ uint32_t rd_data;
+
+ if (gdebug > 3 ) {
+-printk("%s: intr_status = %08x\n", __FUNCTION__, intr_status); }
++printk("%s: intr_status = %08x\n", intr_status); }
+
+ if (intr_status == 0) {
+ /* EDU_read timed out */
+@@ -1319,7 +1208,7 @@
+ */
+
+ if (!(intr_status & HIF_INTR2_CTRL_READY)) {
+- (void) ISR_cache_is_valid();
++ (void) ISR_cache_is_valid(0);
+ }
+ #endif
+ /*
+@@ -1356,12 +1245,9 @@
+ #endif
+
+
+-/*
+- * Returns 1 on success,
+- * 0 on error
+- */
+
+
++
+ static int brcmnand_ctrl_write_is_complete(struct mtd_info *mtd, int* outp_needBBT)
+ {
+ int err;
+@@ -1384,188 +1270,8 @@
+ }
+
+
+-
+-
+-//#define EDU_DEBUG_2
+-#undef EDU_DEBUG_2
+-
+-// EDU_DEBUG_4: Verify on Read
+-//#define EDU_DEBUG_4
+-//#undef EDU_DEBUG_4
+-
+-// EDU_DEBUG_5: Verify on Write
+-//#define EDU_DEBUG_5
+-//#undef EDU_DEBUG_5
+-
+-#if defined( EDU_DEBUG_2 ) || defined( EDU_DEBUG_4 ) || defined( EDU_DEBUG_5 )
+-/* 3548 internal buffer is 4K in size */
+-//static uint32_t edu_lbuf[2048];
+-static uint32_t* edu_buf32;
+-static uint8_t* edu_buf; // Used by EDU in Debug2
+-static uint8_t* ctrl_buf; // Used by Ctrl in Debug4
+-static uint32_t ctrl_oob32[4];
+-static uint8_t* ctrl_oob = (uint8_t*) ctrl_oob32;
+-
+-#define PATTERN 0xa55a0000
+-
+-#define EDU_BUFSIZE_B (512)
+-// One before and one after
+-#define EDU_BUF32_SIZE_B (EDU_BUFSIZE_B*3)
+-
+-// Same as above in DW instead
+-#define EDU_BUFSIZE_DW (EDU_BUFSIZE_B/4)
+-#define EDU_BUF32_SIZE_DW (EDU_BUF32_SIZE_B/4)
+-
+-// Real buffer starts at 1/3
+-#define EDU_BUF_START_DW (EDU_BUF32_SIZE_DW/3)
+-
+-
+-static void init_edu_buf(void)
+-{
+- /* Write pattern */
+- int i;
+-
+- if (!edu_buf32) {
+- edu_buf32 = (uint32_t*) kmalloc(EDU_BUF32_SIZE_B, GFP_KERNEL);
+- if (!edu_buf32) {
+- printk("%s: Out of memory\n", __FUNCTION__);
+- BUG();
+- }
+-
+- edu_buf = ctrl_buf = (uint8_t*) &edu_buf32[EDU_BUF_START_DW];
+- printk("%s: Buffer allocated at %p, %d bytes\n", __FUNCTION__, edu_buf32, EDU_BUF32_SIZE_B);
+- printk("Real buffer starts at %p\n", ctrl_buf);
+- }
+-
+- for (i=0; i<EDU_BUF32_SIZE_DW; i++) {
+- edu_buf32[i] = PATTERN | i;
+- }
+-}
+-
+-static int verify_edu_buf(void)
+-{
+- int i;
+- int ret = 0;
+-
+- for (i=0; i<EDU_BUF_START_DW; i++) {
+- if (edu_buf32[i] != (PATTERN | i)) {
+- printk("############ %s: pattern overwritten at offset %d, expect %08x, found %08x\n",
+- __FUNCTION__, i*4, PATTERN | i, edu_buf32[i]);
+- ret++;
+- }
+- }
+- for (i=EDU_BUF_START_DW+EDU_BUFSIZE_DW; i<EDU_BUF32_SIZE_DW; i++) {
+- if (edu_buf32[i] != (PATTERN | i)) {
+- printk("############ %s: pattern overwritten at offset %d, expect %08x, found %08x\n",
+- __FUNCTION__, i*4, PATTERN | i, edu_buf32[i]);
+- ret++;
+- }
+- }
+-if (ret) printk("+++++++++++++++ %s: %d DW overwritten by EDU\n", __FUNCTION__, ret);
+- return ret;
+-}
+-
+-
+-static uint8_t edu_write_buf[512];
+-
+-
+-
+ #ifdef CONFIG_MTD_BRCMNAND_EDU
+-#define NUM_EDU_REGS (1+((BCHP_EDU_ERR_STATUS-BCHP_EDU_CONFIG)/4))
+-#else
+-#define NUM_EDU_REGS 1
+-#endif
+
+-#define MAX_DUMPS 20
+-
+-typedef struct nand_dump {
+- loff_t offset;
+- uint32_t physAddr;
+- struct brcmnand_chip* chip;
+- struct register_dump_t {
+- unsigned long timestamp;
+- uint32_t nand_regs[NUM_NAND_REGS]; // NAND register dump
+- uint32_t edu_regs[NUM_EDU_REGS]; // EDU register
+- uint32_t hif_intr2; // HIF_INTR2 Interrupt status
+- uint8_t data[512]; // NAND controller cache
+- } dump[MAX_DUMPS];
+- //uint8_t udata[512]; // Uncached
+-} nand_dump_t; // Before and after
+-nand_dump_t nandDump;
+-int numDumps = 0;
+-
+-
+-#ifdef CONFIG_MTD_BRCMNAND_EDU
+-static void print_dump_nand_regs(int which)
+-{
+- int i;
+-
+- printk("NAND registers snapshot #%d: TS=%0lx, offset=%0llx, PA=%08x\n",
+- 1+which, nandDump.dump[which].timestamp, nandDump.offset, nandDump.physAddr);
+- for (i=0; i<NUM_NAND_REGS; i++) {
+- if ((i % 4) == 0) {
+- printk("\n%08x:", BCHP_NAND_REVISION+(i*4));
+- }
+- printk(" %08x", nandDump.dump[which].nand_regs[i]);
+- }
+- printk("\nEDU registers:\n");
+- for (i=0; i<NUM_EDU_REGS; i++) {
+- if ((i % 4) == 0) {
+- printk("\n%08x:", BCHP_EDU_CONFIG+(i*4));
+- }
+- printk(" %08x", nandDump.dump[which].edu_regs[i]);
+- }
+- printk("\n HIF_INTR2_STATUS=%08x\n", nandDump.dump[which].hif_intr2);
+- printk("\nNAND controller Internal cache:\n");
+- print_databuf(nandDump.dump[which].data, 512);
+-}
+-
+-void dump_nand_regs(struct brcmnand_chip* chip, loff_t offset, uint32_t pa, int which)
+-{
+- int i;
+-
+- /* We don't have the value of offset during snapshot #2 */
+- if (which == 0) {nandDump.offset = offset; nandDump.physAddr = pa;nandDump.chip = chip;}
+-
+- nandDump.dump[which].timestamp = jiffies;
+-
+- for (i=0; i<NUM_NAND_REGS; i++) {
+- uint32_t reg = BCHP_NAND_REVISION+(i*4);
+- uint32_t regval;
+-
+- if (reg == 0x281c) { // No NAND register at 0x281c
+- regval = 0;
+- }
+- else {
+- regval = brcmnand_ctrl_read(reg);
+- }
+- nandDump.dump[which].nand_regs[i] = regval;
+- }
+- for (i=0; i<NUM_EDU_REGS; i++) {
+- nandDump.dump[which].edu_regs[i] = EDU_volatileRead(EDU_BASE_ADDRESS + BCHP_EDU_CONFIG + ( i*4));
+- }
+- nandDump.dump[which].hif_intr2 = EDU_volatileRead(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
+- brcmnand_from_flash_memcpy32(nandDump.chip, &nandDump.dump[which].data[0], nandDump.offset, 512);
+-}
+-
+-#else
+-
+-#define print_dump_nand_regs(...)
+-
+-#define dump_nand_regs(...)
+-
+-#endif // EDU_DEBUG_2,4,5
+-#endif
+-
+-
+-#ifdef CONFIG_MTD_BRCMNAND_EDU
+-
+-
+-/*
+- * Returns 1 on success,
+- * 0 on error
+- */
+-
+ static int brcmnand_EDU_write_is_complete(struct mtd_info *mtd, int* outp_needBBT)
+ {
+ uint32_t hif_err, edu_err;
+@@ -1581,45 +1287,37 @@
+
+
+ #ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+- #if 0 // No need in Batch mode
+ // Unlike the Read case where we retry on everything, we either complete the write or die trying.
+- // Here we use retry only for ERESTARTSYS, relying on the fact that we write the same data
+- // over the flash.
+- // Caution: Since this can be called from an interrupt context, we cannot call the regular brcmnand_wait()
+- // call, since those call schedule()
++ // Here we use retry only for ERESTARTSYS, relying on the fact that we write the same data over the flash.
+ hif_err = ISR_wait_for_completion();
+ if ((hif_err == ERESTARTSYS) || (hif_err & HIF_INTR2_EBI_TIMEOUT))
+ return hif_err;
+- #endif // Batch mode
++
+ #else
+ hif_err = EDU_poll(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS,
+- HIF_INTR2_EDU_DONE|HIF_INTR2_CTRL_READY,
++ HIF_INTR2_EDU_DONE,
+ HIF_INTR2_EDU_ERR,
+- HIF_INTR2_EDU_DONE_MASK|HIF_INTR2_CTRL_READY);
+-
++ HIF_INTR2_EDU_DONE_MASK);
+ #endif
+
+-
+ if (hif_err != 0) // No timeout
+ {
+- uint32_t flashStatus; // = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ int flashStatus; // = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+
+-#if 0
+-if (!(hif_err & HIF_INTR2_EDU_DONE))
+-printk("hif_err=%08x\n", hif_err);
+-#endif
+
++
++
+ /******************* BUG BUG BUG *****************
+ * THT 01/06/09: What if EDU returns bus error? We should not mark the block bad then.
+ */
+ //Get status: should we check HIF_INTR2_ERR?
+- if (hif_err & HIF_INTR2_EDU_ERR)
+- edu_err = EDU_get_error_status_register();
+- else
+- edu_err = 0;
++ edu_err = EDU_get_error_status_register();
+
+ //Clear interrupt:
+ //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
++ EDU_reset_done();
++ EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
++ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS, HIF_INTR2_EDU_CLEAR_MASK);
+
+ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+
+@@ -1627,56 +1325,39 @@
+ if (!(flashStatus & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK)) {
+ ret = brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
+ // No need to check on the EDU side, already done inside ctrl_write_is_complete
+- udelay(1000);
+- //dump_nand_regs(chip, 0, 0, numDumps++);
+- goto out;
++ return ret;
+ }
+-
+-#ifdef EDU_DEBUG_5
+-/* else */ {
+-
+-// 2nd dump after CTRL_READY is asserted
+-//udelay(1000);
+-//dump_nand_regs(chip, 0, 0, numDumps++);
+-}
+-#endif
+
+ if ((edu_err & EDU_ERR_STATUS_NandWrite) || (flashStatus & 0x01)) {
+ /* Write did not complete, flash error, will mark block bad */
+ *outp_needBBT = 1;
+ printk("EDU_write_is_complete(): error 0x%08X\n", edu_err);
+- ret = 0;
+- goto out;
++ return 0;
+ }
+ else if (edu_err) {
+ /* Write did not complete, bus error, will NOT mark block bad */
+ *outp_needBBT = 0;
+ printk("EDU_write_is_complete(): error 0x%08X\n", edu_err);
+- ret = 0;
+- goto out;
++ return 0;
+ }
+
+- ret = 1; // Success brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
+- goto out;
++ return 1; // Success brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
+ }
+ else { // Write timeout
+ printk("%s: Write has timed out\n", __FUNCTION__);
+ //*outp_needBBT = 1;
+- ret = 0;
+- goto out;
++ EDU_reset_done();
++ EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
++ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS, HIF_INTR2_EDU_CLEAR_MASK);
++
++ return 0;
+ }
+
+-out:
+
+- EDU_reset_done();
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
+- EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS, HIF_INTR2_EDU_CLEAR_MASK);
++ printk("EDU_write_is_complete(): error 2 hif_err: %08x\n", hif_err);
+
+-
+- //printk("EDU_write_is_complete(): error 2 hif_err: %08x\n", hif_err);
+-
+ //Poll time out or did not return HIF_INTR2_EDU_DONE:
+- return ret;
++ return 0;
+ }
+
+
+@@ -1689,7 +1370,7 @@
+
+
+ /**
+- * brcmnand_transfer_oob - [Internal] Transfer oob from chip->oob_poi to client buffer
++ * brcmnand_transfer_oob - [Internal] Transfer oob to client buffer
+ * @chip: nand chip structure
+ * @oob: oob destination address
+ * @ops: oob ops structure
+@@ -1727,10 +1408,6 @@
+ bytes = min_t(size_t, len, free->length);
+ boffs = free->offset;
+ }
+-#ifdef DEBUG_ISR
+-printk("%s: AUTO: oob=%p, chip->oob_poi=%p, ooboffs=%d, len=%d, bytes=%d, boffs=%d\n",
+- __FUNCTION__, oob, chip->oob_poi, ops->ooboffs, len, bytes, boffs);
+-#endif
+ memcpy(oob, chip->oob_poi + boffs, bytes);
+ oob += bytes;
+ }
+@@ -1752,7 +1429,7 @@
+ void* buffer, u_char* oobarea, loff_t offset)
+ {
+ struct brcmnand_chip* chip = mtd->priv;
+- //int retries = 2;
++ int retries = 2, done = 0;
+ static uint32_t oobbuf[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+ uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oobbuf[0]);
+ u_char* p8 = (u_char*) p32;
+@@ -1769,31 +1446,7 @@
+ //u_char oobbuf[16];
+ int erased, allFF;
+ int i;
+- uint32_t acc, acc0;
+- //int valid;
+
+- /*
+- * First disable Read ECC then re-try read OOB, because some times, the controller
+- * just drop the op on ECC errors.
+- */
+-
+-#if 1 /* Testing 1 2 3 */
+- /* Disable ECC */
+- acc = brcmnand_ctrl_read(BCHP_NAND_ACC_CONTROL);
+- acc0 = acc & ~(BCHP_NAND_ACC_CONTROL_RD_ECC_EN_MASK | BCHP_NAND_ACC_CONTROL_RD_ECC_BLK0_EN_MASK);
+- brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc0);
+-
+- chip->ctrl_writeAddr(chip, offset, 0);
+- PLATFORM_IOFLUSH_WAR();
+- chip->ctrl_write(BCHP_NAND_CMD_START, OP_SPARE_AREA_READ);
+-
+- // Wait until cache is filled up, disabling ECC checking
+- (void) brcmnand_spare_is_valid(mtd, FL_READING, 1);
+-
+- // Restore acc
+- brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
+-#endif
+-
+ for (i = 0; i < 4; i++) {
+ p32[i] = be32_to_cpu (chip->ctrl_read(BCHP_NAND_SPARE_AREA_READ_OFS_0 + i*4));
+ }
+@@ -1801,25 +1454,19 @@
+ erased = (p8[6] == 0xff && p8[7] == 0xff && p8[8] == 0xff);
+ allFF = (p8[6] == 0x00 && p8[7] == 0x00 && p8[8] == 0x00);
+ if (gdebug > 3 )
+-{printk("%s: offset=%0llx, erased=%d, allFF=%d\n",
+-__FUNCTION__, offset, erased, allFF);
++{printk("%s: erased=%d, allFF=%d\n", __FUNCTION__, erased, allFF);
+ print_oobbuf(p8, 16);
+ }
+ }
+ else if (chip->ecclevel >= BRCMNAND_ECC_BCH_1 && chip->ecclevel <= BRCMNAND_ECC_BCH_12) {
+- erased = 1;
+- allFF = 0; // Not sure for BCH.
++ erased = allFF = 1;
+ // For BCH-n, the ECC bytes are at the end of the OOB area
+- for (i=chip->eccOobSize-chip->eccbytes; i<min(16,chip->eccOobSize); i++) {
++ for (i=chip->eccOobSize-chip->eccbytes; i<chip->eccOobSize; i++) {
+ erased = erased && (p8[i] == 0xff);
+- if (!erased) {
+- printk("p8[%d]=%02x\n", i, p8[i]);
+- break;
++ allFF = allFF && (p8[i] == 0x00);
+ }
+- }
+-if (gdebug > 3 )
+-{printk("%s: offset=%0llx, i=%d from %d to %d, eccOobSize=%d, eccbytes=%d, erased=%d, allFF=%d\n",
+-__FUNCTION__, offset, i, chip->eccOobSize-chip->eccbytes, chip->eccOobSize,
++//if (gdebug > 3 )
++{printk("%s: eccOobSize=%d, eccbytes=%d, erased=%d, allFF=%d\n", __FUNCTION__,
+ chip->eccOobSize, chip->eccbytes, erased, allFF);}
+ }
+ else {
+@@ -2134,7 +1781,7 @@
+ static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+ uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
+ u_char* p8 = (u_char*) p32;
+- //unsigned long irqflags;
++ unsigned long irqflags;
+ int retries = 5, done=0;
+ int valid = 0;
+
+@@ -2257,24 +1904,17 @@
+ print_databuf(buffer, 32);
+ }
+
+-#if defined( EDU_DEBUG ) || defined (BRCMNAND_READ_VERIFY )
+-//if (in_verify <=0)
+-if (chip->ecclevel == BRCMNAND_ECC_HAMMING) {
++#ifdef EDU_DEBUG
++if (in_verify <=0) {
+ u_char edu_sw_ecc[4];
+
+ brcmnand_Hamming_ecc(buffer, edu_sw_ecc);
+
+-if ((p8[6] != edu_sw_ecc[0] || p8[7] != edu_sw_ecc[1] || p8[8] != edu_sw_ecc[2])
+- && !(p8[6]==0xff && p8[7]==0xff && p8[8]==0xff &&
+- edu_sw_ecc[0]==0x0 && edu_sw_ecc[1]==0x0 && edu_sw_ecc[2]==0x0)
+-) {
+ printk("!!!!!!!!! %s: offset=%0llx ECC=%02x%02x%02x, OOB:",
+ in_verify < 0 ? "WR" : "RD",
+ offset, edu_sw_ecc[0], edu_sw_ecc[1], edu_sw_ecc[2]);
+- print_oobbuf(p8, 16);
+- BUG();
++ print_oobbuf(oobarea, 16);
+ }
+-}
+ #endif
+
+
+@@ -2282,14 +1922,24 @@
+ }
+
+
+-/*
+- * Clear the controller cache by reading at a location we don't normally read
+- */
++
++
++#ifdef CONFIG_MTD_BRCMNAND_EDU
++
++
++extern int EDU_buffer_OK(volatile void* addr);
++
++
++#if 1
++static uint32_t debug_buf32[512];
++static u_char* ver_buf = (u_char*) &debug_buf32[0];
++static u_char ver_oob[16];
++
+ static void debug_clear_ctrl_cache(struct mtd_info* mtd)
+ {
+ /* clear the internal cache by writing a new address */
+ struct brcmnand_chip* chip = mtd->priv;
+- loff_t offset = chip->chipSize-chip->blockSize; // Start of BBT region
++ loff_t offset = chip->chipSize-0x100000; // Start of BBT region
+
+ chip->ctrl_writeAddr(chip, offset, 0);
+ PLATFORM_IOFLUSH_WAR();
+@@ -2299,20 +1949,6 @@
+ (void) brcmnand_cache_is_valid(mtd, FL_READING, offset);
+ }
+
+-#ifdef CONFIG_MTD_BRCMNAND_EDU
+-
+-
+-extern int EDU_buffer_OK(volatile void* addr, int command);
+-
+-
+-#if 1
+-static uint32_t debug_buf32[512];
+-static u_char* ver_buf = (u_char*) &debug_buf32[0];
+-static u_char ver_oob[16];
+-
+-
+-
+-
+ static void debug_EDU_read(struct mtd_info* mtd,
+ void* edu_buffer, u_char* edu_oob, loff_t offset, uint32_t intr_status,
+ uint32_t edu_status, u_char* edu_sw_ecc)
+@@ -2373,126 +2009,213 @@
+ }
+ #endif
+
++/**
++ * brcmnand_posted_read_cache - [BrcmNAND Interface] Read the 512B cache area
++ * Assuming brcmnand_get_device() has been called to obtain exclusive lock
++ * @param mtd MTD data structure
++ * @param oobarea Spare area, pass NULL if not interested
++ * @param buffer the databuffer to put/get data, pass NULL if only spare area is wanted.
++ * @param offset offset to read from or write to, must be 512B aligned.
++ * @param raw: Ignore BBT bytes when raw = 1
++ *
++ * Caller is responsible to pass a buffer that is
++ * (1) large enough for 512B for data and optionally an oobarea large enough for 16B.
++ * (2) 4-byte aligned.
++ *
++ * Read the cache area into buffer. The size of the cache is mtd-->eccsize and is always 512B.
++ */
++//#define EDU_DEBUG_2
++#undef EDU_DEBUG_2
+
+-#ifdef EDU_DEBUG_4
+-int edu_read_verify(struct mtd_info *mtd, char* buffer, char* oobarea, loff_t offset)
+-{
+- struct brcmnand_chip* chip = mtd->priv;
+- static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+- uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
+-int ctrlret;
++// EDU_DEBUG_4: Verify on Read
++//#define EDU_DEBUG_4
++#undef EDU_DEBUG_4
+
+-PRINTK("%s: buffer=%08x, ctrlbuf=%08x, oobarea=%08x, ctrl_oob=%08x, offset=%08llx\n", __FUNCTION__,
+- buffer, ctrl_buf, oobarea, ctrl_oob, offset);
++// EDU_DEBUG_5: Verify on Write
++//#define EDU_DEBUG_5
++#undef EDU_DEBUG_5
+
++#if defined( EDU_DEBUG_2 ) || defined( EDU_DEBUG_4 )
++/* 3548 internal buffer is 4K in size */
++//static uint32_t edu_lbuf[2048];
++static uint32_t* edu_buf32;
++static uint8_t* edu_buf; // Used by EDU in Debug2
++static uint8_t* ctrl_buf; // Used by Ctrl in Debug4
++static uint32_t ctrl_oob32[4];
++static uint8_t* ctrl_oob = (uint8_t*) ctrl_oob32;
+
++#define PATTERN 0xa55a0000
+
+- ctrlret = brcmnand_ctrl_posted_read_cache(mtd, ctrl_buf, ctrl_oob, offset);
+- //verify_edu_buf();
+- // Compare buffer returned from EDU and Ctrl reads:
+- if (0 != memcmp(ctrl_buf, buffer, 512)) {
+-printk("$$$$$$$$$$$$ EDU Read: offset=%08llx\n", offset);
+-print_databuf(buffer, 512);
+-printk("------------ Ctrl Read: \n");
+-print_databuf(ctrl_buf, 512);
+- BUG();
+- }
+- if (oobarea)
+- {
+- if (0 != memcmp(p32, ctrl_oob, 16)) {
+-printk("########## Ctrl OOB:\n");
+-print_oobbuf(ctrl_oob, 16);
+-printk("------------ EDU OOB: \n");
+-print_oobbuf(p32, 16);
+-/* Which one is correct? Since the data buffers agree, use Hamming codes */
+- if (chip->ecclevel == BRCMNAND_ECC_HAMMING)
+- {
+- unsigned char ecc1[3]; // SW ECC, manually calculated
+- brcmnand_Hamming_WAR(mtd, offset, buffer, &ctrl_oob[6], &ecc1[0]);
+- printk("Hamming ECC=%02x%02x%02x\n", ecc1[0], ecc1[1], ecc1[2]);
+- }
++#define EDU_BUFSIZE_B (512)
++// One before and one after
++#define EDU_BUF32_SIZE_B (EDU_BUFSIZE_B*3)
++
++// Same as above in DW instead
++#define EDU_BUFSIZE_DW (EDU_BUFSIZE_B/4)
++#define EDU_BUF32_SIZE_DW (EDU_BUF32_SIZE_B/4)
++
++// Real buffer starts at 1/3
++#define EDU_BUF_START_DW (EDU_BUF32_SIZE_DW/3)
++
++
++static void init_edu_buf(void)
++{
++ /* Write pattern */
++ int i;
++
++ if (!edu_buf32) {
++ edu_buf32 = (uint32_t*) kmalloc(EDU_BUF32_SIZE_B, GFP_KERNEL);
++ if (!edu_buf32) {
++ printk("%s: Out of memory\n", __FUNCTION__);
+ BUG();
+ }
++
++ edu_buf = ctrl_buf = (uint8_t*) &edu_buf32[EDU_BUF_START_DW];
++ printk("%s: Buffer allocated at %p, %d bytes\n", __FUNCTION__, edu_buf32, EDU_BUF32_SIZE_B);
++ printk("Real buffer starts at %p\n", ctrl_buf);
+ }
+- return 0;
++
++ for (i=0; i<EDU_BUF32_SIZE_DW; i++) {
++ edu_buf32[i] = PATTERN | i;
++ }
+ }
+-#endif // Verify EDU on Read
+
+-
+-/*
+- * Read completion after EDU_Read is called.
+- * In ISR mode, this routine is run in interrupt context
+- */
+-int
+-brcmnand_edu_read_comp_intr(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset, uint32_t intr_status)
++static int verify_edu_buf(void)
+ {
+- struct brcmnand_chip* chip = mtd->priv;
+- uint32_t intfc_status;
+ int i;
+- static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+- uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
++ int ret = 0;
+
+- if (intr_status & HIF_INTR2_EDU_ERR) {
+- printk("%s: Should not call me with EDU ERR\n", __FUNCTION__);
+- BUG();
++ for (i=0; i<EDU_BUF_START_DW; i++) {
++ if (edu_buf32[i] != (PATTERN | i)) {
++ printk("############ %s: pattern overwritten at offset %d, expect %08x, found %08x\n",
++ __FUNCTION__, i*4, PATTERN | i, edu_buf32[i]);
++ ret++;
++ }
+ }
+- intfc_status = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+- if (!(intfc_status & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK)) {
+- printk("%s: Impossible, HIF_INTR2_CTRL_READY already asserted\n", __FUNCTION__);
+- BUG();
+- }
+-
+- // Remember last good sector read. Needed for HIF_INTR2 workaround.
+- gLastKnownGoodEcc = offset;
+- if (oobarea)
+- {
+- PLATFORM_IOFLUSH_WAR();
+- for (i = 0; i < 4; i++) {
+- p32[i] = be32_to_cpu (chip->ctrl_read(BCHP_NAND_SPARE_AREA_READ_OFS_0 + i*4));
++ for (i=EDU_BUF_START_DW+EDU_BUFSIZE_DW; i<EDU_BUF32_SIZE_DW; i++) {
++ if (edu_buf32[i] != (PATTERN | i)) {
++ printk("############ %s: pattern overwritten at offset %d, expect %08x, found %08x\n",
++ __FUNCTION__, i*4, PATTERN | i, edu_buf32[i]);
++ ret++;
+ }
+-if (gdebug > 3) {printk("SUCCESS: %s: offset=%0llx, oob=\n", __FUNCTION__, offset); print_oobbuf((u_char*) &p32[0], 16);}
+- }
+-
+- return 0;
++ }
++if (ret) printk("+++++++++++++++ %s: %d DW overwritten by EDU\n", __FUNCTION__, ret);
++ return ret;
+ }
+
+-/*
+- * Read WAR after EDU_Read is called, and EDU returns errors.
+- * This routine can only be called in process context
+- */
+-int
+-brcmnand_edu_read_completion(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset, uint32_t intr_status)
++#endif
++
++static int brcmnand_EDU_posted_read_cache(struct mtd_info* mtd,
++ void* buffer, u_char* oobarea, loff_t offset)
+ {
++
++ int ecc;
++
+ struct brcmnand_chip* chip = mtd->priv;
+- uint32_t edu_err_status;
++ loff_t sliceOffset = offset & (~ (mtd->eccsize - 1));
++ int i, ret = 0;
+ static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+ uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
+ u_char* p8 = (u_char*) p32;
+- int ecc;
+- int ret = 0, i;
++ uint32_t EDU_ldw;
++ uint32_t intr_status;
++ unsigned long irqflags;
++ int retries = 5;
++
++int save_debug;
++uint32_t edu_status;
+
+- if (in_interrupt()) {
+- printk(KERN_ERR "%s cannot be run in interrupt context\n", __FUNCTION__);
+- BUG();
++#ifdef EDU_DEBUG_2
++u_char* save_buf = buffer;
++#endif
++
++//if((offset >= (0x3a8148 & ~(0x1FF))) && (offset < ((0x3a8298+0x1F) & ~(0x1FF)))) gdebug=4;
++//gdebug = 4;
++if (gdebug > 3) {
++printk("%s: offset=%0llx, buffer=%p, oobarea=%p\n", __FUNCTION__, offset, buffer, oobarea);}
++
++#if 0 //def EDU_DEBUG_4
++printk("%s: offset=%0llx, buffer=%p, oobarea=%p\n", __FUNCTION__, offset, buffer, oobarea);
++#endif
++
++
++ if (unlikely(offset - sliceOffset)) {
++ printk(KERN_ERR "%s: offset %0llx is not cache aligned, sliceOffset=%0llx, CacheSize=%d\n",
++ __FUNCTION__, offset, sliceOffset, mtd->eccsize);
++ ret = -EINVAL;
++ goto out;
+ }
+- if (intr_status & HIF_INTR2_EDU_ERR) {
++
++//#if 0 // Testing 1 2 3
++ if (unlikely(!EDU_buffer_OK(buffer)))
++//#endif
++ {
++if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
++ /* EDU does not work on non-aligned buffers */
++ ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, oobarea, offset);
++ return (ret);
++ }
++
++ if (wr_preempt_en) {
++ // local_irq_save(irqflags);
++ }
++
++#if defined( EDU_DEBUG_2 )
++ init_edu_buf();
++
++ buffer = edu_buf;
++
++#elif defined( EDU_DEBUG_4 )
++ init_edu_buf();
++
++#endif
++
++ intr_status = 0;
++ do {
++
++ EDU_ldw = chip->ctrl_writeAddr(chip, sliceOffset, 0);
++ PLATFORM_IOFLUSH_WAR();
++
++ if (intr_status & HIF_INTR2_EBI_TIMEOUT) {
++ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EBI_TIMEOUT);
++ }
++ intr_status = EDU_read(buffer, EDU_ldw);
++
++#if 0
++if ((intr_status == ERESTARTSYS) || (intr_status & HIF_INTR2_EBI_TIMEOUT) ) {
++uint32_t rd_data = ISR_volatileRead(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
++printk("%s: EDU_read returns error %08x , intr=%08x at offset %0llx\n", __FUNCTION__, intr_status, rd_data, offset);
++}
++#endif
++ } while (retries-- > 0 && ((intr_status == ERESTARTSYS) || (intr_status & HIF_INTR2_EBI_TIMEOUT) ));
++
++ if (retries <= 0 && ((intr_status == ERESTARTSYS) || (intr_status & HIF_INTR2_EBI_TIMEOUT))) { // EBI Timeout
++ // Use controller read
++ printk("%s: EBI timeout, use controller read at offset %0llx\n", __FUNCTION__, offset);
++ ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, oobarea, offset);
++ return (ret);
++ }
++
++ else if (intr_status & HIF_INTR2_EDU_ERR) {
+ if (wr_preempt_en) {
+ //local_irq_restore(irqflags);
+ }
+- edu_err_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_ERR_STATUS);
++ edu_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_ERR_STATUS);
++//if (edu_status == 0)
++// printk("+++++++++++ %s:offset=%0llx Intr=%08x but EDU_status=%08x, LKG=%0llx\n", __FUNCTION__,
++// offset, intr_status, edu_status, gLastKnownGoodEcc);
+
++
+ /**** WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR */
+ /* Do a dummy read on a known good ECC sector to clear error */
+- if (edu_err_status) {
+- static uint8_t myBuf2[512+31];
+- // EDU aligned
+- uint8_t* tmpBuf = (uint8_t*) ((((unsigned int) &myBuf2[0]) + 31) & (~31));
+-
++ if (edu_status) {
++ static uint32_t tmpBuf[128];
+ // We start from the BBT, since these would (hopefully) always be good sectors.
+ loff_t tmpOffset = chip->chipSize - 512;
+
++//printk("Handle HIF_INTR2_UNC_ERR: Step 1: @offset %0llx\n", offset);
++//print_oobreg(chip);
++
+ // First make sure that there is a last known good sector
+ while (gLastKnownGoodEcc == 0 && tmpOffset >= 0) {
+ ret = brcmnand_ctrl_posted_read_cache(mtd, tmpBuf, NULL, tmpOffset);
+@@ -2502,21 +2225,22 @@
+ uint32_t lkgs;
+ // Clear the error condition
+ //(void) brcmnand_EDU_posted_read_cache(mtd, tmpBuf, NULL, gLastKnownGoodEcc);
++ lkgs = chip->ctrl_writeAddr(chip, gLastKnownGoodEcc, 0);
++ PLATFORM_IOFLUSH_WAR();
+
+-
+ // Use Register Array
+ // EDU_ldw = BCHP_PHYSICAL_OFFSET + BCHP_NAND_FLASH_CACHEi_ARRAY_BASE;
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+- // Reset EDU
+- ISR_push_request(mtd, tmpBuf, NULL, tmpOffset);
+-#else
+- lkgs = chip->ctrl_writeAddr(chip, gLastKnownGoodEcc, 0);
+- PLATFORM_IOFLUSH_WAR();
+ intr_status = EDU_read(buffer, lkgs);
+-#endif
+-
++//printk("intr_status returns from dummy read at offset %0llx: %08x\n", gLastKnownGoodEcc, intr_status);
++//printk("Handle HIF_INTR2_UNC_ERR: Step 2:\n");
++//print_oobreg(chip);
+ ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, p8, offset);
+-
++//printk("Handle HIF_INTR2_UNC_ERR: Step 3:\n");
++//print_oobreg(chip);
++//if (oobarea)
++{
++// printk("Unc Error WAR OOB="); print_oobbuf(p8, 16);
++}
+ return ret;
+ }
+ // else there can be no workaround possible, use controller read
+@@ -2525,8 +2249,16 @@
+ }
+ }
+ /**** ENDWAR ENDWAR ENDWAR ENDWAR */
++
++ // If error was not due to UNC or COR errors, or poll timeout, try the old-fashioned way
++ //ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, oobarea, offset);
++ //return (ret);
+ }
+
++
++//if (intr_status & HIF_INTR2_EDU_ERR)
++// printk("%s: EDU_read returns error at offset=%0llx, intr_status=%08x\n", __FUNCTION__, offset, intr_status);
++
+ /*
+ * Wait for Controller ready, which indicates the OOB and buffer are ready to be read.
+ */
+@@ -2563,7 +2295,7 @@
+ for (i = 0; i < 4; i++) {
+ p32[i] = be32_to_cpu (chip->ctrl_read(BCHP_NAND_SPARE_AREA_READ_OFS_0 + i*4));
+ }
+-if (gdebug > 3) {printk("SUCCESS: %s: offset=%0llx, oob=\n", __FUNCTION__, offset); print_oobbuf((u_char*) &p32[0], 16);}
++if (gdebug > 3) {printk("SUCCESS: %s: offset=%0llx, oob=\n", __FUNCTION__, sliceOffset); print_oobbuf((u_char*) &p32[0], 16);}
+ }
+ ret = 0; // Success!
+ break;
+@@ -2571,7 +2303,9 @@
+ case BRCMEDU_CORRECTABLE_ECC_ERROR:
+ /* FALLTHRU */
+ case BRCMNAND_CORRECTABLE_ECC_ERROR:
+-
++{save_debug = gdebug;
++//gdebug = 4;
++//edu_debug = 4;
+ printk("+++++++++++++++ CORRECTABLE_ECC: offset=%0llx ++++++++++++++++++++\n", offset);
+ // Have to manually copy. EDU drops the buffer on error - even correctable errors
+ if (buffer) {
+@@ -2584,7 +2318,7 @@
+ for (i = 0; i < 4; i++) {
+ p32[i] = be32_to_cpu (chip->ctrl_read(BCHP_NAND_SPARE_AREA_READ_OFS_0 + i*4));
+ }
+-if (gdebug > 3) {printk("CORRECTABLE: %s: offset=%0llx, oob=\n", __FUNCTION__, offset); print_oobbuf(oobarea, 16);}
++if (gdebug > 3) {printk("CORRECTABLE: %s: offset=%0llx, oob=\n", __FUNCTION__, sliceOffset); print_oobbuf(oobarea, 16);}
+ }
+
+ #ifndef DEBUG_HW_ECC // Comment out for debugging
+@@ -2604,7 +2338,7 @@
+ }
+ }
+ }
+-
++gdebug = edu_debug = save_debug;}
+ break;
+
+ case BRCMEDU_UNCORRECTABLE_ECC_ERROR:
+@@ -2612,13 +2346,16 @@
+ {
+ int valid;
+
+-
++save_debug = gdebug;
++//gdebug = 4;
++//edu_debug = 4;
++//
+ PRINTK("************* UNCORRECTABLE_ECC (offset=%0llx) ********************\n", offset);
+ /*
+ * THT: Since EDU does not handle OOB area, unlike the UNC ERR case of the ctrl read,
+ * we have to explicitly read the OOB, before calling the WAR routine.
+ */
+- chip->ctrl_writeAddr(chip, offset, 0);
++ chip->ctrl_writeAddr(chip, sliceOffset, 0);
+ chip->ctrl_write(BCHP_NAND_CMD_START, OP_SPARE_AREA_READ);
+
+ // Wait until spare area is filled up
+@@ -2635,6 +2372,8 @@
+ printk("************* UNCORRECTABLE_ECC (offset=%0llx) valid!=0 ********************\n", offset);
+ ret = -EBADMSG;
+ }
++if (!ret)
++{gdebug = edu_debug = save_debug;}
+ }
+ break;
+
+@@ -2661,126 +2400,73 @@
+
+ out:
+
+-
+-//gdebug=0;
+- return ret;
+-}
+-
+-
+- #ifndef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+-/**
+- * brcmnand_posted_read_cache - [BrcmNAND Interface] Read the 512B cache area
+- * Assuming brcmnand_get_device() has been called to obtain exclusive lock
+- * @param mtd MTD data structure
+- * @param oobarea Spare area, pass NULL if not interested
+- * @param buffer the databuffer to put/get data, pass NULL if only spare area is wanted.
+- * @param offset offset to read from or write to, must be 512B aligned.
+- * @param raw: Ignore BBT bytes when raw = 1
+- *
+- * Caller is responsible to pass a buffer that is
+- * (1) large enough for 512B for data and optionally an oobarea large enough for 16B.
+- * (2) 4-byte aligned.
+- *
+- * Read the cache area into buffer. The size of the cache is mtd-->eccsize and is always 512B.
+- */
+-
+-
+-static int brcmnand_EDU_posted_read_cache(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset)
++#if 0
+ {
++//if (!ret)
++ u_char edu_sw_ecc[4];
+
+- //int ecc;
++ debug_EDU_read(mtd, buffer, oobarea, offset, intr_status, edu_status, edu_sw_ecc);
+
+- struct brcmnand_chip* chip = mtd->priv;
+- loff_t sliceOffset = offset & (~ (mtd->eccsize - 1));
+- int i, ret = 0;
+- //static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+- //uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
+- //u_char* p8 = (u_char*) p32;
+- uint32_t EDU_ldw;
+- uint32_t intr_status;
+- unsigned long irqflags;
+- int retries = 5;
+-
+-int save_debug;
+-uint32_t edu_status;
+-
+-#ifdef EDU_DEBUG_2
+-u_char* save_buf = buffer;
++ printk("!!!!!!!!! RD: offset=%0llx ECC=%02x%02x%02x, OOB:",
++offset, edu_sw_ecc[0], edu_sw_ecc[1], edu_sw_ecc[2]);
++ print_oobbuf(oobarea, 16);
++}
+ #endif
+
+-//if((offset >= (0x3a8148 & ~(0x1FF))) && (offset < ((0x3a8298+0x1F) & ~(0x1FF)))) gdebug=4;
+-//gdebug = 4;
+-if (gdebug > 3) {
+-printk("%s: offset=%0llx, buffer=%p, oobarea=%p\n", __FUNCTION__, offset, buffer, oobarea);}
+-
+-#if 0 //def EDU_DEBUG_4
+-printk("%s: offset=%0llx, buffer=%p, oobarea=%p\n", __FUNCTION__, offset, buffer, oobarea);
++#if 0
++if (offset <= 0x3a3600 && (offset+512) > 0x3a3600) {
++printk("@@@@@@@@@ Dump EDU Read around 0x3a3600:\n");
++print_databuf(buffer, 512);print_oobbuf(p32, 16);
++}
+ #endif
+
++#ifdef EDU_DEBUG_4
++{
++int ctrlret;
+
+- if (unlikely(offset - sliceOffset)) {
+- printk(KERN_ERR "%s: offset %0llx is not cache aligned, sliceOffset=%0llx, CacheSize=%d\n",
+- __FUNCTION__, offset, sliceOffset, mtd->eccsize);
+- ret = -EINVAL;
+- return (ret);
++ ctrlret = brcmnand_ctrl_posted_read_cache(mtd, ctrl_buf, ctrl_oob, offset);
++ //verify_edu_buf();
++ // Compare buffer returned from EDU and Ctrl reads:
++ if (0 != memcmp(ctrl_buf, buffer, 512)) {
++printk("$$$$$$$$$$$$ Read buffer from Ctrl & EDU read-ops differ at offset %0llx, intr_status=%08x, ecc=%d\n",
++ offset, intr_status, ecc);
++printk("$$$$$$$$$$$$ EDU Read:\n");
++print_databuf(buffer, 512);
++printk("------------ Ctrl Read: \n");
++print_databuf(edu_buf, 512);
++ BUG();
+ }
+-
+-//#if 0 // Testing 1 2 3
+- if (unlikely(!EDU_buffer_OK(buffer, EDU_READ)))
+-//#endif
++ //if (oobarea)
+ {
+-if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
+- /* EDU does not work on non-aligned buffers */
+- ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, oobarea, offset);
+- return (ret);
++ if (0 != memcmp(p32, ctrl_oob, 16)) {
++printk("########## Read OOB from Ctrl & EDU read-ops differ at offset %0llx, intr_status=%08x, ecc=%d\n",
++ offset, intr_status, ecc);
++printk("########## Ctrl OOB:\n");
++print_oobbuf(ctrl_oob, 16);
++printk("------------ EDU OOB: \n");
++print_oobbuf(p32, 16);
++/* Which one is correct? Since the data buffers agree, use Hamming codes */
++ if (chip->ecclevel == BRCMNAND_ECC_HAMMING)
++ {
++ unsigned char ecc1[3]; // SW ECC, manually calculated
++ brcmnand_Hamming_WAR(mtd, offset, buffer, &ctrl_oob[6], &ecc1[0]);
++ printk("Hamming ECC=%02x%02x%02x\n", ecc1[0], ecc1[1], ecc1[2]);
++ }
++ BUG();
++ }
+ }
++}
++#endif // Verify EDU on Read
+
+- if (wr_preempt_en) {
+- // local_irq_save(irqflags);
+- }
+-
+-#if defined( EDU_DEBUG_2 )
+- init_edu_buf();
+-
+- buffer = edu_buf;
+-
+-#elif defined( EDU_DEBUG_4 )
+- init_edu_buf();
+-
+-#endif
+-
+- intr_status = 0;
+- do {
+-
+- EDU_ldw = chip->ctrl_writeAddr(chip, sliceOffset, 0);
+- PLATFORM_IOFLUSH_WAR();
+-
+- if (intr_status & HIF_INTR2_EBI_TIMEOUT) {
+- EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EBI_TIMEOUT);
+- }
+- intr_status = EDU_read(buffer, EDU_ldw);
+-
+- } while (retries-- > 0 && ((intr_status == ERESTARTSYS) || (intr_status & HIF_INTR2_EBI_TIMEOUT) ));
+-
+-
+- ret = brcmnand_edu_read_completion(mtd, buffer, oobarea, offset, intr_status);
+-
+-//gdebug=0;
++gdebug=0;
+ return ret;
+ }
+
+
+-
+ static int (*brcmnand_posted_read_cache)(struct mtd_info*,
+ void*, u_char*, loff_t) = brcmnand_EDU_posted_read_cache;
+-
+- #else /* Queue Mode */
+-static int (*brcmnand_posted_read_cache)(struct mtd_info*,
+- void*, u_char*, loff_t) = brcmnand_ctrl_posted_read_cache;
+- #endif
+
+-#else
++#else
+ static int (*brcmnand_posted_read_cache)(struct mtd_info*,
+ void*, u_char*, loff_t) = brcmnand_ctrl_posted_read_cache;
+ #endif
+@@ -2805,33 +2491,16 @@
+ loff_t sliceOffset = offset & (~(mtd->eccsize - 1));
+ int i, ret = 0, valid, done = 0;
+ int retries = 5;
+- //unsigned long irqflags;
++ unsigned long irqflags;
+
+ //char msg[20];
+
+-#if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_3_0
+- static uint8_t myBuf2[512+31]; // Place holder only.
+- static uint8_t* myBuf = NULL;
+-
+- /*
+- * Force alignment on 32B boundary
+- */
+- if (!myBuf) {
+- myBuf = (uint8_t*) ((((unsigned int) &myBuf2[0]) + 31) & (~31));
+- }
+-
+- #if CONFIG_MTD_BRCMNAND_VERSION == CONFIG_MTD_BRCMNAND_VERS_3_0
+- {
+- // PR2516. Not a very good WAR, but the affected chips (3548A0,7443A0) have been EOL'ed
+- return brcmnand_ctrl_posted_read_cache(mtd, (void*) myBuf, oobarea, offset);
+- }
+-
+- #else /* 3.1 or later */
+- // If BCH codes, force full page read to activate ECC correction on OOB bytes.
+- if (chip->ecclevel != BRCMNAND_ECC_HAMMING && chip->ecclevel != BRCMNAND_ECC_DISABLE) {
+- return brcmnand_ctrl_posted_read_cache(mtd, (void*) myBuf, oobarea, offset);
+- }
+- #endif
++#if CONFIG_MTD_BRCMNAND_VERSION == CONFIG_MTD_BRCMNAND_VERS_3_0
++{
++ // PR2516. Not a very good WAR, but the affected chips (3548A0,7443A0) have been EOL'ed
++ static uint32_t myBuf[128]; // Place holder only.
++ return brcmnand_ctrl_posted_read_cache(mtd, (void*) myBuf, oobarea, offset);
++}
+ #endif
+
+ if (gdebug > 3 ) PRINTK("->%s: offset=%0llx\n", __FUNCTION__, offset);
+@@ -2921,151 +2590,6 @@
+ return ret;
+ }
+
+-
+-//#ifdef CONFIG_MTD_BRCMNAND_EDU
+-
+-//#define EDU_DEBUG_3
+-#undef EDU_DEBUG_3
+-
+-#if 0 //defined( EDU_DEBUG_3 ) || defined( EDU_DEBUG_5 ) || defined(BRCMNAND_WRITE_VERIFY )
+-
+-
+-/*
+- * Returns 0 on no errors.
+- * THis should never be called, because partial writes may screw up the verify-read.
+- */
+-static int edu_write_verify(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset)
+-{
+- struct brcmnand_chip* chip = mtd->priv;
+- static uint8_t sw_ecc[4];
+- static uint32_t read_oob[4];
+- static uint8_t write_oob[16];
+- uint8_t* oobpoi = (uint8_t*) &read_oob[0];
+- int ret = 0;
+-
+- // Dump the register, done immediately after EDU_Write returns
+- // dump_nand_regs(chip, offset);
+-
+- if ( chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- // Read back the data, but first clear the internal cache first.
+- debug_clear_ctrl_cache(mtd);
+-
+- ret = brcmnand_ctrl_posted_read_cache(mtd, edu_write_buf, oobpoi, offset);
+- if (ret) {
+- printk("+++++++++++++++++++++++ %s: Read Verify returns %d\n", __FUNCTION__, ret);
+- goto out;
+- }
+- if (0 != memcmp(buffer, edu_write_buf, 512)) {
+- printk("+++++++++++++++++++++++ %s: WRITE buffer differ with READ-Back buffer\n",
+- __FUNCTION__);
+- ret = (-1);
+- goto out;
+- }
+- if (oobarea) { /* For BCH, the ECC is at the end */
+- // Number of bytes to compare (with ECC bytes taken out)
+- int numFree = min(16, chip->eccOobSize - chip->eccbytes);
+-
+- if (memcmp(oobarea, oobpoi, numFree)) {
+- printk("+++++++++++++++++++++++ %s: BCH-%-d OOB comp failed, numFree=%d\n",
+- __FUNCTION__, chip->ecclevel, numFree);
+- printk("In OOB:\n"); print_oobbuf(oobarea, 16);
+- printk("\nVerify OOB:\n"); print_oobbuf(oobpoi, 16);
+- ret = (-2);
+- goto out;
+- }
+- }
+- return 0;
+- }
+-
+- // Calculate the ECC
+- // brcmnand_Hamming_ecc(buffer, sw_ecc);
+-
+- // Read back the data, but first clear the internal cache first.
+- debug_clear_ctrl_cache(mtd);
+-
+-in_verify = -1;
+- ret = brcmnand_ctrl_posted_read_cache(mtd, edu_write_buf, oobpoi, offset);
+-in_verify = 0;
+-
+- if (ret) {
+- printk("+++++++++++++++++++++++ %s: Read Verify returns %d\n", __FUNCTION__, ret);
+- goto out;
+- }
+-
+-#if 0
+- if (sw_ecc[0] != oobpoi[6] || sw_ecc[1] != oobpoi[7] || sw_ecc[2] != oobpoi[8]) {
+-printk("+++++++++++++++++++++++ %s: SWECC=%02x%02x%02x ReadOOB=%02x%02x%02x, buffer=%p, offset=%0llx\n",
+- __FUNCTION__,
+- sw_ecc[0], sw_ecc[1], sw_ecc[2], oobpoi[6], oobpoi[7], oobpoi[8], buffer, offset);
+-
+- ret = (-1);
+- goto out;
+- }
+-#endif
+-
+- // Verify the OOB if not NULL
+- if (oobarea) {
+- //memcpy(write_oob, oobarea, 16);
+- //write_oob[6] = sw_ecc[0];
+- //write_oob[7] = sw_ecc[1];
+- //write_oob[8] = sw_ecc[2];
+- if (memcmp(oobarea, oobpoi, 6) || memcmp(&oobarea[9], &oobpoi[9],7)) {
+- printk("+++++++++++++++++++++++ %s: OOB comp Hamming failed\n", __FUNCTION__);
+- printk("In OOB:\n"); print_oobbuf(oobarea, 16);
+- printk("\nVerify OOB:\n"); print_oobbuf(oobpoi, 16);
+- ret = (-2);
+- goto out;
+- }
+- }
+-
+-out:
+-if (ret) {
+- int i, j, k;
+- uint8_t* writeBuf = (uint8_t*) buffer;
+-//for (i=0; i<2; i++)
+-{
+-// Let user land completes its run to avoid garbled printout
+-//schedule();
+-for (j=0; j<512; j++) {
+- if (writeBuf[j] != edu_write_buf[j]) {
+- printk("Buffers differ at offset %04x\n", j);
+- break;
+- }
+-}
+-printk("$$$$$$$$$$$$$$$$$ Register dump:\n");
+-printk("\n");
+-printk("\n");
+-printk("\n");
+-printk("\n");
+-for (k=0; k<numDumps; k++) {
+-printk("\n");
+-printk("\n");
+-printk("$$$$$$$$$$$$$$$$$ Register dump snapshot #%d:\n", k+1);
+-print_dump_nand_regs(k);
+-printk("\n");
+-}
+-printk("\n");
+-printk("\n");
+-printk("EDU_write 99, ret=%d, offset=%0llx, buffer=%p\n", ret, offset, buffer);
+-printk("Write buffer:\n"); print_databuf(buffer, 512);
+-if (oobarea) { printk("Write OOB: "); print_oobbuf(oobarea, 512); }
+-printk("Read back buffer:\n"); print_databuf(edu_write_buf, 512);
+-if (oobarea) { printk("Read OOB: "); print_oobbuf(write_oob, 512); }
+-
+-//printk("$$$$$$$$$$$$$$$$$ Register dump:\n");
+-//print_dump_nand_regs();
+-}
+-}
+- return ret;
+-}
+-
+-
+-#else
+-#define edu_write_verify(...) (0)
+-#endif
+-
+-
+ /**
+ * brcmnand_posted_write - [BrcmNAND Interface] Write a buffer to the flash cache
+ * Assuming brcmnand_get_device() has been called to obtain exclusive lock
+@@ -3160,136 +2684,89 @@
+ }
+
+
+-
+ #ifdef CONFIG_MTD_BRCMNAND_EDU
+- #ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
++#error
+
+- /*
+- * Performs WAR for queue-write. Currently, it is always called with needBBT=1
+- * Runs in process context.
+- * Return 0 on success, error codes on errors.
+- */
+-int
+-brcmnand_edu_write_war(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset, uint32_t intr_status,
+- int needBBT)
+-{
+- struct brcmnand_chip* chip = mtd->priv;
+- int ret = 0;
++//#define EDU_DEBUG_3
++#undef EDU_DEBUG_3
+
++#ifdef EDU_DEBUG_3
+
+- if (!(intr_status & HIF_INTR2_CTRL_READY)) {
+- printk("%s: Impossible, ctrl-ready asserted in interrupt handler\n", __FUNCTION__);
+- BUG();
+- }
++static uint8_t edu_write_buf[512];
+
+- if (!needBBT)
+- {
+- ret = 0;
+- }
+- else
+- { // Need BBT
+-#if 1 //defined (ECC_CORRECTABLE_SIMULATION) || defined(ECC_UNCORRECTABLE_SIMULATION) || defined(WR_BADBLOCK_SIMULATION)
+- printk("%s: Marking bad block @%0llx\n", __FUNCTION__, offset);
+-#endif
+- ret = chip->block_markbad(mtd, offset);
+- ret = -EINVAL;
+- }
+-
+-#if defined(EDU_DEBUG_5) // || defined( CONFIG_MTD_BRCMNAND_VERIFY_WRITE )
+-//gdebug = 0;
+- if (0 == ret) {
+- if (edu_write_verify(mtd, buffer, oobarea, offset)) {
+- BUG();
+- }
+- }
+-
+-#endif
+- return ret;
+-}
+-
+-// When buffer is nor aligned as per EDU requirement, use controller-write
+-static int (*brcmnand_posted_write_cache)(struct mtd_info*,
+- const void*, const u_char*, loff_t) = brcmnand_ctrl_posted_write_cache;
+-
+- #else //#ifndef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+-
+-/*
+- * Write completion after EDU_Read is called.
+- * Non-Queue mode
+- */
+-static int
+-brcmnand_edu_write_completion(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset, uint32_t intr_status, uint32_t physAddr)
++static int edu_write_verify(struct mtd_info *mtd,
++ const void* buffer, const u_char* oobarea, loff_t offset)
+ {
+ struct brcmnand_chip* chip = mtd->priv;
+- int comp;
+- int needBBT;
+- int ret;
++ static uint8_t sw_ecc[4];
++ static uint32_t read_oob[4];
++ static uint8_t write_oob[16];
++ uint8_t* oobpoi = (uint8_t*) &read_oob[0];
++ int ret = 0;
+
+-
+-#ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+- if (!(intr_status & HIF_INTR2_CTRL_READY)) {
+- printk("%s: Impossible, ctrl-ready asserted in interrupt handler\n", __FUNCTION__);
+- BUG();
+- }
+-#else
+- // Wait until flash is ready.
+- // Becareful here. Since this can be called in interrupt context,
+- // we cannot call sleep or schedule()
+- comp = brcmnand_EDU_write_is_complete(mtd, &needBBT);
+-
+- // Already done in interrupt handler
+- (void) dma_unmap_single(NULL, physAddr, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
+-#endif
+-
+- if (comp)
+- {
+- if (!needBBT)
+- {
+- ret = 0;
+- goto out;
++ if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
++ ret = brcmnand_ctrl_posted_read_cache(mtd, edu_write_buf, oobpoi, offset);
++ if (ret) {
++ printk("+++++++++++++++++++++++ %s: Read Verify returns %d\n", __FUNCTION__, ret);
++ return ret;
+ }
+- else
+- { // Need BBT
+-#if 1 //defined (ECC_CORRECTABLE_SIMULATION) || defined(ECC_UNCORRECTABLE_SIMULATION) || defined(WR_BADBLOCK_SIMULATION)
+- printk("%s: Marking bad block @%0llx\n", __FUNCTION__, offset);
+-#endif
+- ret = chip->block_markbad(mtd, offset);
+- ret = -EINVAL;
+- //ret = -EINVAL;
+- goto out;
++ if (0 != memcmp(buffer, edu_write_buf, 512)) {
++ printk("+++++++++++++++++++++++ %s: WRITE buffer differ with READ-Back buffer\n",
++ __FUNCTION__);
++ return (-1);
+ }
++ if (oobarea) {
++ if (memcmp(oobarea, oobpoi, 16)) {
++ printk("+++++++++++++++++++++++ %s: OOB comp failed\n", __FUNCTION__);
++ printk("In OOB:\n"); print_oobbuf(oobarea, 16);
++ printk("\nVerify OOB:\n"); print_oobbuf(oobpoi, 16);
++ }
++ }
++ return 0;
+ }
++
++ // Calculate the ECC
++ brcmnand_Hamming_ecc(buffer, sw_ecc);
+
+- //Write has timed out or read found bad block. TBD: Find out which is which
+- printk(KERN_INFO "%s: Timeout at offset %0llx\n", __FUNCTION__, offset);
+- // Marking bad block
+- if (needBBT) {
+- printk("%s: Marking bad block @%0llx\n", __FUNCTION__, offset);
+-
+- ret = chip->block_markbad(mtd, offset);
+- ret = -EINVAL;
+- //ret = -EINVAL;
+- goto out;
+- }
+- ret = -ETIMEDOUT;
++ // Read back the data, but first clear the internal cache first.
++ debug_clear_ctrl_cache(mtd);
+
+-out:
++in_verify = -1;
++ ret = brcmnand_ctrl_posted_read_cache(mtd, edu_write_buf, oobpoi, offset);
++in_verify = 0;
+
+-#if defined(EDU_DEBUG_5) // || defined( CONFIG_MTD_BRCMNAND_VERIFY_WRITE )
+-//gdebug = 0;
+- if (0 == ret) {
+- if (edu_write_verify(mtd, buffer, oobarea, offset)) {
+- BUG();
+- }
+- }
++ if (ret) {
++ printk("+++++++++++++++++++++++ %s: Read Verify returns %d\n", __FUNCTION__, ret);
++ return ret;
++ }
+
+-#endif
++ if (sw_ecc[0] != oobpoi[6] || sw_ecc[1] != oobpoi[7] || sw_ecc[2] != oobpoi[8]) {
++ printk("+++++++++++++++++++++++ %s: SWECC=%02x%02x%02x ReadOOB=%02x%02x%02x\n",
++ __FUNCTION__,
++ sw_ecc[0], sw_ecc[1], sw_ecc[2], oobpoi[6], oobpoi[7], oobpoi[8]);
++ return (-1);
++ }
++
++ // Verify the OOB if not NULL
++ if (oobarea) {
++ memcpy(write_oob, oobarea, 16);
++ write_oob[6] = sw_ecc[0];
++ write_oob[7] = sw_ecc[1];
++ write_oob[8] = sw_ecc[2];
++ if (memcmp(write_oob, oobpoi, 16)) {
++ printk("+++++++++++++++++++++++ %s: OOB comp failed\n", __FUNCTION__);
++ printk("In OOB:\n"); print_oobbuf(write_oob, 16);
++ printk("\nVerify OOB:\n"); print_oobbuf(oobpoi, 16);
++ }
++ }
+ return ret;
+ }
+
+
++#else
++#define edu_write_verify(...) (0)
++#endif
++
+ /**
+ * brcmnand_posted_write - [BrcmNAND Interface] Write a buffer to the flash cache
+ * Assuming brcmnand_get_device() has been called to obtain exclusive lock
+@@ -3307,14 +2784,12 @@
+ uint32_t* p32;
+ int i;
+ int ret;
+- int comp = 0;
+
+ struct brcmnand_chip* chip = mtd->priv;
+ int needBBT=0;
+ loff_t sliceOffset = offset & (~ (mtd->eccsize - 1));
+ uint32_t EDU_ldw;
+ int retries = 5;
+- uint32_t physAddr;
+
+ #ifdef WR_BADBLOCK_SIMULATION
+ unsigned long tmp = (unsigned long) offset;
+@@ -3333,7 +2808,7 @@
+ goto out;
+ }
+
+- if (unlikely(!EDU_buffer_OK(buffer, EDU_WRITE))) {
++ if (unlikely(!EDU_buffer_OK(buffer))) {
+ // EDU requires the buffer to be DW-aligned
+ PRINTK("%s: Buffer %p not suitable for EDU at %0llx, trying ctrl read op\n", __FUNCTION__, buffer, offset);
+ ret = brcmnand_ctrl_posted_write_cache(mtd, buffer, oobarea, offset);
+@@ -3362,26 +2837,23 @@
+
+ PLATFORM_IOFLUSH_WAR(); // Check if this line may be taken-out
+
++ //chip->ctrl_write(BCHP_NAND_CMD_START, OP_PROGRAM_PAGE);
+
+ if (ret & HIF_INTR2_EBI_TIMEOUT) {
+ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EBI_TIMEOUT);
+ }
+- ret = EDU_write(buffer, EDU_ldw, &physAddr);
+-
++ ret = EDU_write(buffer, EDU_ldw);
+ if (ret) {
+ // Nothing we can do, because, unlike read op, where we can just call the traditional read,
+ // here we may need to erase the flash first before we can write again.
+-//printk("EDU_write returns %d, trying ctrl write \n", ret);
+-// ret = brcmnand_ctrl_posted_write_cache(mtd, buffer, oobarea, offset);
++ ret = brcmnand_ctrl_posted_write_cache(mtd, buffer, oobarea, offset);
+ goto out;
+ }
+
+-//printk("EDU50\n");
++// printk("EDU50\n");
+
+ // Wait until flash is ready
+- comp = brcmnand_EDU_write_is_complete(mtd, &needBBT);
+-
+- (void) dma_unmap_single(NULL, physAddr, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
++ ret = brcmnand_EDU_write_is_complete(mtd, &needBBT);
+ }while (retries-- > 0 && ((ret == ERESTARTSYS) || (ret & HIF_INTR2_EBI_TIMEOUT)));
+
+ if (retries <= 0 && ((ret == ERESTARTSYS) || (ret & HIF_INTR2_EBI_TIMEOUT))) {
+@@ -3390,9 +2862,18 @@
+ goto out;
+ }
+
++#ifdef WR_BADBLOCK_SIMULATION
++ if((tmp == wrBadBlockFailLocation) && (bScanBypass_badBlock == 0))
++ {
++ wrFailLocationOffset.s.high = 0;
++ wrFailLocationOffset.s.low = wrBadBlockFailLocation;
++ printk("Creating new bad block @ %0llx\n", EDU_sprintf(brcmNandMsg, wrFailLocationOffset.ll, this->xor_invert_val));
++ needBBT = 1;
++ ret = 1;
++ }
++#endif
+
+-
+- if (comp)
++ if (ret)
+ {
+ if (!needBBT)
+ {
+@@ -3425,10 +2906,10 @@
+ ret = -ETIMEDOUT;
+
+ out:
++// printk("EDU99\n");
++//gdebug = 0;
+
+-
+ #if defined(EDU_DEBUG_5) // || defined( CONFIG_MTD_BRCMNAND_VERIFY_WRITE )
+-//gdebug = 0;
+ if (0 == ret) {
+ if (edu_write_verify(mtd, buffer, oobarea, offset)) {
+ BUG();
+@@ -3440,11 +2921,17 @@
+ return ret;
+ }
+
++#if 1
++
+ static int (*brcmnand_posted_write_cache)(struct mtd_info*,
+ const void*, const u_char*, loff_t) = brcmnand_EDU_posted_write_cache;
+- #endif
++#else
++/* Testing 1 2 3, use controller write */
++static int (*brcmnand_posted_write_cache)(struct mtd_info*,
++ const void*, const u_char*, loff_t) = brcmnand_ctrl_posted_write_cache;
++#endif
+
+-#else /* No EDU */
++#else
+ static int (*brcmnand_posted_write_cache)(struct mtd_info*,
+ const void*, const u_char*, loff_t) = brcmnand_ctrl_posted_write_cache;
+
+@@ -3564,7 +3051,7 @@
+ set_current_state(TASK_UNINTERRUPTIBLE);
+ add_wait_queue(&chip->wq, &wait);
+ spin_unlock(&chip->chip_lock);
+- if (!wr_preempt_en && !in_interrupt())
++ if (!wr_preempt_en)
+ schedule();
+ remove_wait_queue(&chip->wq, &wait);
+ }
+@@ -3616,7 +3103,6 @@
+ }
+
+
+-
+ /**
+ * brcmnand_read_page - {REPLACEABLE] hardware ecc based page read function
+ * @mtd: mtd info structure
+@@ -3722,7 +3208,7 @@
+ #ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+ static int brcmnand_refresh_blk(struct mtd_info *mtd, loff_t from)
+ {
+- struct brcmnand_chip *chip = mtd->priv;
++ struct brcmnand_chip *this = mtd->priv;
+ int i, j, k, numpages, ret, count = 0, nonecccount = 0;
+ uint8_t *blk_buf; /* Store one block of data (including OOB) */
+ unsigned int pg_idx, oob_idx;
+@@ -3737,9 +3223,9 @@
+
+
+ #if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_1_0
+- chip->ctrl_write(BCHP_NAND_ECC_CORR_EXT_ADDR, 0);
++ this->ctrl_write(BCHP_NAND_ECC_CORR_EXT_ADDR, 0);
+ #endif
+- chip->ctrl_write(BCHP_NAND_ECC_CORR_ADDR, 0);
++ this->ctrl_write(BCHP_NAND_ECC_CORR_ADDR, 0);
+
+ DEBUG(MTD_DEBUG_LEVEL3, "Inside %s: from=%0llx\n", __FUNCTION__, from);
+ printk(KERN_INFO "%s: Performing block refresh for correctable ECC error at %0llx\n",
+@@ -3747,9 +3233,9 @@
+ pg_idx = 0;
+ oob_idx = mtd->writesize;
+ numpages = mtd->erasesize/mtd->writesize;
+- block_size = (1 << chip->erase_shift);
++ block_size = (1 << this->erase_shift);
+ blkbegin = (from & (~(mtd->erasesize-1)));
+- realpage = blkbegin >> chip->page_shift;
++ realpage = blkbegin >> this->page_shift;
+
+ #ifdef CONFIG_MTD_BRCMNAND_EDU
+ if (!gblk_buf) {
+@@ -3777,7 +3263,7 @@
+ /* Read an entire block */
+ brcmnand_get_device(mtd, FL_READING);
+ for (i = 0; i < numpages; i++) {
+- ret = chip->read_page(mtd, blk_buf+pg_idx, blk_buf+oob_idx, realpage);
++ ret = brcmnand_read_page(mtd, blk_buf+pg_idx, blk_buf+oob_idx, realpage);
+ if (ret < 0) {
+ #ifndef CONFIG_MTD_BRCMNAND_EDU
+ BRCMNAND_free(blk_buf);
+@@ -3795,7 +3281,7 @@
+ if (unlikely(gdebug > 0)) {
+ printk("---> %s: Read -> erase\n", __FUNCTION__);
+ }
+- chip->state = FL_ERASING;
++ this->state = FL_ERASING;
+
+ /* Erase the block */
+ instr = kmalloc(sizeof(struct erase_info), GFP_KERNEL);
+@@ -3813,7 +3299,7 @@
+ instr->addr = blkbegin;
+ instr->len = mtd->erasesize;
+ if (unlikely(gdebug > 0)) {
+- printk("DEBUG -> erasing %0llx, %x %d\n",instr->addr, instr->len, chip->state);
++ printk("DEBUG -> erasing %0llx, %x %d\n",instr->addr, instr->len, this->state);
+ }
+ ret = brcmnand_erase_nolock(mtd, instr, 0);
+ if (ret) {
+@@ -3831,12 +3317,12 @@
+ /* Write the entire block */
+ pg_idx = 0;
+ oob_idx = mtd->writesize;
+- realpage = blkbegin >> chip->page_shift;
++ realpage = blkbegin >> this->page_shift;
+ if (unlikely(gdebug > 0)) {
+- printk("---> %s: Erase -> write ... %d\n", __FUNCTION__, chip->state);
++ printk("---> %s: Erase -> write ... %d\n", __FUNCTION__, this->state);
+ }
+- oobinfo = chip->ecclayout;
+- chip->state = FL_WRITING;
++ oobinfo = this->ecclayout;
++ this->state = FL_WRITING;
+ for (i = 0; i < numpages; i++) {
+ /* Avoid writing empty pages */
+ count = 0;
+@@ -3858,7 +3344,7 @@
+ }
+ /* Skip this page, but write the OOB */
+ if (count == j && nonecccount != k) {
+- ret = chip->write_page_oob(mtd, blk_buf + oob_idx, realpage);
++ ret = this->write_page_oob(mtd, blk_buf + oob_idx, realpage);
+ if (ret) {
+ #ifndef CONFIG_MTD_BRCMNAND_EDU
+ BRCMNAND_free(blk_buf);
+@@ -3875,7 +3361,7 @@
+ for (j = 0; j < oobinfo->eccbytes; j++) {
+ oobptr[oobinfo->eccpos[j]] = 0xff;
+ }
+- ret = chip->write_page(mtd, blk_buf+pg_idx, blk_buf+oob_idx, realpage);
++ ret = this->write_page(mtd, blk_buf+pg_idx, blk_buf+oob_idx, realpage);
+ if (ret) {
+ #ifndef CONFIG_MTD_BRCMNAND_EDU
+ BRCMNAND_free(blk_buf);
+@@ -3900,463 +3386,7 @@
+ #endif
+
+
+-#ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+-/*
+- * EDU ISR Implementation
+- */
+-
+-
+-/*
+- * Submit the read op, then return immediately, without waiting for completion.
+- * Assuming queue lock held (with interrupt disable).
+- */
+-static void
+-EDU_submit_read(eduIsrNode_t* req)
+-{
+- struct brcmnand_chip* chip = (struct brcmnand_chip*) req->mtd->priv;
+- uint32_t edu_status;
+-
+- // THT: TBD: Need to adjust for cache line size here, especially on 7420.
+- req->physAddr = dma_map_single(NULL, req->buffer, EDU_LENGTH_VALUE, DMA_FROM_DEVICE);
+-
+-if (edu_debug) PRINTK("%s: vBuff: %p physDev: %08x, PA=%08x\n", __FUNCTION__,
+-req->buffer, external_physical_device_address, phys_mem);
+-
+- spin_lock(&req->lock);
+-
+- req->edu_ldw = chip->ctrl_writeAddr(chip, req->offset, 0);
+- PLATFORM_IOFLUSH_WAR();
+-
+- //req->cmd = EDU_READ;
+- req->opComplete = ISR_OP_SUBMITTED;
+- req->status = 0;
+-
+- // We must also wait for Ctlr_Ready, otherwise the OOB is not correct, since we read the OOB bytes off the controller
+-
+- req->mask = HIF_INTR2_EDU_CLEAR_MASK|HIF_INTR2_CTRL_READY;
+- req->expect = HIF_INTR2_EDU_DONE;
+- // On error we also want Ctrlr-Ready because for COR ERR, the Hamming WAR depends on the OOB bytes.
+- req->error = HIF_INTR2_EDU_ERR;
+- req->intr = HIF_INTR2_EDU_DONE_MASK;
+- req->expired = jiffies + 3*HZ;
+-
+- edu_status = EDU_volatileRead(EDU_BASE_ADDRESS+EDU_STATUS);
+- // Enable HIF_INTR2 only when we submit the first job in double buffering scheme
+- if (0 == (edu_status & BCHP_EDU_STATUS_Active_MASK)) {
+- ISR_enable_irq(req);
+- }
+-
+- //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+- EDU_reset_done();
+-
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
+-
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_LENGTH, EDU_LENGTH_VALUE);
+-
+- EDU_waitForNoPendingAndActiveBit();
+-
+- EDU_issue_command(req->physAddr , req->edu_ldw, EDU_READ);
+-
+- spin_unlock(&req->lock);
+- return;
+-
+-}
+-
+-int EDU_submit_write(eduIsrNode_t* req)
+-{
+- struct brcmnand_chip* chip = (struct brcmnand_chip*) req->mtd->priv;
+- uint32_t edu_status;
+- uint32_t* p32;
+- int i;
+-
+- spin_lock(&req->lock);
+- // EDU is not a PCI device
+- // THT: TBD: Need to adjust for cache line size here, especially on 7420.
+- req->physAddr = dma_map_single(NULL, req->buffer, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
+-
+- if (!(req->physAddr)) {
+- spin_unlock(&req->lock);
+- return (-1);
+- }
+-
+-
+- req->edu_ldw = chip->ctrl_writeAddr(chip, req->offset, 0);
+-
+-
+- if (req->oobarea) {
+- p32 = (uint32_t*) req->oobarea;
+-if (gdebug) {printk("%s: oob=\n", __FUNCTION__); print_oobbuf(req->oobarea, 16);}
+- }
+- else {
+- // Fill with 0xFF if don't want to change OOB
+- p32 = (uint32_t*) &ffchars[0];
+- }
+-
+-// printk("EDU40\n");
+- for (i = 0; i < 4; i++) {
+- chip->ctrl_write(BCHP_NAND_SPARE_AREA_WRITE_OFS_0 + i*4, cpu_to_be32(p32[i]));
+- }
+-
+- PLATFORM_IOFLUSH_WAR(); // Check if this line may be taken-out
+-
+- /*
+- * Enable L2 Interrupt
+- */
+- //req->cmd = EDU_WRITE;
+- req->opComplete = ISR_OP_SUBMITTED;
+- req->status = 0;
+-
+- /* On write we wait for both DMA done|error and Flash Status */
+- req->mask = HIF_INTR2_EDU_CLEAR_MASK|HIF_INTR2_CTRL_READY;
+- req->expect = HIF_INTR2_EDU_DONE;
+- req->error = HIF_INTR2_EDU_ERR;
+- req->intr = HIF_INTR2_EDU_DONE_MASK|HIF_INTR2_CTRL_READY;
+-
+-
+- ISR_enable_irq(req);
+-
+- //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+- EDU_reset_done();
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
+-
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_LENGTH, EDU_LENGTH_VALUE);
+-
+- EDU_issue_command(req->physAddr, req->edu_ldw, EDU_WRITE); /* 1: Is a Read, 0 Is a Write */
+- spin_unlock(&req->lock);
+- return 0;
+-}
+-
+-
+-/*
+- * Submit the first entry that is in queued state,
+- * assuming queue lock has been held by caller.
+- *
+- * @doubleBuffering indicates whether we need to submit just 1 job or until EDU is full (double buffering)
+- * Return the number of job submitted (either 1 or zero), as we don't support doublebuffering yet.
+- *
+- * In current version (v3.3 controller), since EDU only have 1 register for EDU_ERR_STATUS,
+- * we can't really do double-buffering without losing the returned status of the previous read-op.
+- */
+-int
+-brcmnand_isr_submit_job(void)
+-{
+- uint32_t edu_pending;
+- eduIsrNode_t* req;
+- //struct list_head* node;
+- int numReq = 0;
+-
+-//printk("-->%s\n", __FUNCTION__);
+-//ISR_print_queue();
+-
+- list_for_each_entry(req, &gJobQ.jobQ, list) {
+- //req = container_of(node, eduIsrNode_t, list);
+- switch (req->opComplete) {
+- case ISR_OP_QUEUED:
+- edu_pending = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_STATUS);
+- if (!(BCHP_EDU_STATUS_Pending_MASK & edu_pending)) {
+- if (gJobQ.cmd == EDU_READ) {
+- EDU_submit_read(req);
+- }
+- else if (gJobQ.cmd == EDU_WRITE) {
+- EDU_submit_write(req);
+- }
+- else {
+- printk("%s: Invalid op\n", __FUNCTION__);
+- BUG();
+- }
+- numReq++;
+-#ifdef EDU_DOUBLE_BUFFER_READ
+- if (/*doubleBuffering &&*/ numReq < 2) {
+- continue;
+- }
+-#endif
+- }
+-PRINTK("<-- %s: numReq=%d\n", __FUNCTION__, numReq);
+- return numReq;
+-
+- case ISR_OP_COMPLETED:
+- case ISR_OP_SUBMITTED:
+- case ISR_OP_NEED_WAR:
+- case ISR_OP_TIMEDOUT:
+- /* next entry */
+- continue;
+- }
+- }
+-PRINTK("<-- %s: numReq=%d\n", __FUNCTION__, numReq);
+- return numReq;
+-}
+-
+-/*
+- * Queue the entire page, then wait for completion
+- */
+-static int
+-brcmnand_isr_read_page(struct mtd_info *mtd,
+- uint8_t *outp_buf, uint8_t* outp_oob, uint64_t page)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+- int eccstep;
+- int dataRead = 0;
+- int oobRead = 0;
+- int ret = 0;
+- uint64_t offset = ((uint64_t) page) << chip->page_shift;
+- uint32_t edu_pending;
+- int submitted = 0;
+- unsigned long flags;
+-
+-//if (1/* (int) offset <= 0x2000 /*gdebug > 3 */) {
+-//printk("-->%s, offset=%08x\n", __FUNCTION__, (uint32_t) offset);}
+-if (gdebug > 3 ) {
+-printk("-->%s, page=%0llx, buffer=%p\n", __FUNCTION__, page, outp_buf);}
+-
+-
+-#if 0 // No need to check, we are aligned on a page
+- if (unlikely(offset - sliceOffset)) {
+- printk(KERN_ERR "%s: offset %0llx is not cache aligned, sliceOffset=%0llx, CacheSize=%d\n",
+- __FUNCTION__, offset, sliceOffset, mtd->eccsize);
+- ret = -EINVAL;
+- goto out;
+- }
+-#endif
+-
+-
+- if (unlikely(!EDU_buffer_OK(outp_buf, EDU_READ)))
+- {
+-if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
+- /* EDU does not work on non-aligned buffers */
+- ret = brcmnand_read_page(mtd, outp_buf, outp_oob, page);
+- return (ret);
+- }
+-
+- chip->pagebuf = page;
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (!list_empty(&gJobQ.jobQ)) {
+- printk("%s: Start read page but job queue not empty\n", __FUNCTION__);
+-//ISR_print_queue();
+- BUG();
+- }
+- gJobQ.cmd = EDU_READ;
+- gJobQ.needWakeUp = 0;
+-
+- for (eccstep = 0; eccstep < chip->eccsteps && ret == 0; eccstep++) {
+- eduIsrNode_t* req;
+- /*
+- * Queue the 512B sector read, then read the EDU pending bit,
+- * and issue read command, if EDU is available for read.
+- */
+- req = ISR_queue_read_request(mtd, &outp_buf[dataRead],
+- outp_oob ? &outp_oob[oobRead] : NULL,
+- offset + dataRead);
+-
+- dataRead += chip->eccsize;
+- oobRead += chip->eccOobSize;
+- }
+- //BUG_ON(submitted != 1);
+-
+-
+-
+- /* Kick start it. The ISR will submit the next job */
+- if (!submitted) {
+- submitted = brcmnand_isr_submit_job();
+- }
+-
+- while (!list_empty(&gJobQ.jobQ)) {
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- ret = ISR_wait_for_queue_completion();
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return ret;
+-}
+-
+-
+-/*
+- * Queue several pages for small page SLC, then wait for completion,
+- * assuming that
+- * (1) offset is aligned on a 512B boundary
+- * (2) that outp_buf is aligned on a 32B boundary.
+- * (3) Not in raw mode
+- * This routine only works when ECC-size = Page-Size (Small SLC flashes), and relies on the fact
+- * that the internal buffer can hold several data+OOB buffers for several small pages at once.
+- *
+- * The OOB are read into chip->buffers->OOB.
+- * The Queue Size and chip->buffers->oob are chosen such that the OOB
+- * will all fit inside the buffers.
+- * After a batch of jobs is completed, the OOB is then copied to the output OOB parameter.
+- * To keep it simple stupid, this routine cannot handle Raw mode Read.
+- *
+- * Arguments:
+- * @mtd: MTD handle
+- * @outp_buf Data buffer, passed from file system driver
+- * @inoutpp_oob Address of OOB buffer, passed INOUT from file system driver
+- * @startPage page 0 of batch
+- * @numPages nbr of pages in batch
+- * @ops MTD ops from file system driver. We only look at the OOB mode (raw vs auto vs inplace)
+- */
+-static int
+-brcmnand_isr_read_pages(struct mtd_info *mtd,
+- uint8_t *outp_buf, uint8_t** inoutpp_oob, uint64_t startPage, int numPages,
+- struct mtd_oob_ops *ops)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+- int eccstep;
+- int dataRead = 0;
+- int oobRead = 0;
+- int ret = 0;
+- uint64_t offset = ((uint64_t) startPage) << chip->page_shift;
+- uint32_t edu_pending;
+- int submitted = 0;
+- unsigned long flags;
+- int page;
+- u_char* oob = inoutpp_oob ? *inoutpp_oob : NULL;
+- u_char* oobpoi = NULL;
+- u_char* buf = outp_buf;
+-
+-
+- /* Paranoia */
+- if (chip->pageSize != chip->eccsize) {
+- printk("%s: Can only be called on small page flash\n", __FUNCTION__);
+- BUG();
+- }
+-
+- if (ops->mode == MTD_OOB_RAW) {
+- printk("%s: Can only be called when not in RAW mode\n", __FUNCTION__);
+- BUG();
+- }
+-#ifdef DEBUG_ISR
+-printk("-->%s: mtd=%p, buf=%p, &oob=%p, oob=%p\n", __FUNCTION__,
+-mtd, outp_buf, inoutpp_oob, inoutpp_oob? *inoutpp_oob: NULL);
+-#endif
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (!list_empty(&gJobQ.jobQ)) {
+- printk("%s: Start read page but job queue not empty\n", __FUNCTION__);
+-//ISR_print_queue();
+- BUG();
+- }
+- gJobQ.cmd = EDU_READ;
+- gJobQ.needWakeUp = 0;
+-
+- if (inoutpp_oob && *inoutpp_oob) {
+- // In batch mode, read OOB into internal OOB buffer first.
+- // This pointer will be advanced because oob_transfer depends on it.
+- chip->oob_poi= BRCMNAND_OOBBUF(chip->buffers);
+- oobpoi = chip->oob_poi; // This pointer remains fixed
+- }
+-//gdebug=4;
+- for (page = 0; page < numPages && ret == 0; page++) {
+- eduIsrNode_t* req;
+-
+- req = ISR_queue_read_request(mtd, buf,
+- (inoutpp_oob && *inoutpp_oob) ? &oobpoi[oobRead] : NULL,
+- offset + dataRead);
+-
+- dataRead += chip->eccsize;
+- oobRead += chip->eccOobSize;
+- buf += chip->eccsize;
+- }
+-//gdebug=0;
+- //BUG_ON(submitted != 1);
+-
+- /* Kick start it. The ISR will submit the next job */
+- if (!submitted) {
+- submitted = brcmnand_isr_submit_job();
+- }
+-
+- while (!list_empty(&gJobQ.jobQ)) {
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- ret = ISR_wait_for_queue_completion();
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+-
+- if (ret) {
+- /* Abort, and return error to file system */
+- return ret;
+- }
+-
+-
+- /* Format OOB, from chip->OOB buffers */
+-
+- buf = outp_buf;
+- oob = (inoutpp_oob && *inoutpp_oob) ? *inoutpp_oob : NULL;
+- dataRead = 0;
+- oobRead = 0;
+-PRINTK("%s: B4 transfer OOB: buf=%08x, chip->buffers=%08x, offset=%08llx\n",
+-__FUNCTION__, (uint32_t) buf, chip->buffers, offset + dataRead);
+-
+- // Reset oob_poi to beginning of OOB buffer.
+- // This will get advanced, cuz brcmnand_transfer_oob depends on it.
+- chip->oob_poi = BRCMNAND_OOBBUF(chip->buffers);
+- // oobpoi pointer does not change in for loop
+- oobpoi = chip->oob_poi;
+-
+- for (page=0; page < numPages && ret == 0; page++) {
+- u_char* newoob = NULL;
+-
+-#ifdef EDU_DEBUG_4 /* Read verify */
+- ret = edu_read_verify(mtd, buf,
+- (inoutpp_oob && *inoutpp_oob) ? &oobpoi[oobRead] : NULL,
+- offset + dataRead);
+-
+- if (ret) BUG();
+-#endif
+-
+- if (unlikely(inoutpp_oob && *inoutpp_oob)) {
+- newoob = brcmnand_transfer_oob(chip, oob, ops);
+- chip->oob_poi += chip->eccOobSize;
+- oob = newoob;
+- // oobpoi stays the same
+- }
+-
+- dataRead += chip->eccsize;
+- oobRead += chip->eccOobSize;
+- buf += chip->eccsize;
+-
+- } /* for */
+-
+- if (unlikely(inoutpp_oob && *inoutpp_oob)) {
+- *inoutpp_oob = oob;
+- }
+-
+-PRINTK("<-- %s\n", __FUNCTION__);
+-
+- return 0;
+-}
+-
+-
+ /**
+- * brcmnand_isr_read_page_oob - {REPLACABLE] hardware ecc based page read function
+- * @mtd: mtd info structure
+- * @chip: nand chip info structure. The OOB buf is stored in the oob_poi ptr on return
+- *
+- * Not for syndrome calculating ecc controllers which need a special oob layout
+- */
+-static int
+-brcmnand_isr_read_page_oob(struct mtd_info *mtd,
+- uint8_t* outp_oob, uint64_t page)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+-
+- /*
+- * if BCH codes, use full page read to activate ECC on OOB area
+- */
+- if (chip->ecclevel != BRCMNAND_ECC_HAMMING && chip->ecclevel != BRCMNAND_ECC_DISABLE) {
+- return brcmnand_isr_read_page(mtd, chip->buffers->databuf, outp_oob, page);
+- }
+-
+- else {
+- return brcmnand_read_page_oob(mtd, outp_oob, page);
+- }
+-}
+-
+-
+-
+-
+-#endif
+-
+-
+-/**
+ * brcmnand_do_read_ops - [Internal] Read data with ECC
+ *
+ * @mtd: MTD device structure
+@@ -4390,13 +3420,17 @@
+ //int sndcmd = 1;
+ int ret = 0;
+ uint32_t readlen = ops->len;
+- uint32_t oobread = 0;
+ uint8_t *bufpoi, *oob, *buf;
+- int numPages;
+- int buffer_aligned = 0;
+-//int nonBatch = 0;
+
+
++if (gdebug > 3 )
++{
++printk("-->%s, buf=%p, oob=%p, offset=%0llx, len=%d, end=%0llx\n", __FUNCTION__,
++ ops->datbuf, ops->oobbuf, from, readlen, from+readlen);
++printk("chip->buffers=%p, chip->oob=%p\n",
++ chip->buffers, BRCMNAND_OOBBUF(chip->buffers));
++}
++
+ stats = mtd->ecc_stats;
+
+ // THT: BrcmNAND controller treats multiple chip as one logical chip.
+@@ -4407,7 +3441,6 @@
+ //page = realpage & chip->pagemask;
+
+ col = mtd64_ll_low(from & (mtd->writesize - 1));
+-
+ #ifndef EDU_DEBUG_1
+ /* Debugging 12/27/08 */
+ chip->oob_poi = BRCMNAND_OOBBUF(chip->buffers);
+@@ -4419,91 +3452,38 @@
+ buf = ops->datbuf;
+ oob = ops->oobbuf;
+
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+- /*
+- * Group several pages for submission for small page NAND
+- */
+- if (chip->pageSize == chip->eccsize && ops->mode != MTD_OOB_RAW) {
+- while(1) {
+-//nonBatch = 0;
+- bytes = min(mtd->writesize - col, readlen);
+- // (1) Writing partial or full page
+- aligned = (bytes == mtd->writesize);
++ while(1) {
++ bytes = min(mtd->writesize - col, readlen);
++ aligned = (bytes == mtd->writesize);
+
+- // If writing full page, use user buffer, otherwise, internal buffer
++ /* Is the current page in the buffer ? */
++ if ( 1 /* (int64_t) realpage != chip->pagebuf */ || oob) {
++#ifndef EDU_DEBUG_1
+ bufpoi = aligned ? buf : chip->buffers->databuf;
+-
+- // (2) Buffer satisfies 32B alignment required by EDU?
+- buffer_aligned = EDU_buffer_OK(bufpoi, EDU_READ);
+-
+- // (3) Batch mode if writing more than 1 pages.
+- numPages = min(MAX_JOB_QUEUE_SIZE, readlen>>chip->page_shift);
+-
+- // Only do Batch mode if all 3 conditions are satisfied.
+- if (!aligned || !buffer_aligned || numPages <= 1) {
+- /* Submit 1 page at a time */
+-
+- numPages = 1; // We count partial page read
+- ret = chip->read_page(mtd, bufpoi, chip->oob_poi, realpage);
+-
+- if (ret < 0)
+- break;
+-
+- /* Transfer not aligned data */
+- if (!aligned) {
+- chip->pagebuf = realpage;
+- memcpy(buf, &bufpoi[col], bytes);
+- }
+- buf += bytes;
+-
+- if (unlikely(oob)) {
+- /* if (ops->mode != MTD_OOB_RAW) */
+- oob = brcmnand_transfer_oob(chip, oob, ops);
+-
+- }
+-
+- }
+- else {
+- /*
+- * Batch job possible, all 3 conditions are met
+- * bufpoi = Data buffer from FS driver
+- * oob = OOB buffer from FS driver
+- */
+- bytes = numPages*mtd->writesize;
+-
+- ret = brcmnand_isr_read_pages(mtd, bufpoi, oob? &oob : NULL, realpage, numPages, ops);
+-
+- if (ret < 0)
+- break;
+-
+- buf += bytes; /* Advance Read pointer */
+-
+- }
+-
+-
+- readlen -= bytes;
+-
+- if (!readlen)
+- break;
+-
+- /* For subsequent reads align to page boundary. */
+- col = 0;
+- /* Increment page address */
+- realpage += numPages;
+- }
+- goto out;
+- }
+- else
++#else
++/* EDU Testing */
++ aligned=0;
++ bufpoi = &debug_dbuf.databuf;
++ // rely on size of buffer to be 4096
++ memcpy(&bufpoi[mtd->writesize], debug_sig, 1+strlen(debug_sig));
+ #endif
+- {
+- while(1) {
+- bytes = min(mtd->writesize - col, readlen);
+- aligned = (bytes == mtd->writesize);
+-
+- bufpoi = aligned ? buf : chip->buffers->databuf;
++if (gdebug > 3 )
++ printk("%s: aligned=%d, buf=%p, bufpoi=%p, oob_poi=%p, bytes=%d, readlen=%d\n",
++ __FUNCTION__, aligned, buf, bufpoi, chip->oob_poi, bytes, readlen);
+
++//gdebug=4;
+ ret = chip->read_page(mtd, bufpoi, chip->oob_poi, realpage);
++//gdebug=0;
++#ifdef EDU_DEBUG_1
++ if (0 != strcmp(&bufpoi[mtd->writesize], debug_sig)) {
++ printk("$$$$$$$$$$$$$$ Memory smash at end of buffer at %0llx, expect=%s\n",
++ from, debug_sig);
++ printk(".... found\n"); print_oobbuf(&bufpoi[mtd->writesize], 1+strlen(debug_sig));
++ }
++ if (buf) memcpy(buf, &bufpoi[col], bytes);
++ if (oob) memcpy(oob, chip->oob_poi, mtd->oobsize);
+
++#endif
+ if (ret < 0)
+ break;
+
+@@ -4524,25 +3504,45 @@
+ }
+ }
+
++#if 0
++ if (!(chip->options & NAND_NO_READRDY)) {
++ /*
++ * Apply delay or wait for ready/busy pin. Do
++ * this before the AUTOINCR check, so no
++ * problems arise if a chip which does auto
++ * increment is marked as NOAUTOINCR by the
++ * board driver.
++ */
++ if (!chip->dev_ready)
++ udelay(chip->chip_delay);
++ else
++ nand_wait_ready(mtd);
++ }
++#endif
++ } else {
++printk("%s: Should never get here\n", __FUNCTION__);
++BUG();
++ memcpy(buf, chip->buffers->databuf + col, bytes);
++ buf += bytes;
++ }
+
+- readlen -= bytes;
++ readlen -= bytes;
+
+- if (!readlen)
+- break;
++ if (!readlen)
++ break;
+
+- /* For subsequent reads align to page boundary. */
+- col = 0;
+- /* Increment page address */
+- realpage++;
++ /* For subsequent reads align to page boundary. */
++ col = 0;
++ /* Increment page address */
++ realpage++;
+
+- }
+ }
+-
+-out:
+-//gdebug=0;
+
+ ops->retlen = ops->len - (size_t) readlen;
+
++//#ifndef EDU_DEBUG_1
++if (gdebug > 3 ) printk("<-- %s, ret=%d\n", __FUNCTION__, ret);
++//#endif
+
+ if (ret)
+ return ret;
+@@ -4577,7 +3577,7 @@
+ DEBUG(MTD_DEBUG_LEVEL3, "%s: from=%0llx\n", __FUNCTION__, from);
+
+ if (gdebug > 3 ) {
+-printk("-->%s, offset=%0llx, len=%08x\n", __FUNCTION__, from, len);}
++printk("-->%s, offset=%0llx\n", __FUNCTION__, from);}
+
+
+ /* Do not allow reads past end of device */
+@@ -4610,20 +3610,11 @@
+ if (likely(chip->cet)) {
+ if (likely(chip->cet->flags != BRCMNAND_CET_DISABLED)) {
+ if (brcmnand_cet_update(mtd, from, &status) == 0) {
+-
+-/*
+- * PR57272: Provide workaround for BCH-n ECC HW bug when # error bits >= 4
+- * We will not mark a block bad when the a correctable error already happened on the same page
+- */
+-#if CONFIG_MTD_BRCMNAND_VERSION <= CONFIG_MTD_BRCMNAND_VERS_3_4
+- ret = 0;
+-#else
+ if (status) {
+ ret = -EUCLEAN;
+ } else {
+ ret = 0;
+ }
+-#endif
+ }
+ if (gdebug > 3) {
+ printk(KERN_INFO "DEBUG -> %s ret = %d, status = %d\n", __FUNCTION__, ret, status);
+@@ -4879,7 +3870,7 @@
+ //struct nand_oobinfo noauto_oobsel;
+
+ printk("Comparison Failed\n");
+- print_diagnostics(chip);
++ print_diagnostics();
+
+ //noauto_oobsel = *oobsel;
+ //noauto_oobsel.useecc = MTD_NANDECC_PLACEONLY;
+@@ -4917,7 +3908,7 @@
+ {
+ struct brcmnand_chip * chip = mtd->priv;
+
+- int ret = 0; // Matched
++ int ret = 0;
+ //int ooblen=0, datalen=0;
+ //int complen;
+ u_char* oobbuf = v_oob_buf;
+@@ -4929,12 +3920,7 @@
+
+ if (gdebug > 3) printk("-->%s: addr=%0llx\n", __FUNCTION__, addr);
+
+- /*
+- * Only do it for Hamming codes because
+- * (1) We can't do it for BCH until we can read the full OOB area for BCH-8
+- * (2) OOB area is included in ECC calculation for BCH, so no need to check it
+- * separately.
+- */
++ /* Only do it for Hamming codes */
+ if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+ return 0;
+ }
+@@ -4942,7 +3928,7 @@
+ #if 1
+ page = ((uint64_t) addr) >> chip->page_shift;
+ // Must read entire page
+- ret = chip->read_page(mtd, vbuf, oobbuf, page);
++ ret = brcmnand_read_page(mtd, vbuf, oobbuf, page);
+ if (ret) {
+ printk(KERN_ERR "%s: brcmnand_read_page at %08x failed ret=%d\n",
+ __FUNCTION__, (unsigned int) addr, ret);
+@@ -4967,28 +3953,12 @@
+ brcmnand_Hamming_ecc(&dbuf[pageOffset], sw_ecc);
+
+ if (sw_ecc[0] != oobp[6] || sw_ecc[1] != oobp[7] || sw_ecc[2] != oobp[8]) {
+- if (oobp[6] == 0xff && oobp[7] == 0xff && oobp[8] == 0xff
+- && sw_ecc[0] == 0 && sw_ecc[1] == 0 && sw_ecc[2] == 0)
+- ; // OK
+- else {
+- printk("%s: Verification failed at %0llx. HW ECC=%02x%02x%02x, SW ECC=%02x%02x%02x\n",
+- __FUNCTION__, addr,
+- oobp[6], oobp[7], oobp[8], sw_ecc[0], sw_ecc[1], sw_ecc[2]);
+- ret = 1;
+- break;
+- }
++ printk("%s: Verification failed at %0llx. HW ECC=%02x%02x%02x, SW ECC=%02x%02x%02x\n",
++ __FUNCTION__, addr,
++ oobp[6], oobp[7], oobp[8], sw_ecc[0], sw_ecc[1], sw_ecc[2]);
++ ret = 1;
++ break;
+ }
+-
+- // Verify the OOB if not NULL
+- if (inp_oob) {
+- if (memcmp(&inp_oob[oobOffset], oobp, 6) || memcmp(&inp_oob[oobOffset+9], &oobp[9],7)) {
+- printk("+++++++++++++++++++++++ %s: OOB comp Hamming failed\n", __FUNCTION__);
+- printk("In OOB:\n"); print_oobbuf(&inp_oob[oobOffset], 16);
+- printk("\nVerify OOB:\n"); print_oobbuf(oobp, 16);
+- ret = (-2);
+- break;
+- }
+- }
+ }
+
+ return ret;
+@@ -5062,8 +4032,7 @@
+ * @page: page number to write
+ * @cached: cached programming [removed]
+ */
+-static int
+-brcmnand_write_page(struct mtd_info *mtd,
++static int brcmnand_write_page(struct mtd_info *mtd,
+ const uint8_t *inp_buf, const uint8_t* inp_oob, uint64_t page)
+ {
+ struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+@@ -5094,206 +4063,17 @@
+ }
+
+ // TBD
+-#ifdef BRCMNAND_WRITE_VERIFY
+-if (0 == ret) {
+-int vret;
++if (0) {
++int save_debug = gdebug;
+ //gdebug = 0;
+- vret = brcmnand_verify_page(mtd, offset, inp_buf, mtd->writesize, inp_oob, chip->eccOobSize);
++ ret = brcmnand_verify_page(mtd, offset, inp_buf, mtd->writesize, inp_oob, chip->eccOobSize);
+ //gdebug=save_debug;
+- if (vret) BUG();
+ }
+-#endif
+-
+
+ return ret;
+ }
+
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+
+-/*
+- * Queue the entire page, then wait for completion
+- */
+-static int
+-brcmnand_isr_write_page(struct mtd_info *mtd,
+- const uint8_t *inp_buf, const uint8_t* inp_oob, uint64_t page)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+- int eccstep;
+- int dataWritten = 0;
+- int oobWritten = 0;
+- int ret = 0;
+- uint64_t offset = page << chip->page_shift;
+-
+- uint32_t edu_pending;
+- int submitted = 0;
+- unsigned long flags;
+-
+-if (gdebug > 3 ) {
+-printk("-->%s, page=%0llx\n", __FUNCTION__, page);}
+-
+-
+-#if 0 // No need to check, we are aligned on a page
+- if (unlikely(offset - sliceOffset)) {
+- printk(KERN_ERR "%s: offset %0llx is not cache aligned, sliceOffset=%0llx, CacheSize=%d\n",
+- __FUNCTION__, offset, sliceOffset, mtd->eccsize);
+- ret = -EINVAL;
+- goto out;
+- }
+-#endif
+-
+-
+- if (unlikely(!EDU_buffer_OK(inp_buf, EDU_WRITE)))
+- {
+-if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
+- /* EDU does not work on non-aligned buffers */
+- ret = brcmnand_write_page(mtd, inp_buf, inp_oob, page);
+- return (ret);
+- }
+-
+- chip->pagebuf = page;
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (!list_empty(&gJobQ.jobQ)) {
+- printk("%s: Start read page but job queue not empty\n", __FUNCTION__);
+- BUG();
+- }
+- gJobQ.cmd = EDU_WRITE;
+- gJobQ.needWakeUp = 0;
+-
+-
+- for (eccstep = 0; eccstep < chip->eccsteps && ret == 0; eccstep++) {
+- eduIsrNode_t* req;
+- /*
+- * Queue the 512B sector read, then read the EDU pending bit,
+- * and issue read command, if EDU is available for read.
+- */
+- req = ISR_queue_write_request(mtd, &inp_buf[dataWritten],
+- inp_oob ? &inp_oob[oobWritten] : NULL,
+- offset + dataWritten);
+-
+- dataWritten += chip->eccsize;
+- oobWritten += chip->eccOobSize;
+- }
+-
+-
+- /*
+- * Kick start it. The ISR will submit the next job
+- */
+- if (!submitted) {
+- submitted = brcmnand_isr_submit_job();
+- }
+-
+- while (!list_empty(&gJobQ.jobQ)) {
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- ret = ISR_wait_for_queue_completion();
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return ret;
+-
+-}
+-
+-/*
+- * Queue the several pages, then wait for completion
+- * For 512B page sizes only.
+- */
+-static int
+-brcmnand_isr_write_pages(struct mtd_info *mtd,
+- const uint8_t *inp_buf, const uint8_t* inp_oob, uint64_t startPage, int numPages)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+- int eccstep;
+- int dataWritten = 0;
+- int oobWritten = 0;
+- int ret = 0;
+- uint64_t offset = startPage << chip->page_shift;
+- int page;
+-
+- uint32_t edu_pending;
+- int submitted = 0;
+- unsigned long flags;
+-
+-#if 0
+- /* Already checked by caller */
+- if (unlikely(!EDU_buffer_OK(inp_buf, EDU_WRITE)))
+- {
+-if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
+- /* EDU does not work on non-aligned buffers */
+- ret = brcmnand_write_page(mtd, inp_buf, inp_oob, startPage);
+- return (ret);
+- }
+-#endif
+- /* Paranoia */
+- if (chip->pageSize != chip->eccsize) {
+- printk("%s: Can only be called on small page flash\n", __FUNCTION__);
+- BUG();
+- }
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (!list_empty(&gJobQ.jobQ)) {
+- printk("%s: Start read page but job queue not empty\n", __FUNCTION__);
+- BUG();
+- }
+- gJobQ.cmd = EDU_WRITE;
+- gJobQ.needWakeUp = 0;
+-
+-//gdebug=4;
+- for (page = 0; page < numPages && ret == 0; page++) {
+- eduIsrNode_t* req;
+- /*
+- * Queue the 512B sector read, then read the EDU pending bit,
+- * and issue read command, if EDU is available for read.
+- */
+-
+- req = ISR_queue_write_request(mtd, &inp_buf[dataWritten],
+- inp_oob ? &inp_oob[oobWritten] : NULL,
+- offset + dataWritten);
+-
+- dataWritten += chip->eccsize;
+- oobWritten += chip->eccOobSize;
+- }
+-//gdebug=0;
+-
+-
+- /*
+- * Kick start it. The ISR will submit the next job
+- * We do it here, in order to avoid having to obtain the queue lock
+- * inside the ISR, in preparation for an RCU implementation.
+- */
+- if (!submitted) {
+- submitted = brcmnand_isr_submit_job();
+- }
+-
+- while (!list_empty(&gJobQ.jobQ)) {
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- ret = ISR_wait_for_queue_completion();
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+-
+-
+-#ifdef EDU_DEBUG_5
+-/* Verify */
+- dataWritten = 0;
+- oobWritten = 0;
+- for (page = 0; page < numPages && ret == 0; page++) {
+- ret = edu_write_verify(mtd, &inp_buf[dataWritten],
+- inp_oob ? &inp_oob[oobWritten] : NULL,
+- offset + dataWritten);
+- if (ret) BUG();
+- dataWritten += chip->eccsize;
+- oobWritten += chip->eccOobSize;
+- }
+-#endif
+- return ret;
+-
+-}
+-
+-
+-#endif
+-
+-
+-
+ /**
+ * brcmnand_fill_oob - [Internal] Transfer client buffer to oob
+ * @chip: nand chip structure
+@@ -5307,7 +4087,6 @@
+ {
+ size_t len = ops->ooblen;
+
+-
+ switch(ops->mode) {
+
+ case MTD_OOB_PLACE:
+@@ -5320,8 +4099,6 @@
+ uint32_t boffs = 0, woffs = ops->ooboffs;
+ size_t bytes = 0;
+
+- memset(chip->oob_poi + ops->ooboffs, 0xff, chip->eccOobSize-ops->ooboffs);
+-
+ for(; free->length && len; free++, len -= bytes) {
+ /* Write request not from offset 0 ? */
+ if (unlikely(woffs)) {
+@@ -5370,8 +4147,6 @@
+ uint8_t *buf = ops->datbuf;
+ int bytes = mtd->writesize;
+ int ret = 0;
+- int numPages;
+- int buffer_aligned = 0;
+
+ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+
+@@ -5392,8 +4167,13 @@
+ chip->select_chip(mtd, chipnr);
+ */
+
++#if 0
++/* THT TBD */
++ /* Check, if it is write protected */
++ if (nand_check_wp(mtd))
++ return -EIO;
++#endif
+
+-
+ realpage = to >> chip->page_shift;
+ //page = realpage & chip->pagemask;
+ blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
+@@ -5414,70 +4194,15 @@
+ chip->oob_poi = NULL;
+ }
+
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+- /* Buffer must be aligned for EDU */
+- buffer_aligned = EDU_buffer_OK(buf, EDU_WRITE);
+-
+-#else /* Dont care */
+- buffer_aligned = 0;
+-#endif
+-
+ while(1) {
+-
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+- /*
+- * Group several pages for submission for small page NAND
+- */
+- numPages = min(MAX_JOB_QUEUE_SIZE, writelen>>chip->page_shift);
+-
+- // If Batch mode
+- if (buffer_aligned && numPages > 1 && chip->pageSize == chip->eccsize) {
+- int j;
+-
+- /* Submit min(queueSize, len/512B) at a time */
+- //numPages = min(MAX_JOB_QUEUE_SIZE, writelen>>chip->page_shift);
+- bytes = chip->eccsize*numPages;
+-
+- if (unlikely(oob)) {
+- //u_char* newoob;
+- for (j=0; j<numPages; j++) {
+- oob = brcmnand_fill_oob(chip, oob, ops);
+- /* THT: oob now points to where to read next,
+- * chip->oob_poi contains the OOB to be written
+- */
+- /* In batch mode, we advance the OOB pointer to the next OOB slot
+- * using chip->oob_poi
+- */
+- chip->oob_poi += chip->eccOobSize;
+- }
+- // Reset chip->oob_poi to beginning of OOB buffer for submission.
+- chip->oob_poi = BRCMNAND_OOBBUF(chip->buffers);
+- }
+-
+- ret = brcmnand_isr_write_pages(mtd, buf, chip->oob_poi, realpage, numPages);
+-
++ if (unlikely(oob)) {
++ oob = brcmnand_fill_oob(chip, oob, ops);
++ /* THT: oob now points to where to read next,
++ * chip->oob_poi contains the OOB to be written
++ */
+ }
+-
+- else /* Else submit one page at a time */
+
+-#endif
+- /* Submit one page at a time */
+- {
+- numPages = 1;
+- bytes = mtd->writesize;
+-
+- if (unlikely(oob)) {
+- chip->oob_poi = BRCMNAND_OOBBUF(chip->buffers);
+- oob = brcmnand_fill_oob(chip, oob, ops);
+- /* THT: oob now points to where to read next,
+- * chip->oob_poi contains the OOB to be written
+- */
+- }
+-
+- ret = chip->write_page(mtd, buf, chip->oob_poi, realpage);
+-
+- }
+-
++ ret = chip->write_page(mtd, buf, chip->oob_poi, realpage);
+ if (ret)
+ break;
+
+@@ -5486,9 +4211,21 @@
+ break;
+
+ buf += bytes;
+- realpage += numPages;
++ realpage++;
++
++#if 0
++ page = realpage & chip->pagemask;
++ /* Check, if we cross a chip boundary */
++ if (!page) {
++ chipnr++;
++ chip->select_chip(mtd, -1);
++ chip->select_chip(mtd, chipnr);
++ }
++#endif
+ }
+
++ if (unlikely(oob))
++ memset(chip->oob_poi, 0xff, mtd->oobsize);
+
+ ops->retlen = ops->len - writelen;
+ DEBUG(MTD_DEBUG_LEVEL3, "<-- %s\n", __FUNCTION__);
+@@ -6593,29 +5330,12 @@
+ */
+ static void brcmnand_adjust_timings(struct brcmnand_chip *this, brcmnand_chip_Id* chip)
+ {
+- unsigned long nand_timing1 = this->ctrl_read(BCHP_NAND_TIMING_1);
+- unsigned long nand_timing1_b4;
+- unsigned long nand_timing2 = this->ctrl_read(BCHP_NAND_TIMING_2);
+- unsigned long nand_timing2_b4;
+- extern uint32_t gNandTiming1;
+- extern uint32_t gNandTiming2;
+-
+- /*
+- * Override database values with kernel command line values
+- */
+- if (0 != gNandTiming1 || 0 != gNandTiming2) {
+- if (0 != gNandTiming1) {
+- chip->timing1 = gNandTiming1;
+- //this->ctrl_write(BCHP_NAND_TIMING_1, gNandTiming1);
+- }
+- if (0 != gNandTiming2) {
+- chip->timing2 = gNandTiming2;
+- //this->ctrl_write(BCHP_NAND_TIMING_2, gNandTiming2);
+- }
+- //return;
+- }
+-
+- // Adjust NAND timings from database or command line
++ unsigned long nand_timing1 = this->ctrl_read(BCHP_NAND_TIMING_1);
++ unsigned long nand_timing1_b4;
++ unsigned long nand_timing2 = this->ctrl_read(BCHP_NAND_TIMING_2);
++ unsigned long nand_timing2_b4;
++
++ // Adjust NAND timings:
+ if (chip->timing1) {
+ nand_timing1_b4 = nand_timing1;
+
+@@ -6688,61 +5408,20 @@
+ brcmnand_read_id(struct mtd_info *mtd, unsigned int chipSelect, unsigned long* dev_id)
+ {
+ struct brcmnand_chip * chip = mtd->priv;
+- uint32_t status;
+- uint32_t nandConfig = chip->ctrl_read(BCHP_NAND_CONFIG);
+- uint32_t csNandSelect = 0;
+- uint32_t nandSelect = 0;
+-
+- if (chipSelect > 0) { // Do not re-initialize when on CS0, Bootloader already done that
+-
+-#if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_0_1
+- nandSelect = chip->ctrl_read(BCHP_NAND_CS_NAND_SELECT);
+-
+-printk("B4: NandSelect=%08x, nandConfig=%08x, chipSelect=%d\n", nandSelect, nandConfig, chipSelect);
+-
+
+- #if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_1_0
+- /* Older version do not have EXT_ADDR registers */
+- chip->ctrl_write(BCHP_NAND_CMD_ADDRESS, 0);
+- chip->ctrl_write(BCHP_NAND_CMD_EXT_ADDRESS, chipSelect << BCHP_NAND_CMD_EXT_ADDRESS_CS_SEL_SHIFT);
+- #endif // Set EXT address if version >= 1.0
++#if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_1_0
++ /* Set correct chip Select */
++ chip->ctrl_write(BCHP_NAND_CMD_ADDRESS, BCHP_NAND_CMD_START_OPCODE_DEVICE_ID_READ);
++ chip->ctrl_write(BCHP_NAND_CMD_EXT_ADDRESS, chipSelect << 16);
++#endif
+
+- // Has CFE initialized the register?
+- if (0 == (nandSelect & BCHP_NAND_CS_NAND_SELECT_AUTO_DEVICE_ID_CONFIG_MASK)) {
+-
+- #if CONFIG_MTD_BRCMNAND_VERSION == CONFIG_MTD_BRCMNAND_VERS_0_1
+- csNandSelect = 1<<(BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_SEL_SHIFT + chipSelect);
++PRINTK("-->%s: this=%p, chip->ctrl_read=%p\n", __FUNCTION__, chip, chip->ctrl_read);
+
+- // v1.0 does not define it
+- #elif CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_2_0
+- csNandSelect = 1<<(BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT + chipSelect);
+-
+- #endif // If brcmNAND Version >= 1.0
+-
+- nandSelect = BCHP_NAND_CS_NAND_SELECT_AUTO_DEVICE_ID_CONFIG_MASK | csNandSelect;
+- chip->ctrl_write(BCHP_NAND_CS_NAND_SELECT, nandSelect);
+- }
+-
+- /* Send the command for reading device ID from controller */
+- chip->ctrl_write(BCHP_NAND_CMD_START, OP_DEVICE_ID_READ);
+-
+- /* Wait for CTRL_Ready */
+- brcmnand_wait(mtd, FL_READY, &status);
+-
+-#endif // if BrcmNAND Version >= 0.1
+- }
+-
++ /* Send the command for reading device ID from controller */
+ *dev_id = chip->ctrl_read(BCHP_NAND_FLASH_DEVICE_ID);
+
+ printk(KERN_INFO "brcmnand_probe: CS%1d: dev_id=%08x\n", chipSelect, (unsigned int) *dev_id);
+
+-#if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_0_1
+- nandSelect = chip->ctrl_read(BCHP_NAND_CS_NAND_SELECT);
+-#endif
+-
+- nandConfig = chip->ctrl_read(BCHP_NAND_CONFIG);
+-
+-printk("After: NandSelect=%08x, nandConfig=%08x\n", nandSelect, nandConfig);
+ }
+
+
+@@ -6764,8 +5443,6 @@
+ int version_id;
+ //int density;
+ int i;
+-
+-//gdebug=4;
+
+ /* Read manufacturer and device IDs from Controller */
+ brcmnand_read_id(mtd, chipSelect, &chip->device_id);
+@@ -7169,10 +5846,9 @@
+ /* Version ID */
+ version_id = chip->ctrl_read(BCHP_NAND_REVISION);
+
+- printk(KERN_INFO "BrcmNAND version = 0x%04x %dMB @%08lx\n",
+- version_id, mtd64_ll_low(chip->chipSize>>20), chip->pbase);
++ printk(KERN_INFO "BrcmNAND version = 0x%04x %dMB @%p\n",
++ version_id, mtd64_ll_low(chip->chipSize>>20), chip->vbase);
+
+-//gdebug=0;
+
+ return 0;
+ }
+@@ -7615,92 +6291,51 @@
+ }
+
+ #elif CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_2_0
+- {
+- int i;
+- uint32_t nand_xor;
++ /*
++ * Starting with version 2.0 (bcm7325 and later),
++ * we can use EBI_CS_USES_NAND Registers to find out where the NAND
++ * chips are (which CS)
++ */
++ if (gNumNand > 0) { /* Kernel argument nandcs=<comma-sep-list> override CFE settings */
++ if (brcmnand_sort_chipSelects(mtd, maxchips, gNandCS, chip->CS))
++ return (-EINVAL);
++ cs = chip->CS[chip->numchips - 1];
++PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
++ }
++ else {
+
+- /*
+- * Starting with version 2.0 (bcm7325 and later),
+- * we can use EBI_CS_USES_NAND Registers to find out where the NAND
+- * chips are (which CS)
+- */
++ /* Load the gNandCS_priv[] array from EBI_CS_USES_NAND values,
++ * same way that get_options() does, i.e. first entry is gNumNand
++ */
++ int nandCsShift, i;
++ int numNand = 0;
++ int nandCS[MAX_NAND_CS];
+
+-
+- if (gNumNand > 0) { /* Kernel argument nandcs=<comma-sep-list> override CFE settings */
+- if (brcmnand_sort_chipSelects(mtd, maxchips, gNandCS, chip->CS))
+- return (-EINVAL);
+- cs = chip->CS[chip->numchips - 1];
+- PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+- }
+- else {
+-
+- /* Load the gNandCS_priv[] array from EBI_CS_USES_NAND values,
+- * same way that get_options() does, i.e. first entry is gNumNand
+- */
+- int nandCsShift;
+- int numNand = 0; // Number of NAND chips
+- int nandCS[MAX_NAND_CS];
+-
+- for (i = 0; i< MAX_NAND_CS; i++) {
+- nandCS[i] = -1;
+- }
+-
+- nand_select = brcmnand_ctrl_read(BCHP_NAND_CS_NAND_SELECT);
+- // Be careful here, the last bound depends on chips. Some chips allow 8 CS'es (3548a0) some only 2 (3548b0)
+- // Here we rely on BCHP_NAND_CS_NAND_SELECT_reserved1_SHIFT being the next bit.
+- for (i=0, nandCsShift = BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT;
+- nandCsShift < BCHP_NAND_CS_NAND_SELECT_reserved1_SHIFT;
+- nandCsShift ++)
+- {
+- if (nand_select & (1 << nandCsShift)) {
+- nandCS[i] = nandCsShift - BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT;
+- PRINTK("Found NAND on CS%1d\n", nandCS[i]);
+- i++;
+- }
+- }
+- numNand = i;
+- if (brcmnand_sort_chipSelects(mtd, maxchips, nandCS, chip->CS))
+- return (-EINVAL);
+- cs = chip->CS[chip->numchips - 1];
+- PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+-
+-
+-
+-
+-
++ for (i = 0; i< MAX_NAND_CS; i++) {
++ nandCS[i] = -1;
+ }
+-
+- /*
+- * 2618-7.3: For v2.0 or later, set xor_disable according to NAND_CS_NAND_XOR:00 bit
+- */
+-
+- nand_xor = brcmnand_ctrl_read(BCHP_NAND_CS_NAND_XOR);
+- printk("NAND_CS_NAND_XOR=%08x\n", nand_xor);
+- //
+-#ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
+- /* Testing 1,2,3: Force XOR disable on CS0, if not done by CFE */
+- if (chip->CS[0] == 0) {
+- printk("Disabling XOR: Before: SEL=%08x, XOR=%08x\n", nand_select, nand_xor);
+-
+- nand_select &= ~BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_SEL_MASK;
+- nand_xor &= ~BCHP_NAND_CS_NAND_XOR_EBI_CS_0_ADDR_1FC0_XOR_MASK;
+-
+- brcmnand_ctrl_write(BCHP_NAND_CS_NAND_SELECT, nand_select);
+- brcmnand_ctrl_write(BCHP_NAND_CS_NAND_XOR, nand_xor);
+-
+- printk("Disabling XOR: After: SEL=%08x, XOR=%08x\n", nand_select, nand_xor);
+- }
+-#endif
+- /* Translate nand_xor into our internal flag, for brcmnand_writeAddr */
+- for (i=0; i<chip->numchips; i++) {
+-
+- /* Set xor_disable, 1 for each NAND chip */
+- if (!(nand_xor & (BCHP_NAND_CS_NAND_XOR_EBI_CS_0_ADDR_1FC0_XOR_MASK<<i))) {
+-printk("Disabling XOR on CS#%1d\n", chip->CS[i]);
+- chip->xor_disable[i] = 1;
++
++ nand_select = brcmnand_ctrl_read(BCHP_NAND_CS_NAND_SELECT);
++ // Be careful here, the last bound depends on chips. Some chips allow 8 CS'es (3548a0) some only 2 (3548b0)
++ // Here we rely on BCHP_NAND_CS_NAND_SELECT_reserved1_SHIFT being the next bit.
++ for (i=0, nandCsShift = BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT;
++ nandCsShift < BCHP_NAND_CS_NAND_SELECT_reserved1_SHIFT;
++ nandCsShift ++)
++ {
++ if (nand_select & (1 << nandCsShift)) {
++ nandCS[i] = nandCsShift - BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT;
++ PRINTK("Found NAND on CS%1d\n", nandCS[i]);
++ i++;
+ }
+ }
++ numNand = i;
++ if (brcmnand_sort_chipSelects(mtd, maxchips, nandCS, chip->CS))
++ return (-EINVAL);
++ cs = chip->CS[chip->numchips - 1];
++PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ }
++
++
+ #else
+ #error "Unknown Broadcom NAND controller version"
+ #endif /* Versions >= 1.0 */
+@@ -7728,15 +6363,24 @@
+ volatile unsigned long acc_control;
+
+ chip->numchips = 1;
++ if (chip->chipSize >= (128 << 20)) {
++ chip->pbase = 0x11000000; /* Skip 16MB EBI Registers */
+
+- /* Set up base, based on flash size */
+- if (chip->chipSize >= (256 << 20)) {
+- chip->pbase = 0x12000000;
+- mtd->size = 0x20000000 - chip->pbase; // THT: This is different than chip->chipSize
+- } else {
+- /* We know that flash endAddr is 0x2000_0000 */
+- chip->pbase = 0x20000000 - chip->chipSize;
++ mtd->num_eraseblocks = (chip->chipSize - (16<<20)) >> chip->erase_shift; // Maximum size on a 128MB/256MB flash
++ chip->mtdSize = device_size(mtd);
++ }
++/*
++ else if (chip->chipSize == (256 << 20)) {
++ chip->pbase = 0x11000000; // Skip 16MB EBI Registers
++ mtd->size = 240<<20; // Maximum size on a 256MB flash, provided CS0/NOR is disabled
++ }
++ */
++ else {
++ chip->pbase = 0x18000000 - chip->chipSize;
+ mtd->size = chip->chipSize;
++ chip->mtdSize = mtd->size;
++
++ //mtd->size_hi = 0;
+ }
+
+ printk("Found NAND chip on Chip Select %d, chipSize=%dMB, usable size=%dMB, base=%08x\n",
+@@ -7926,7 +6570,7 @@
+ printk("ACC: %d OOB bytes per 512B ECC step; from ID probe: %d\n", eccOobSize, chip->eccOobSize);
+ // We have recorded chip->eccOobSize during probe, let's compare it against value from ACC
+ if (chip->eccOobSize < eccOobSize) {
+- printk("Flash says it has %d OOB bytes, but ECC level %lu need %d bytes\n",
++ printk("Flash says it has %d OOB bytes, but ECC level %d need %d bytes\n",
+ chip->eccOobSize, eccLevel, eccOobSize);
+ printk(KERN_INFO "Please fix your board straps. Aborting to avoid file system damage\n");
+ BUG();
+@@ -7941,7 +6585,7 @@
+ break;
+
+ default:
+- printk(KERN_ERR "Unsupported ECC level %lu\n", eccLevel);
++ printk(KERN_ERR "Unsupported ECC level %d\n", eccLevel);
+ BUG();
+
+ }
+@@ -7963,11 +6607,11 @@
+ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc_control );
+ printk("Corrected PARTIAL_PAGE_EN: ACC_CONTROL = %08lx\n", acc_control);
+ }
+-#ifdef CONFIG_MIPS_BCM3548
+- /* THT PR50928: Disable WR_PREEMPT for 3548L and 3556 */
+- acc_control &= ~(BCHP_NAND_ACC_CONTROL_WR_PREEMPT_EN_MASK);
++#if 1
++ /* THT Disable Optimization for 2K page */
++ acc_control &= ~(BCHP_NAND_ACC_CONTROL_WR_PREEMPT_EN_MASK|BCHP_NAND_ACC_CONTROL_PAGE_HIT_EN_MASK);
+ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc_control );
+- printk("Disable WR_PREEMPT: ACC_CONTROL = %08lx\n", acc_control);
++ printk("Disable WR_PREEMPT and PAGE_HIT_EN: ACC_CONTROL = %08lx\n", acc_control);
+ #endif
+ printk("ACC_CONTROL for MLC NAND: %08lx\n", acc_control);
+ }
+@@ -8010,58 +6654,7 @@
+ printk("SLC flash: Corrected ACC_CONTROL = %08lx from %08lx\n", acc_control, org_acc_control);
+ }
+ }
+-
+-
+-#if CONFIG_MTD_BRCMNAND_VERSION <= CONFIG_MTD_BRCMNAND_VERS_3_4
+- /*
+- * PR57272: Workaround for BCH-n error,
+- * reporting correctable errors with 4 or more bits as uncorrectable:
+- */
+- if (chip->ecclevel != 0 && chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- int corr_threshold;
+-
+- if ( chip->ecclevel >= BRCMNAND_ECC_BCH_4) {
+- corr_threshold = 2;
+- }
+- else {
+- corr_threshold = 1; // 1 , default for Hamming
+- }
+-
+- printk(KERN_INFO "%s: CORR ERR threshold set to %d bits\n", __FUNCTION__, corr_threshold);
+- corr_threshold <<= BCHP_NAND_CORR_STAT_THRESHOLD_CORR_STAT_THRESHOLD_SHIFT;
+- brcmnand_ctrl_write(BCHP_NAND_CORR_STAT_THRESHOLD, corr_threshold);
+- }
+-
+-#else
+- /*
+- * If ECC level is BCH, set CORR Threshold according to # bits corrected
+- */
+- if (chip->ecclevel != 0 && chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- int corr_threshold;
+-
+- if (chip->ecclevel >= BRCMNAND_ECC_BCH_8) {
+- corr_threshold = 6; // 6 out of 8
+- }
+- else if ( chip->ecclevel >= BRCMNAND_ECC_BCH_4) {
+- corr_threshold = 3; // 3 out of 4
+- }
+- else {
+- corr_threshold = 1; // 1 , default for Hamming
+- }
+- printk(KERN_INFO "%s: CORR ERR threshold set to %d bits\n", __FUNCTION__, corr_threshold);
+- corr_threshold <<= BCHP_NAND_CORR_STAT_THRESHOLD_CORR_STAT_THRESHOLD_SHIFT;
+- brcmnand_ctrl_write(BCHP_NAND_CORR_STAT_THRESHOLD, corr_threshold);
+- }
+-#endif
+-
+ }
+-
+-#else
+- /* Version 2.x, Hamming codes only */
+- /* If chip Select is not zero, the CFE may not have initialized the NAND flash */
+- if (chip->CS[0]) {
+- /* Nothing for now */
+- }
+ #endif // Version 3.0+
+ #endif // Version 1.0+
+
+@@ -8112,17 +6705,12 @@
+ #ifdef EDU_DEBUG_3
+ printk("++++++++++++ EDU_DEBUG_3 enabled\n");
+ #endif
+-#if defined( EDU_DEBUG_4 ) || defined( EDU_DEBUG_5 )
+-init_edu_buf();
+-
+- #ifdef EDU_DEBUG_4
+- printk("++++++++++++ EDU_DEBUG_4 (read verify) enabled\n");
+- #endif
+-
+- #ifdef EDU_DEBUG_5
+- printk("++++++++++++ EDU_DEBUG_5 (write verify) enabled\n");
+- #endif
++#ifdef EDU_DEBUG_4
++printk("++++++++++++ EDU_DEBUG_4 (read verify) enabled\n");
+ #endif
++#ifdef EDU_DEBUG_5
++printk("++++++++++++ EDU_DEBUG_5 (write verify) enabled\n");
++#endif
+
+ PRINTK("%s 30\n", __FUNCTION__);
+ /*
+@@ -8200,22 +6788,8 @@
+ }
+ }
+ else {
+- switch (mtd->writesize) {
+- case 4096:
+- if (chip->ecclevel == BRCMNAND_ECC_HAMMING) {
+- printk(KERN_WARNING "This SLC-4K-page flash may not be suitable for Hamming codes\n");
+- chip->ecclayout = &brcmnand_oob_128;
+- }
+- else {
+- chip->ecclayout = &brcmnand_oob_bch4_4k;
+- }
+- break;
+-
+- default:
+- printk(KERN_ERR "Unsupported page size of %d\n", mtd->writesize);
+- BUG();
+- break;
+- }
++ printk(KERN_ERR "Unsupported SLC NAND with page size of %d\n", mtd->writesize);
++ BUG();
+ }
+ break;
+
+@@ -8239,18 +6813,7 @@
+ //chip->eccOobSize = (mtd->oobsize*512) /mtd->writesize;
+ printk(KERN_INFO "mtd->oobsize=%d, mtd->eccOobSize=%d\n", mtd->oobsize, chip->eccOobSize);
+
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+ if (!chip->read_page)
+- chip->read_page = brcmnand_isr_read_page;
+- if (!chip->write_page)
+- chip->write_page = brcmnand_isr_write_page;
+- if (!chip->read_page_oob)
+- chip->read_page_oob = brcmnand_isr_read_page_oob;
+- /* There is no brcmnand_isr_write_page_oob */
+- if (!chip->write_page_oob)
+- chip->write_page_oob = brcmnand_write_page_oob;
+-#else
+- if (!chip->read_page)
+ chip->read_page = brcmnand_read_page;
+ if (!chip->write_page)
+ chip->write_page = brcmnand_write_page;
+@@ -8258,7 +6821,6 @@
+ chip->read_page_oob = brcmnand_read_page_oob;
+ if (!chip->write_page_oob)
+ chip->write_page_oob = brcmnand_write_page_oob;
+-#endif
+ if (!chip->read_oob)
+ chip->read_oob = brcmnand_do_read_ops;
+ if (!chip->write_oob)
+@@ -8387,17 +6949,21 @@
+ EDU_init();
+ #endif
+
++gdebug=0;
++if (0) {
++ char oob[128];
++
++ printk("------------------> Dry-run\n");
++ brcmnand_posted_read_oob(mtd, oob, device_size(mtd) - mtd->erasesize, 1);
++ print_oobbuf(oob, 16);
++ printk("<------------------ End Dry-run\n");
++}
+
++if (gdebug > 3) printk("%s 60 Calling scan_bbt\n", __FUNCTION__);
+
+-#ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
+-gdebug=4;
+- printk("-----------------------------------------------------\n");
+- print_nand_ctrl_regs();
+- printk("-----------------------------------------------------\n");
+-#endif
+-
+-
+ err = chip->scan_bbt(mtd);
++if (gdebug > 3) printk("%s 80 Done scan_bbt\n", __FUNCTION__);
++//gdebug=0;
+
+
+ #ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+@@ -8411,9 +6977,9 @@
+ }
+ #endif
+
+-//gdebug=0;
+ PRINTK("%s 99\n", __FUNCTION__);
+
++if (gdebug) print_diagnostics();
+ return err;
+
+ }
+Index: drivers/mtd/brcmnand/brcmnand_cet.c
+===================================================================
+--- drivers/mtd/brcmnand/brcmnand_cet.c (revision 1)
++++ drivers/mtd/brcmnand/brcmnand_cet.c (working copy)
+@@ -72,20 +72,12 @@
+
+ #define CET_SYNC_FREQ (10*60*HZ)
+
+-
+ static char cet_pattern[] = {'C', 'E', 'T', 0};
+ static struct brcmnand_cet_descr cet_descr = {
+ .offs = 9,
+ .len = 4,
+ .pattern = cet_pattern
+ };
+-
+-/*
+- * This also applies to Large Page SLC flashes with BCH-4 ECC.
+- * We don't support BCH-4 on Small Page SLCs because there are not
+- * enough free bytes for the OOB, but we don't enforce it,
+- * in order to allow page aggregation like in YAFFS2 on small page SLCs.
+- */
+ static struct brcmnand_cet_descr cet_descr_mlc = {
+ .offs = 1,
+ .len = 4,
+@@ -685,18 +677,10 @@
+ if (unlikely(gdebug)) {
+ printk(KERN_INFO "brcmnandCET: Creating correctable error table ...\n");
+ }
+-
+- if (NAND_IS_MLC(this) || /* MLC flashes */
+- /* SLC w/ BCH-n; We don't check for pageSize, and let it be */
+- (this->ecclevel >= BRCMNAND_ECC_BCH_1 && this->ecclevel <= BRCMNAND_ECC_BCH_12))
+- {
++ if (NAND_IS_MLC(this)) {
+ this->cet = cet = &cet_descr_mlc;
+-if (gdebug) printk("%s: CET = cet_desc_mlc\n", __FUNCTION__);
+- }
+-
+- else {
++ } else {
+ this->cet = cet = &cet_descr;
+-if (gdebug) printk("%s: CET = cet_descr\n", __FUNCTION__);
+ }
+ cet->flags = 0x00;
+ /* Check that BBT table and mirror exist */
+Index: drivers/mtd/brcmnand/brcmnand_isr.c
+===================================================================
+--- drivers/mtd/brcmnand/brcmnand_isr.c (revision 1)
++++ drivers/mtd/brcmnand/brcmnand_isr.c (working copy)
+@@ -22,705 +22,189 @@
+ * 20090318 tht Original coding
+ */
+
+-//#define ISR_DEBUG_SMP
+-#undef ISR_DEBUG_SMP
+
+-#ifdef ISR_DEBUG_SMP
+-#include <asm/atomic.h>
+-#endif
+-
+-
+ #include "brcmnand_priv.h"
+ #include "edu.h"
+
+-#include <linux/dma-mapping.h>
+-
+ #define PRINTK(...)
+-//#define PRINTK printk
+-
+-#ifdef ISR_DEBUG_SMP
+-static atomic_t v = ATOMIC_INIT(1);
+-#define PRINTK1(...) if (!atomic_dec_and_test(&v)) printk("<")
+-#define PRINTK2(...) atomic_inc(&v) //, printk(">"))
+-#define PRINTK5(...) if (!atomic_dec_and_test(&v)) printk("+");
+-#define PRINTK6(...) atomic_inc(&v) // printk("-");
+-#define PRINTK3(...) if (!atomic_dec_and_test(&v)) printk("[");
+-#define PRINTK4(...) atomic_inc(&v) // printk("]");
+-
+-#else
+-#define PRINTK1(...)
+-#define PRINTK2(...)
+-#define PRINTK3(...)
+-#define PRINTK4(...)
+-#define PRINTK5(...)
+-#define PRINTK6(...)
+-#endif
++//define PRINTK printk
+
+
+ // Wakes up the sleeping calling thread.
+ static DECLARE_WAIT_QUEUE_HEAD(gEduWaitQ);
+
+-//eduIsrNode_t gEduIsrData;
+-eduIsrNode_t gEduIsrPool[MAX_JOB_QUEUE_SIZE+2]; /* ReadOp Pool, add 2 for Pushed WAR jobs */
++eduIsrData_t gEduIsrData;
+
+-isrJobQ_t gJobQ; /* Job Queue */
+-
+-extern int gdebug;
+-
+-
+-/*
+- * Queue next sector for read/write, assuming caller holds queue lock
+- */
+-eduIsrNode_t*
+-ISR_queue_read_request(struct mtd_info *mtd,
+- void* buffer, u_char* oobarea, loff_t offset)
++static irqreturn_t ISR_isr(int irq, void *devid, struct pt_regs *regs)
+ {
+- eduIsrNode_t* entry;
+- struct list_head* node;
+-
+- // Grab one request from avail list
+- if (list_empty(&gJobQ.availList)) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- node = gJobQ.availList.next;
+- if (!node) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- entry = list_entry(node, eduIsrNode_t, list);
+- list_del(node);
+-
+- // Queue entry
+- list_add_tail(node, &gJobQ.jobQ);
+- spin_lock_init(&entry->lock);
+- entry->mtd = mtd;
+- entry->buffer = buffer;
+- entry->oobarea = oobarea;
+- entry->offset = offset;
+- entry->ret = -1;
+- entry->refCount = 1;
+- entry->opComplete = ISR_OP_QUEUED;
+-
+- return entry;
+-}
+-
+-eduIsrNode_t*
+-ISR_queue_write_request(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset)
+-{
+- eduIsrNode_t* entry;
+- struct list_head* node;
+-
+- // Grab one request from avail list
+- if (list_empty(&gJobQ.availList)) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- node = gJobQ.availList.next;
+- if (!node) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- entry = list_entry(node, eduIsrNode_t, list);
+- list_del(node);
+-
+- // Queue entry
+- list_add_tail(node, &gJobQ.jobQ);
+- spin_lock_init(&entry->lock);
+- entry->mtd = mtd;
+- entry->buffer = buffer;
+- entry->oobarea = oobarea;
+- entry->offset = offset;
+- entry->ret = -1;
+- entry->refCount = 1;
+- entry->opComplete = ISR_OP_QUEUED;
+-
+- return entry;
+-}
+-
+-
+-/*
+- * Push next sector for dummy read to head of queue, assuming caller holds queue lock
+- * Job will be next to be executed
+- */
+-eduIsrNode_t*
+-ISR_push_request(struct mtd_info *mtd,
+- void* buffer, u_char* oobarea, loff_t offset)
+-{
+- eduIsrNode_t* entry;
+- struct list_head* node;
+-
+- // Grab one request from avail list
+- if (list_empty(&gJobQ.availList)) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- node = gJobQ.availList.next;
+- if (!node) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- entry = list_entry(node, eduIsrNode_t, list);
+- list_del(node);
+-
+- // Push to head of queue
+- list_add(node, &gJobQ.jobQ);
+- spin_lock_init(&entry->lock);
+- entry->mtd = mtd;
+- entry->buffer = buffer;
+- entry->oobarea = oobarea;
+- entry->offset = offset;
+- entry->ret = -1;
+- entry->refCount = 1;
+- entry->opComplete = ISR_OP_QUEUED;
+-
+- return entry;
+-}
+-
+-
+-/*
+- * Called with ReqdQ Read lock held
+- * Returns pointer to node that satisfies opStatus,
+- * with spin lock held (spin_lock()'ed assuming queue lock has been held))
+- */
+-eduIsrNode_t*
+-ISR_find_request( isrOpStatus_t opStatus)
+-{
+- eduIsrNode_t* req;
+-
+- list_for_each_entry(req, &gJobQ.jobQ, list) {
+-
+- // We called this with spin_lock_irqsave on queue lock, so no need for the irq variant
+- spin_lock(&req->lock);
+- if (req->opComplete == opStatus) {
+- return req;
+- }
+- spin_unlock(&req->lock);
+- }
+- return (eduIsrNode_t*) 0;;
+-}
+-
+-#if 0
+-static void
+-ISR_print_queue(void)
+-{
+- eduIsrNode_t* req;
+- int i=0;
+-
+- list_for_each_entry(req, &gJobQ.jobQ, list) {
+-
+- // We called this with spin_lock_irqsave on queue lock, so no need for the irq variant
+- printk("I=%d req=%p, offset=%0llx, opComp=%d, list=%p, next=%p, prev=%p\n",
+- i, req, req->offset, req->opComplete, &req->list, req->list.next, req->list.prev);
+- i++;
+- }
+- return (eduIsrNode_t*) 0;;
+-}
+-#endif
+-
+-
+-/*
+- * We've got interrupted, and verified that job is complete.
+- * Job lock has been held by caller.
+- * Do Read completion routines
+- * runs in interrupt context.
+- * Return returned value of read-op.
+- */
+-
+-
+-
+-#if 0 //def EDU_DOUBLE_BUFFER_READ
+-
+-/* Save this to be revived when we are sure that EDU's double buffering works */
+-static int
+-ISR_read_completion(eduIsrNode_t* req)
+-{
+- /* Make sure that the current request does not cause an UNC ERR, as
+- * that would require a read from the LKGS to reset EDU
+- */
+- if (req->status & HIF_INTR2_EDU_ERR) {
+- uint32_t edu_err_status;
+-
+- edu_err_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_ERR_STATUS);
+- if (edu_err_status && edu_err_status != EDU_ERR_STATUS_NandECCcor) {
+-
+- /* If error, we must stop the on-going EDU op, because it will be dropped by EDU.
+- * This is VLSI PR2389
+- */
+- edu_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_STATUS);
+- if (edu_status & BCHP_EDU_STATUS_Active_MASK) {
+- uint32_t edu_done = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_DONE);
+-
+-
+- // Abort current command
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_STOP, BCHP_EDU_STOP_Stop_MASK);
+-
+- // Wait for Done to increment
+- while (edu_done == EDU_volatileRead(EDU_BASE_ADDRESS + EDU_DONE))
+- udelay(10);
+- // Wait for Pending and Active to Clear
+- while (0 != (edu_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_STATUS)))
+- udelay(10);
+- // Reset Stop
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_STOP, 0);
+- // Let the process context thread handle the WAR,
+- // But we need to requeue the current op (req2)
+- req2 = req->list.next;
+- down(&req2->lock);
+- if (req2 && req2->opComplete == ISR_OP_SUBMITTED) {
+- req2->opComplete = ISR_OP_QUEUED;
+- }
+- up(&req2->lock);
+- }
+- }
+-
+- }
+- // ReadOp completes with no errors, queue next requests until Pending is set
+-
+-
+-}
+-
+-#endif
+-
+-/*
+- * The requests are queued, some with ISR_OP_SUBMITTED status, some with ISR_OP_QUEUED
+- * When an interrupt comes in, we just look for the one that are in submitted status, and mark them
+- * as ISR_OP_COMPLETE, and wake up the wait queue.
+- * However, if (1) there is an error that requires a workaround, or (2) that the operation is not yet completed,
+- * we need to take appropriate action depending on the case.
+- * In (1), we have a false uncorrectable error, that need a read from the last known good sector,
+- * so if double buffering is in effect, we need to abort the current EDU job, in order to do the workaround.
+- * In (2) we just update the current job, and let the HW interrupt us again.
+- *
+- * Runs in interrupt context.
+- */
+-static irqreturn_t
+-ISR_isr(int irq, void *devid, struct pt_regs *regs)
+-{
+ uint32_t status, rd_data;
+ uint32_t intrMask;
+- eduIsrNode_t* req;
+- //struct list_head* node;
+- uint32_t flashAddr;
+ unsigned long flags;
+
+ /*
+ * Not mine
+ */
+- if (devid != (void*) &gJobQ) {
++ if (devid != (void*) &gEduIsrData) {
+ return IRQ_NONE;
+ }
+
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- /* TBD: How to tell Read Request from Write Request */
+- if (list_empty(&gJobQ.jobQ)) {
+- printk("%s: Impossible no job to process\n", __FUNCTION__);
+- //BUG();
+- // CLear interrupt and return
+- intrMask = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
+- ISR_disable_irq(intrMask);
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return IRQ_HANDLED;
+- }
+-
+- flashAddr = EDU_volatileRead(EDU_BASE_ADDRESS+EDU_EXT_ADDR) - (EDU_LENGTH_VALUE-1);
+-
+- flashAddr &= ~(EDU_LENGTH_VALUE-1);
+-
+- req = ISR_find_request(ISR_OP_SUBMITTED);
+-
+- // Paranoia
+- if (!req) {
+- printk("%s: Impossible failed to find queued job\n", __FUNCTION__);
+- BUG();
+- }
+-
+- // req->lock held here.
+-
+- /*
+- * Remember the status, as there can be several L1 interrupts before completion.
+- * Grab the lock first, we don't want any race condition.
+- */
+- // spin_lock(&req->lock); Already locked by ISR_find_request
+ intrMask = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
+ rd_data = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
+
+-PRINTK("==> %s: Awaken rd_data=%08x, intrMask=%08x, cmd=%d, flashAddr=%08x\n", __FUNCTION__,
+- rd_data, intrMask, gJobQ.cmd, req->edu_ldw);
++PRINTK("%s: Awaken rd_data=%08x, intrMask=%08x, cmd=%d, flashAddr=%08x\n", __FUNCTION__,
++ rd_data, intrMask, gEduIsrData.cmd, gEduIsrData.flashAddr);
+
+- req->status |= rd_data;
+- status = req->status & req->mask;
+-
+ /*
+- * Evaluate exit/completion condition.
++ * Remember the status, as there can be several L1 interrupts before completion
+ */
+- switch (gJobQ.cmd) {
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
++ gEduIsrData.status |= rd_data;
++ status = gEduIsrData.status & gEduIsrData.mask;
++
++ // Evaluate exit/completion condition
++ switch (gEduIsrData.cmd) {
+ case EDU_READ:
+ case NAND_CTRL_READY:
+- if ((req->expect == (req->status & req->expect)) ||
+- (req->status & req->error))
+- {
+- req->opComplete = ISR_OP_COMPLETED;
+- }
++ gEduIsrData.opComplete = ((gEduIsrData.expect == (gEduIsrData.status & gEduIsrData.expect)) ||
++ (gEduIsrData.status & gEduIsrData.error));
+ break;
+
+ case EDU_WRITE:
+ /*
+ * We wait for both DONE|ERR +CTRL_READY
+ */
+- if ((req->expect == (req->status & req->expect) ||
+- (req->status & req->error))
++ gEduIsrData.opComplete = ((gEduIsrData.expect == (gEduIsrData.status & gEduIsrData.expect) ||
++ (gEduIsrData.status & gEduIsrData.error))
+ &&
+- (req->status & HIF_INTR2_CTRL_READY))
+- {
+- req->opComplete = ISR_OP_COMPLETED;
+- (void) dma_unmap_single(NULL, req->physAddr, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
+- }
+- break;
+-
+- default:
+- printk("%s: Invalid command %08x\n", __FUNCTION__, gJobQ.cmd);
+- BUG();
++ (gEduIsrData.status & HIF_INTR2_CTRL_READY));
++ break;
+ }
+- if (ISR_OP_COMPLETED == req->opComplete) {
+- int submitted;
+-
+- /* ACK interrupt */
+- ISR_disable_irq(req->intr);
+-
+- // Do we need to do WAR for EDU, since EDU stop dead in its track regardless of the kind of errors. Bummer!
+- if (req->status & HIF_INTR2_EDU_ERR) {
+- uint32_t edu_err_status;
+-
+- /*
+- * We need to do WAR for EDU, which just stops dead on its tracks if there is any error, correctable or not.
+- * Problem is, the WAR needs to be done in process context,
+- * so we wake up the process context thread, and handle the WAR there.
+- */
+-PRINTK("%s: Awaken process context thread for EDU WAR, flashAddr=%08x, status=%08x, hif_intr2=%08x\n",
+-__FUNCTION__, req->edu_ldw, req->status, HIF_INTR2_EDU_ERR);
+- gJobQ.needWakeUp= 1;
+- req->opComplete = ISR_OP_NEED_WAR;
+- wake_up(&gEduWaitQ);
+- spin_unlock(&req->lock);
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return IRQ_HANDLED;
+- }
+-
+- /*
+- * Get here only if there are no errors, call job completion routine.
+- */
+- switch (gJobQ.cmd) {
+- case EDU_READ:
+- /* All is left to do is to handle the OOB read */
+- req->ret = brcmnand_edu_read_comp_intr(req->mtd, req->buffer, req->oobarea, req->offset,
+- req->status);
+- break;
+-
+- case EDU_WRITE:
+- {
+- /*
+- * Even if there are no HIF_INTR2_ERR, we still need to check
+- * the flash status. If it is set, we need to update the BBT
+- * which requires process context WAR
+- */
+- struct brcmnand_chip *chip = req->mtd->priv;
+- uint32_t flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+-
+- req->needBBT=0;
+- /* Just to be dead sure */
+- if (!(flashStatus & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK)) {
+- printk("%s: Impossible, CTRL-READY already asserted\n", __FUNCTION__);
+- BUG();
+- }
+- /* Check for flash write error, in which case tell process context thread to handle it */
+- if (flashStatus & 0x1) {
+- req->needBBT = 1;
+- gJobQ.needWakeUp= 1;
+- req->opComplete = ISR_OP_NEED_WAR;
+- wake_up(&gEduWaitQ);
+- spin_unlock(&req->lock);
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return IRQ_HANDLED;
+- }
+- /* Nothing to be done when everything is OK
+- *else
+- * req->ret = brcmnand_edu_write_completion(req->mtd, req->buffer, req->oobarea, req->offset,
+- * req->status, req->physAddr, rq->needBBT);
+- */
+- }
+- break;
+- }
+-
+- // Jop completes with no errors, queue next requests until Pending is set
+- list_del(&req->list);
+-
+- list_add_tail(&req->list, &gJobQ.availList);
+- spin_unlock(&req->lock);
+-
+- submitted = brcmnand_isr_submit_job();
+-
+- if (!submitted) { /* No more job to submit, we are done, wake up process context thread */
+- wake_up(&gEduWaitQ);
+- }
+-
++ if (gEduIsrData.opComplete) {
++ ISR_disable_irq(gEduIsrData.intr);
++ wake_up_interruptible(&gEduWaitQ);
+ }
+-
+ else {
+ /* Ack only the ones that show */
+- uint32_t ack = req->status & req->intr;
++ uint32_t ack = gEduIsrData.status & gEduIsrData.intr;
+
+-PRINTK("%s: opComp=0, intr=%08x, mask=%08x, expect=%08x, err=%08x, status=%08x, rd_data=%08x, intrMask=%08x, flashAddr=%08x, DRAM=%08x\n", __FUNCTION__,
+-req->intr, req->mask, req->expect, req->error, req->status, rd_data, intrMask, req->flashAddr, req->dramAddr);
++printk("%s: opComp=0, intr=%08x, mask=%08x, expect=%08x, err=%08x, status=%08x, rd_data=%08x, intrMask=%08x, flashAddr=%08x, DRAM=%08x\n", __FUNCTION__,
++gEduIsrData.intr, gEduIsrData.mask, gEduIsrData.expect, gEduIsrData.error, gEduIsrData.status, rd_data, intrMask, gEduIsrData.flashAddr, gEduIsrData.dramAddr);
+
+ // Just disable the ones that are triggered
+ ISR_disable_irq(ack);
+- req->intr &= ~ack;
++ gEduIsrData.intr &= ~ack;
+
+- if (req->intr) {
++ if (gEduIsrData.intr) {
+ // Re-arm
+- ISR_enable_irq(req);
++ ISR_enable_irq();
+ }
+ else {
+ printk(KERN_ERR "%s: Lost interrupt\n", __FUNCTION__);
+ BUG();
+ }
+- spin_unlock(&req->lock);
+ }
+-
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+-
+-PRINTK2("<== %s: \n", __FUNCTION__);
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
+ return IRQ_HANDLED;
+ }
+
+-
+-
+-/*
+- * Called with no lock
+- * Wait until the Read Queue is empty
+- * Run in process context.
+- * Return 0 if all jobs complete successfully
+- * Return error codes and abort if any job returned un-correctable errors.
+- */
+-int
+-ISR_wait_for_queue_completion(void)
++uint32_t ISR_wait_for_completion(void)
+ {
+ //uint32_t rd_data;
+-//volatile unsigned int c = 0xfedeadad;
+- int ret = -ERESTARTSYS;
+- int waitret;
++ int ret;
+ unsigned long to_jiffies = 3*HZ; /* 3 secs */
+- //unsigned long cur_jiffies = jiffies;
+- unsigned long expired = jiffies + to_jiffies;
+ int cmd;
+- eduIsrNode_t* req;
+- eduIsrNode_t saveReq;
+- int submitted;
+ unsigned long flags;
+
+- /* Loop is for wait_event_interruptible_timeout */
+- do {
+- waitret = wait_event_timeout(gEduWaitQ, list_empty(&gJobQ.jobQ) || gJobQ.needWakeUp, to_jiffies);
+- if (waitret == 0) { /* TimeOut */
+- ret = BRCMNAND_TIMED_OUT;
+- break;
+- }
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (gJobQ.needWakeUp) { /* Need to do process context WAR */
+- req = ISR_find_request(ISR_OP_NEED_WAR);
++ ret = wait_event_interruptible_timeout(gEduWaitQ, gEduIsrData.opComplete, to_jiffies);
+
+- if (!req) {
+- printk("%s: Cannot find job that need WAR\n", __FUNCTION__);
+- BUG();
+- }
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
+
+- // Make a copy
+- saveReq = *req;
++ cmd = gEduIsrData.cmd;
++ gEduIsrData.cmd = -1;
+
+- /* Mark the job as complete and free it */
+- req->opComplete = ISR_OP_COMPLETED;
+- gJobQ.needWakeUp = 0;
+-
+- // Job, with error, is now complete, remove it from queue, and submit next request
+- list_del(&req->list);
+-
+- list_add_tail(&req->list, &gJobQ.availList);
+-
+- spin_unlock(&req->lock);
+-
+- // req lock held inside ISR_find_request
+- switch (gJobQ.cmd) {
+- case EDU_READ:
+- ret = brcmnand_edu_read_completion(
+- saveReq.mtd, saveReq.buffer, saveReq.oobarea, saveReq.offset,
+- saveReq.status);
+- break;
+- case EDU_WRITE:
+- ret = brcmnand_edu_write_war(
+- saveReq.mtd, saveReq.buffer, saveReq.oobarea, saveReq.offset,
+- saveReq.status, saveReq.needBBT);
+- break;
+- default:
+- printk("%s: Unknown command %d\n", __FUNCTION__, gJobQ.cmd);
+- BUG();
+- }
+- if (ret == 0) { /* WAR worked */
+- // Submit next job (which is our dummy job in WAR)
+- submitted = brcmnand_isr_submit_job();
+- }
+- else {
+- eduIsrNode_t* tmp;
+-
+- // Abort queue, TBD
+- list_for_each_entry_safe(req, tmp, &gJobQ.jobQ, list) {
+- list_del(&req->list);
+-
+- list_add_tail(&req->list, &gJobQ.availList);
+- }
+- }
++ if (!gEduIsrData.opComplete && ret <= 0) {
++ ISR_disable_irq(gEduIsrData.intr);
++ if (ret == -ERESTARTSYS) {
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
++ return (uint32_t) (ERESTARTSYS); // Retry on Read
++ }
++ else if (ret == 0) {
++ //gEduIsrData.opComplete = 1;
++ printk("%s: DMA timedout\n", __FUNCTION__);
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
++ return 0; // Timed Out
+ }
+- else { // List is empty
+- ret = 0; // Loop exit condition
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- } while ((ret == -ERESTARTSYS) && time_before(jiffies, expired));
+- return ret;
++
++ // DMA completes on Done or Error.
++ //rd_data = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
++
++ printk("%s: EDU completes but Status is %08x\n", __FUNCTION__, gEduIsrData.status);
++ //rd_data = 0; // Treat as a timeout
++ }
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
++ return gEduIsrData.status;
+ }
+
+
+-#if 0 //ndef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+-
+-/*
+- * Wait for completion when not using queue
+- */
+-uint32_t ISR_wait_for_completion(void)
++uint32_t ISR_cache_is_valid(uint32_t clearMask)
+ {
+- //uint32_t rd_data;
+-//volatile unsigned int c = 0xfedeadad;
+- int ret = -ERESTARTSYS;
+- unsigned long to_jiffies = 3*HZ; /* 3 secs */
+- //unsigned long cur_jiffies = jiffies;
+- unsigned long expired = jiffies + to_jiffies;
+- int cmd;
+- int retries = 2;
+- //unsigned long flags;
+-//volatile unsigned int counter = 0xAABBCCDD;
+-//static int erestartsys = 0;
++ uint32_t rd_data = ISR_volatileRead(BCM_BASE_ADDRESS+BCHP_HIF_INTR2_CPU_STATUS);
++ unsigned long flags;
+
+-
+- while (ret == -ERESTARTSYS ) {
+-//printk("%s: jiffies=%08lx, expired=%08lx\n", __FUNCTION__, jiffies, expired);
+- if (((retries--) < 0) || time_after(jiffies, expired)) {
+- ret = 0; // Timed out
+- return ERESTARTSYS;
+- }
+- else {
+- // Recalculate TO, for retries
+- to_jiffies = expired - jiffies;
+- //ret = wait_event_interruptible_timeout(gEduWaitQ, gEduIsrData.opComplete, to_jiffies);
+- ret = wait_event_timeout(gEduWaitQ, gEduIsrData.opComplete, to_jiffies);
+- }
++ /*
++ * Already there, no need to wait
++ */
++ if (rd_data & HIF_INTR2_CTRL_READY)
++ return rd_data;
+
+-PRINTK3("==>%s\n", __FUNCTION__);
+- down(&gEduIsrData.lock);
+-
+- cmd = gEduIsrData.cmd;
+- gEduIsrData.cmd = -1;
+-
+- if (!gEduIsrData.opComplete && ret <= 0) {
+- ISR_disable_irq(gEduIsrData.intr);
+-
+- if (ret == -ERESTARTSYS) {
+- up(&gEduIsrData.lock);
+-
+-//if (5 >= erestartsys++)
+-//printk("Pending signals: %08lx-%08lx-%08lx-%08lx\n",
+-//current->pending.signal.sig[0], current->pending.signal.sig[1],current->pending.signal.sig[2], current->pending.signal.sig[3]);
+- continue;
+- }
+- else if (ret == 0) {
+- //gEduIsrData.opComplete = 1;
+- PRINTK("%s: DMA timedout\n", __FUNCTION__);
+-
+- up(&gEduIsrData.lock);
+-//printk("<==%s, ret=0 TimeOut\n", __FUNCTION__);
+-PRINTK4("<==%s, ret=0 TimeOut\n", __FUNCTION__);
+-
+- return 0; // Timed Out
+- }
+-
+-
+-
+- // DMA completes on Done or Error.
+- //rd_data = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
++ // Clear existing interrupt
++ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_SET, clearMask);
++
++ do {
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
++ gEduIsrData.flashAddr = 0;
++ gEduIsrData.dramAddr = 0;
+
+-PRINTK("%s: EDU completes but Status is %08x\n", __FUNCTION__, gEduIsrData.status);
+- //rd_data = 0; // Treat as a timeout
+- }
++ /*
++ * Enable L2 Interrupt
++ */
++ gEduIsrData.cmd = NAND_CTRL_READY;
++ gEduIsrData.opComplete = 0;
++ gEduIsrData.status = 0;
++
++ gEduIsrData.mask = HIF_INTR2_CTRL_READY;
++ gEduIsrData.expect = HIF_INTR2_CTRL_READY;
++ gEduIsrData.error = 0;
++ gEduIsrData.intr = HIF_INTR2_CTRL_READY;
+
+- up(&gEduIsrData.lock);
+- }
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
+
+- return gEduIsrData.status;
+-}
+-#endif
++ ISR_enable_irq();
++
++ rd_data = ISR_wait_for_completion();
++ } while (rd_data != 0 && !(rd_data & HIF_INTR2_CTRL_READY));
++ return rd_data;
+
+-/*
+- * Since we cannot use the interrupt, or call schedule, we will have to busy-wait for controller ready.
+- * Executes in interrupt context
+- */
+-int
+-ISR_cache_is_valid(void)
+-{
+- uint32_t rd_data;
+- unsigned long expired = jiffies + HZ/10000; /* 100 usec, enough for any flash op to complete */
+-
+- do {
+- rd_data = ISR_volatileRead(BCM_BASE_ADDRESS+BCHP_HIF_INTR2_CPU_STATUS);
+-
+- } while (!(rd_data & HIF_INTR2_CTRL_READY) && time_before(jiffies, expired));
+- return (0 != (rd_data & HIF_INTR2_CTRL_READY)) ;
+ }
+
+ void ISR_init(void)
+ {
+- int i, ret;
++ int ret;
+ uint32_t intrMask;
+- unsigned long flags;
+
+- //init_MUTEX(&gEduIsrData.lock); // Write lock
+- spin_lock_init(&gJobQ.lock); // Read queue lock
++ spin_lock_init(&gEduIsrData.lock);
+
+- INIT_LIST_HEAD(&gJobQ.jobQ);
+- INIT_LIST_HEAD(&gJobQ.availList);
+- /* Add all nodes from pool to avail list */
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+-PRINTK("%s: B4\n", __FUNCTION__);
+-ISR_print_avail_list();
+- for (i=0; i<MAX_JOB_QUEUE_SIZE;i++) {
+- eduIsrNode_t* e = &gEduIsrPool[i];
+-
+- //init_MUTEX(&e->lock);
+- list_add_tail(&e->list, &gJobQ.availList);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+-PRINTK("%s: After\n", __FUNCTION__);
+-ISR_print_avail_list();
+-//BUG();
+-
+ // Mask all L2 interrupts
+ intrMask = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
+ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_SET, ~intrMask);
+ BARRIER;
+
+- ret = request_irq(BCM_LINUX_CPU_INTR1_IRQ, ISR_isr, SA_SHIRQ, "brcmnand EDU", &gJobQ);
++ ret = request_irq(BCM_LINUX_CPU_INTR1_IRQ, ISR_isr, SA_SHIRQ, "brcmnand EDU", &gEduIsrData);
+ if (ret) {
+ printk(KERN_INFO "%s: request_irq(BCM_LINUX_CPU_INTR1_IRQ) failed ret=%d. Someone not sharing?\n",
+ __FUNCTION__, ret);
+ }
++
+ }
+
+
+Index: drivers/mtd/brcmnand/eduproto.h
+===================================================================
+--- drivers/mtd/brcmnand/eduproto.h (revision 1)
++++ drivers/mtd/brcmnand/eduproto.h (working copy)
+@@ -77,7 +77,7 @@
+
+
+ extern void EDU_init(void);
+-extern int EDU_write(volatile const void*, uint32_t, uint32_t*);
++extern int EDU_write(volatile const void*, uint32_t);
+ extern int EDU_read(volatile void*, uint32_t);
+
+ extern uint32_t EDU_get_error_status_register(void);
+Index: drivers/mtd/brcmnand/brcmnand_priv.h
+===================================================================
+--- drivers/mtd/brcmnand/brcmnand_priv.h (revision 1)
++++ drivers/mtd/brcmnand/brcmnand_priv.h (working copy)
+@@ -38,27 +38,13 @@
+ #include <linux/wait.h>
+ #include <linux/spinlock.h>
+ #include <linux/interrupt.h>
+-#include <linux/list.h>
+
+ //#include "edu.h"
+ #endif
+
+-#define BRCMNAND_CORRECTABLE_ECC_ERROR (1)
+-#define BRCMNAND_SUCCESS (0)
+-#define BRCMNAND_UNCORRECTABLE_ECC_ERROR (-1)
+-#define BRCMNAND_FLASH_STATUS_ERROR (-2)
+-#define BRCMNAND_TIMED_OUT (-3)
+-
+-#ifdef CONFIG_MTD_BRCMNAND_EDU
+-#define BRCMEDU_CORRECTABLE_ECC_ERROR (4)
+-#define BRCMEDU_UNCORRECTABLE_ECC_ERROR (-4)
+-
+-#define BRCMEDU_MEM_BUS_ERROR (-5)
+-
+-
++#if defined( CONFIG_MTD_BRCMNAND_EDU )
+ #define BRCMNAND_malloc(size) kmalloc(size, GFP_DMA)
+ #define BRCMNAND_free(addr) kfree(addr)
+-
+ #else
+ #define BRCMNAND_malloc(size) vmalloc(size)
+ #define BRCMNAND_free(addr) vfree(addr)
+@@ -77,125 +63,31 @@
+ "nop; nop; nop; nop; nop; nop;\n\t" \
+ ".set reorder\n\t")
+
+-/*
+- * Right now we submit a full page Read for queueing, so with a 8KB page,
+- * and an ECC step of 512B, the queue depth is 16. Add 2 for dummy elements
+- * during EDU WAR
+- */
+-#if CONFIG_MTD_BRCMNAND_VERSION <= CONFIG_MTD_BRCMNAND_VERS_3_3
+-#define MAX_NAND_PAGE_SIZE (4<<10)
+
+-#else
+-#define MAX_NAND_PAGE_SIZE (8<<10)
+-#endif
++typedef struct eduIsrData {
++ spinlock_t lock; // For SMP and future double buffering on Read.
++ int cmd; // 1 == Read, 0 == Write
+
+-/* Max queue size is (PageSize/512B_ECCSize)+2 spare for WAR */
+-#define MAX_JOB_QUEUE_SIZE ((MAX_NAND_PAGE_SIZE>>9))
+-
+-typedef enum {
+- ISR_OP_QUEUED = 0,
+- ISR_OP_SUBMITTED = 1,
+- ISR_OP_NEED_WAR = 2,
+- ISR_OP_COMPLETED = 3,
+- ISR_OP_TIMEDOUT = 4
+-} isrOpStatus_t;
+-
+-typedef struct eduIsrNode {
+- struct list_head list;
+- spinlock_t lock; // per Node update lock
+- // int cmd; // 1 == Read, 0 == Write
+-
+- // ISR stuffs
+ uint32_t mask; /* Clear status mask */
+ uint32_t expect; /* Status on success */
+ uint32_t error; /* Status on error */
+ uint32_t intr; /* Interrupt bits */
+ uint32_t status; /* Status read during ISR. There may be several interrupts before completion */
+- isrOpStatus_t opComplete; /* Completion status */
++ int opComplete; /* Completion criterium */
+
+- /* Controller Level params (for queueing) */
+- struct mtd_info* mtd;
+- void* buffer;
+- u_char* oobarea;
+- loff_t offset;
+- int ret;
+- int needBBT;
++ /* For debugging only */
++ uint32_t flashAddr;
++ uint32_t dramAddr;
++} eduIsrData_t;
+
+- /* EDU level params (for ISR) */
+- uint32_t edu_ldw;
+- uint32_t physAddr;
+- uint32_t hif_intr2;
+- uint32_t edu_status;
++extern eduIsrData_t gEduIsrData;
+
+- int refCount; /* Marked for re-use when refCount=0 */
+- unsigned long expired; /* Time stamp for expiration, 3 secs from submission */
+-} eduIsrNode_t;
+-
+-/*
+- * Read/Write Job Q.
+- * Process one page at a time, and queue 512B sector Read or Write EDU jobs.
+- * ISR will wake up the process context thread iff
+- * 1-EDU reports an error, in which case the process context thread need to be awaken
+- * in order to do WAR
+- * 2-Q is empty, in which case the page read/write op is complete.
+- */
+-typedef struct jobQ_t {
+- struct list_head jobQ; /* Nodes queued for EDU jobs */
+- struct list_head availList; /* Free Nodes */
+- spinlock_t lock; /* Queues guarding spin lock */
+- int needWakeUp; /* Wake up Process context thread to do EDU WAR */
+- int cmd; /* 1 == Read, 0 == Write */
+-} isrJobQ_t;
+-
+-extern isrJobQ_t gJobQ;
+-
+ void ISR_init(void);
+
+-/*
+- * Submit the first entry that is in queued state,
+- * assuming queue lock has been held by caller.
+- *
+- * @doubleBuffering indicates whether we need to submit just 1 job or until EDU is full (double buffering)
+- * Return the number of job submitted for read.
+- *
+- * In current version (v3.3 controller), since EDU only have 1 register for EDU_ERR_STATUS,
+- * we can't really do double-buffering without losing the returned status of the previous read-op.
+- */
+-#undef EDU_DOUBLE_BUFFER_READ
+-
+-int brcmnand_isr_submit_job(void);
+-
+-eduIsrNode_t* ISR_queue_read_request(struct mtd_info *mtd,
+- void* buffer, u_char* oobarea, loff_t offset);
+-eduIsrNode_t* ISR_queue_write_request(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset);
+-eduIsrNode_t* ISR_push_request(struct mtd_info *mtd,
+- void* buffer, u_char* oobarea, loff_t offset);
+-
+-
+-int brcmnand_edu_read_completion(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset, uint32_t intr_status);
+-
+-int brcmnand_edu_read_comp_intr(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset, uint32_t intr_status);
+-
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+-int brcmnand_edu_write_completion(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset, uint32_t intr_status,
+- int needBBT);
+-#endif
+-eduIsrNode_t* ISR_find_request( isrOpStatus_t opStatus);
+-
+ uint32_t ISR_wait_for_completion(void);
++uint32_t ISR_cache_is_valid(uint32_t clearMask);
+
+-/*
+- * wait for completion with read/write Queue
+- */
+-int ISR_wait_for_queue_completion(void);
+-
+-int ISR_cache_is_valid(void);
+-
+-static __inline__ uint32_t ISR_volatileRead(uint32_t addr)
++static inline uint32_t ISR_volatileRead(uint32_t addr)
+ {
+ volatile uint32_t* pAddr;
+
+@@ -204,7 +96,7 @@
+ return *(uint32_t *)pAddr;
+ }
+
+-static __inline__ void ISR_volatileWrite(uint32_t addr, uint32_t data)
++static inline void ISR_volatileWrite(uint32_t addr, uint32_t data)
+ {
+ volatile uint32_t* pAddr;
+
+@@ -212,7 +104,7 @@
+ *pAddr = (volatile uint32_t)data;
+ }
+
+-static __inline__ void ISR_enable_irq(eduIsrNode_t* req)
++static inline void ISR_enable_irq(void)
+ {
+ uint32_t intrMask;
+ //unsigned long flags;
+@@ -220,68 +112,42 @@
+ //spin_lock_irqsave(&gEduIsrData.lock, flags);
+
+ // Clear status bits
+- ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, req->mask);
++ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, gEduIsrData.mask);
+
++#if 0
++ // Disable everything that may screw us up
++ intrMask = EDU_volatileRead(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
++ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_SET, ~intrMask);
++PRINTK("%s-1: intrMask=%08x\n", __FUNCTION__, intrMask);
++
++ BARRIER;
++#endif
++
+ // Enable interrupt
+- ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_CLEAR, req->intr);
++ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_CLEAR, gEduIsrData.intr);
+
++#if 0
++intrMask = EDU_volatileRead(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
++PRINTK("%s-2: intrMask=%08x\n", __FUNCTION__, intrMask);
++#endif
+ //spin_unlock_irqrestore(&gEduIsrData.lock, flags);
+ }
+
+-static __inline__ void ISR_disable_irq(uint32_t mask)
++static inline void ISR_disable_irq(uint32_t mask)
+ {
+
+ /* Disable L2 interrupts */
+ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_SET, mask);
+
++ /* Clear L2 interrupts */
++ //EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, mask);
+ }
+
++#endif
+
+-/*
+- * For debugging
+- */
+
+-#ifdef DEBUG_ISR
+
+-static void __inline__
+-ISR_print_queue(void)
+-{
+- eduIsrNode_t* req;
+- //struct list_head* node;
+- int i = 0;
+
+- list_for_each_entry(req, &gJobQ.jobQ, list) {
+-
+- printk("i=%d, cmd=%d, offset=%08llx, flashAddr=%08x, opComp=%d, status=%08x\n",
+- i, gJobQ.cmd, req->offset, req->edu_ldw,req->opComplete, req->status);
+- i++;
+- }
+-}
+-
+-static void __inline__
+-ISR_print_avail_list(void)
+-{
+- eduIsrNode_t* req;
+- //struct list_head* node;
+- int i = 0;
+-
+- printk("AvailList=%p, next=%p\n", &gJobQ.availList, gJobQ.availList.next);
+- list_for_each_entry(req, &gJobQ.availList, list) {
+- printk("i=%d, req=%p, list=%p\n", i, req, &req->list);
+- i++;
+- }
+-}
+-#else
+-#define IS_print_queue()
+-#define ISR_print_avail_list()
+-#endif // DEBUG_ISR
+-
+-
+-#endif // CONFIG_MTD_BRCMNAND_USE_ISR
+-
+-
+-
+-
+ /**
+ * brcmnand_scan - [BrcmNAND Interface] Scan for the BrcmNAND device
+ * @param mtd MTD device structure
+Index: drivers/mtd/brcmnand/edu.c
+===================================================================
+--- drivers/mtd/brcmnand/edu.c (revision 1)
++++ drivers/mtd/brcmnand/edu.c (working copy)
+@@ -37,7 +37,6 @@
+
+
+ #include <linux/mm.h>
+-#include <linux/dma-mapping.h>
+ #include <asm/page.h>
+
+
+@@ -134,11 +133,11 @@
+ * Returns 1 if OK
+ * 0 otherwise
+ */
+-int EDU_buffer_OK(volatile void* vaddr, int command)
++int EDU_buffer_OK(volatile void* vaddr)
+ {
+ unsigned long addr = (unsigned long) vaddr;
+
+-#if !defined(CONFIG_MIPS_BCM7440) && !defined(CONFIG_MIPS_BCM7601) && !defined(CONFIG_MIPS_BCM7635)
++#if !defined(CONFIG_MIPS_BCM7440) && !defined(CONFIG_MIPS_BCM7601)
+ // Requires 32byte alignment only of platforms other than 7440 and 7601 (and Dune)
+ if (addr & 0x1f) {
+ // Must be 32-byte-aligned
+@@ -155,14 +154,11 @@
+ return 0;
+ }
+ #endif
+-
+ else if (!(addr & KSEG0)) {
+ // User Space
+ return 0;
+ }
+
+-
+-
+ // TBD: Since we only enable block for MEM0, we should make sure that the physical
+ // address falls in MEM0.
+
+@@ -170,13 +166,6 @@
+ // VM Address
+ return 0;
+ }
+-
+-#if 0 //def CONFIG_MIPS_BCM7420
+- else if (command == EDU_WRITE && (addr & 0xff)) { // Write must be aligned on 256B
+-printk("Write must be aligned on 128B (addr=%08x)\n", addr);
+- return 0;
+- }
+-#endif
+ return 1;
+ }
+
+@@ -518,10 +507,6 @@
+ * Read data on success or error.
+ */
+
+-extern void
+-dump_nand_regs(struct brcmnand_chip* chip, loff_t offset, uint32_t pa, int which);
+-#define MAX_DUMPS 10
+-extern int numDumps;
+
+ uint32_t EDU_poll(uint32_t address, uint32_t expect, uint32_t error, uint32_t mask)
+ {
+@@ -535,11 +520,6 @@
+ address, expect, mask, error);
+ __sync();
+ rd_data = EDU_volatileRead(address);
+-if (numDumps < MAX_DUMPS)
+- {
+- dump_nand_regs(NULL, 0, 0, numDumps++);
+- }
+-
+ //edu_debug = 0;
+
+ timeout = jiffies + msecs_to_jiffies(1000); // 3 sec timeout for now (testing)
+@@ -548,23 +528,18 @@
+ // while ((rd_data & mask) != (expect & mask)) /* && (i<cnt) */
+ while (((rd_data & mask) != (expect & mask)) && !((rd_data & mask) & error))
+ {
+-
+ if ( 0 /*(i %1000000) == 1 */)
+ {PRINTK("Polling addr=%08x, expect=%08x, mask=%08x!\n", address, expect, mask);
+ PRINTK("EDU_poll read: %08x\n", rd_data);}
+
+ //__sync(); //PLATFORM_IOFLUSH_WAR();
+ rd_data = EDU_volatileRead(address);
+-
+- // JR+ 2008-02-01 Allow other tasks to run while waiting
++
++ // JR+ 2008-02-01 Allow other tasks to run while waiting
+ //cond_resched();
+ cond_resched();
+ // JR- 2008-02-01 Allow other tasks to run while waiting
+-if (numDumps < MAX_DUMPS)
+- {
+- dump_nand_regs(NULL, 0, 0, numDumps++);
+- }
+-
++
+ i++;
+ if(!time_before(jiffies, timeout))
+ {
+@@ -662,7 +637,7 @@
+ // SUN_GISB_ARB_TIMER = 0x10000
+ EDU_volatileWrite(0xb040600c, 0x00010000);
+
+-#elif defined( CONFIG_MIPS_BCM7601 ) || defined( CONFIG_MIPS_BCM7635 )
++#elif defined( CONFIG_MIPS_BCM7601 )
+ {
+ #define ENABLE_256MB_GISB_WINDOW 0x1
+ volatile unsigned long* PCI_GEN_GISB_WINDOW_SIZE =
+@@ -691,7 +666,7 @@
+ }
+
+ #elif defined( CONFIG_MIPS_BCM7420 )
+- // Make sure that RTS grants some cycle to EDU, or we have to steal some from RR
++ // Make sure that RTS grant some cycle to EDU, or we have to steal some
+ {
+ #define BLOCKED_OUT 0x001fff00
+ #define RR_ENABLED 0x80 /* Bit 7 */
+@@ -708,29 +683,6 @@
+ volatile unsigned long* PCI_GEN_PCI_CTRL =
+ (volatile unsigned long*) KSEG1ADDR(0x10440104);
+ volatile unsigned long pci_gen_pci_ctrl;
+-
+-#if 0 // Block out MoCA
+- volatile unsigned long* MEMC_0_1_CLIENT_INFO_59=
+- (volatile unsigned long*) KSEG1ADDR(0x103b10f0);
+- volatile unsigned long memc_client_59;
+- volatile unsigned long* MEMC_0_1_CLIENT_INFO_62=
+- (volatile unsigned long*) KSEG1ADDR(0x103b10fc);
+- volatile unsigned long memc_client_62;
+-
+- /* Bits 08-20 are all 1 == Blocked */
+- memc_client_59 = *MEMC_0_1_CLIENT_INFO_59;
+- printk("MEMC_0_1_CLIENT_INFO_59 Before=%08lx\n", memc_client_59);
+- *MEMC_0_1_CLIENT_INFO_59 = memc_client_59|0x001fff00;
+- *MEMC_0_1_CLIENT_INFO_59 &= ~RR_ENABLED;
+- printk("MEMC_0_1_CLIENT_INFO_59 After blocked out=%08lx\n", *MEMC_0_1_CLIENT_INFO_59);
+-
+- memc_client_62 = *MEMC_0_1_CLIENT_INFO_62;
+- printk("MEMC_0_1_CLIENT_INFO_62 Before=%08lx\n", memc_client_62);
+- *MEMC_0_1_CLIENT_INFO_62 = memc_client_62|0x001fff00;
+- *MEMC_0_1_CLIENT_INFO_62 &= ~RR_ENABLED;
+- printk("MEMC_0_1_CLIENT_INFO_62 After blocked out=%08lx\n", *MEMC_0_1_CLIENT_INFO_62);
+-
+-#endif
+
+ /* Bits 08-20 are all 1 == Blocked */
+ memc_client_17 = *MEMC_0_1_CLIENT_INFO_17;
+@@ -753,7 +705,6 @@
+ pci_gen_pci_ctrl = *PCI_GEN_PCI_CTRL;
+ pci_gen_pci_ctrl &= ~PARK_ON_MASK;
+ pci_gen_pci_ctrl |= PARK_ON_EBI;
+- EDU_volatileWrite(PCI_GEN_PCI_CTRL, pci_gen_pci_ctrl);
+ }
+ #endif
+
+@@ -771,50 +722,37 @@
+ //edu_debug = 0;
+ }
+
+-#ifndef CONFIG_MTD_BRCMNAND_ISR_QUEUE // batch mode
+-
+ /*
+ * THT: 07/31/08: This does not work. One has to write the 512B Array from the NAND controller into
+ * the EXT registers for it to work. Will fix it when I come back.
+ */
+-int EDU_write(volatile const void* virtual_addr_buffer,
+- uint32_t external_physical_device_address,
+- uint32_t* physAddr)
++int EDU_write(volatile const void* virtual_addr_buffer, uint32_t external_physical_device_address)
+ {
+- //uint32_t phys_mem;
++ uint32_t phys_mem;
+ // uint32_t rd_data;
+- //unsigned long flags;
++ unsigned long flags;
+
+ edu_debug = gdebug;
+-
+-#if 0
+ phys_mem = EDU_virt_to_phys((void *)virtual_addr_buffer);
+-
+-#else
+- // EDU is not a PCI device
+- // THT: TBD: Need to adjust for cache line size here, especially on 7420.
+- *physAddr = dma_map_single(NULL, virtual_addr_buffer, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
+-#endif
+-
+- if (!(*physAddr)) {
++ if (!phys_mem) {
+ return (-1);
+ }
+
+ //edu_debug = 4;
+
+-//printk("EDU_write: vBuff: %p physDev: %08x, PA=%08x\n",
+-// virtual_addr_buffer, external_physical_device_address, phys_mem);
++//PRINTK("EDU_write: vBuff: %p physDev: %08x, PA=%08x\n",
++//virtual_addr_buffer, external_physical_device_address, phys_mem);
+
+ #ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+- down(&gEduIsrData.lock);
+- gEduIsrData.edu_ldw = external_physical_device_address;
+- gEduIsrData.physAddr = *physAddr;
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
++ gEduIsrData.flashAddr = external_physical_device_address;
++ gEduIsrData.dramAddr = phys_mem;
+
+ /*
+ * Enable L2 Interrupt
+ */
+ gEduIsrData.cmd = EDU_WRITE;
+- gEduIsrData.opComplete = ISR_OP_SUBMITTED;
++ gEduIsrData.opComplete = 0;
+ gEduIsrData.status = 0;
+
+ /* On write we wait for both DMA done|error and Flash Status */
+@@ -823,8 +761,8 @@
+ gEduIsrData.error = HIF_INTR2_EDU_ERR;
+ gEduIsrData.intr = HIF_INTR2_EDU_DONE_MASK|HIF_INTR2_CTRL_READY;
+
+- up(&gEduIsrData.lock);
+- ISR_enable_irq(&gEduIsrData);
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
++ ISR_enable_irq();
+
+ #else
+ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EDU_CLEAR_MASK);
+@@ -838,17 +776,15 @@
+
+ //EDU_waitForNoPendingAndActiveBit();
+
+-// Already covered by dma_map_single()
+-// dma_cache_wback((unsigned long) virtual_addr_buffer, EDU_LENGTH_VALUE);
+
+- EDU_issue_command(*physAddr, external_physical_device_address, EDU_WRITE); /* 1: Is a Read, 0 Is a Write */
++ dma_cache_wback((unsigned long) virtual_addr_buffer, 512);
+
++ EDU_issue_command(phys_mem, external_physical_device_address, EDU_WRITE); /* 1: Is a Read, 0 Is a Write */
++
+ // rd_data = EDU_poll(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS, HIF_INTR2_EDU_DONE, HIF_INTR2_EDU_DONE);
+ // EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+
+ //edu_debug = 0;
+-//printk("<-- %s\n", __FUNCTION__);
+-
+ return 0;
+ }
+
+@@ -863,7 +799,7 @@
+ // uint32_t rd_data;
+ int ret;
+ int retries = 4;
+- //unsigned long flags;
++ unsigned long flags;
+
+
+ static int toggle;
+@@ -877,31 +813,33 @@
+ #endif
+
+ //PRINTK("--> %s: vAddr=%p, ext=%08x\n", __FUNCTION__, virtual_addr_buffer, external_physical_device_address);
+-#if 0
+ phys_mem = EDU_virt_to_phys((void *)virtual_addr_buffer);
+ if (!phys_mem) {
+ return (-1);
+ }
+-#else
+- // THT: TBD: Need to adjust for cache line size here, especially on 7420.
+- phys_mem = dma_map_single(NULL, virtual_addr_buffer, EDU_LENGTH_VALUE, DMA_FROM_DEVICE);
+-#endif
+
+ if (edu_debug) PRINTK("EDU_read: vBuff: %p physDev: %08x, PA=%08x\n",
+ virtual_addr_buffer, external_physical_device_address, phys_mem);
+
+ #ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+- down(&gEduIsrData.lock);
+- gEduIsrData.edu_ldw = external_physical_device_address;
+- gEduIsrData.physAddr = phys_mem;
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
++ gEduIsrData.flashAddr = external_physical_device_address;
++ gEduIsrData.dramAddr = phys_mem;
+
+ /*
+ * Enable L2 Interrupt
+ */
+ gEduIsrData.cmd = EDU_READ;
+- gEduIsrData.opComplete = ISR_OP_SUBMITTED;
++ gEduIsrData.opComplete = 0;
+ gEduIsrData.status = 0;
+
++#if 0
++ /* On Read we only wait for DMA completion or Error */
++ gEduIsrData.mask = HIF_INTR2_EDU_CLEAR_MASK|HIF_INTR2_CTRL_READY;
++ gEduIsrData.expect = HIF_INTR2_EDU_DONE;
++ gEduIsrData.error = HIF_INTR2_EDU_ERR;
++ gEduIsrData.intr = HIF_INTR2_EDU_DONE_MASK;
++#endif
+
+ // We must also wait for Ctlr_Ready, otherwise the OOB is not correct, since we read the OOB bytes off the controller
+
+@@ -910,9 +848,9 @@
+ // On error we also want Ctrlr-Ready because for COR ERR, the Hamming WAR depends on the OOB bytes.
+ gEduIsrData.error = HIF_INTR2_EDU_ERR;
+ gEduIsrData.intr = HIF_INTR2_EDU_DONE_MASK;
+- up(&gEduIsrData.lock);
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
+
+- ISR_enable_irq(&gEduIsrData);
++ ISR_enable_irq();
+ #else
+
+ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EDU_CLEAR_MASK);
+@@ -928,7 +866,29 @@
+ //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+ EDU_reset_done();
+
++#if 0
++ if( (EDU_volatileRead(EDU_BASE_ADDRESS + EDU_DONE) && 0x00000003) != 0)
++ {
++ PRINTK("EDU_DONE != 0!!!\n");
++ }
++#endif
+ EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
++#if 0
++ if( EDU_volatileRead(EDU_BASE_ADDRESS + EDU_ERR_STATUS) != 0)
++ {
++ PRINTK("EDU_ERR_STATUS != 0!!!\n");
++ }
++
++#endif
++#if 1 //ndef CONFIG_BMIPS4380
++ dma_cache_inv((unsigned long) virtual_addr_buffer, EDU_LENGTH_VALUE);
++#else
++ {
++ extern void (*flush_cache_all)(void);
++
++ flush_cache_all();
++ }
++#endif
+
+ EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_LENGTH, EDU_LENGTH_VALUE);
+
+@@ -956,13 +916,8 @@
+ HIF_INTR2_EDU_DONE_MASK);
+ #endif
+
+- (void) dma_unmap_single(NULL, phys_mem, EDU_LENGTH_VALUE, DMA_FROM_DEVICE);
+-
+ if (edu_debug) PRINTK("<-- %s ret=%08x\n", __FUNCTION__, ret);
+ //edu_debug = 0;
+ if (edu_debug > 3 && ret) {show_stack(current,NULL);dump_stack();}
+ return ret;
+ }
+-
+-#endif // Batch mode
+-
--- /dev/null
+Index: arch/mips/kernel/proc.c
+===================================================================
+--- arch/mips/kernel/proc.c (revision 1)
++++ arch/mips/kernel/proc.c (working copy)
+@@ -98,7 +98,8 @@
+ /* PR22847 - Add Broadcom models */
+ [CPU_BMIPS3300] = "BMIPS3300",
+ [CPU_BMIPS4350] = "BMIPS4350",
+- [CPU_BMIPS4380] = "BMIPS4380",
++// [CPU_BMIPS4380] = "BMIPS4380",
++ [CPU_BMIPS4380] = "Brcm4380",
+ [CPU_BMIPS5000] = "BMIPS5000",
+ };
+
--- /dev/null
+Index: include/linux/resource.h
+===================================================================
+--- include/linux/resource.h (revision 1)
++++ include/linux/resource.h (working copy)
+@@ -62,7 +62,10 @@
+ * THT: 8MB is unreasonably high for embedded systems,
+ * for which, by default, only 32MB is allocated to the kernel
+ */
++/*
+ #define _STK_LIM (1<<20)
++*/
++#define _STK_LIM (4<<20)
+
+ #else
+ #define _STK_LIM (8*1024*1024)
--- /dev/null
+Index: include/asm-mips/serial.h
+===================================================================
+--- include/asm-mips/serial.h (revision 1)
++++ include/asm-mips/serial.h (working copy)
+@@ -121,10 +121,15 @@
+
+ #else
+ /* 3 16550A compatible UARTs */
++#if 0
+ #define BRCM_UART_PORT_DEFNS \
+ _BRCM_16550_INIT(BRCM_SERIAL1_IRQ, BRCM_SERIAL1_BASE), \
+ _BRCM_16550_INIT(BRCM_SERIAL2_IRQ, BRCM_SERIAL2_BASE), \
+ _BRCM_16550_INIT(BRCM_SERIAL3_IRQ, BRCM_SERIAL3_BASE),
++#else
++#define BRCM_UART_PORT_DEFNS \
++ _BRCM_16550_INIT(BRCM_SERIAL1_IRQ, BRCM_SERIAL1_BASE),
++#endif
+ #endif //end SIM
+
+ #elif defined(CONFIG_MIPS_BCM7440A0) || defined(CONFIG_MIPS_BCM7325)
--- /dev/null
+Index: arch/mips/kernel/setup.c
+===================================================================
+--- arch/mips/kernel/setup.c (revision 1)
++++ arch/mips/kernel/setup.c (working copy)
+@@ -653,6 +653,8 @@
+ usermem = 1;
+ }
+ mem_size = memparse(from + 4, &from);
++ //csh memory_size hack for duo
++ mem_size = 0x9000000;
+ #if defined (CONFIG_MIPS_BCM7440) || defined (CONFIG_MIPS_BCM7601) || defined (CONFIG_MIPS_BCM7635)
+
+ upper_mem_ram_size = 0;
--- /dev/null
+--- stblinux-2.6.18.org/Makefile 2008-10-03 06:15:18.000000000 +0900
++++ stblinux-2.6.18/Makefile 2009-03-06 20:34:04.000000000 +0900
+@@ -867,7 +867,8 @@
+ endef
+
+ define filechk_version.h
+- (echo \#define LINUX_VERSION_CODE $(shell \
++ (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \
++ echo \#define LINUX_VERSION_CODE $(shell \
+ expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
+ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
+ endef
--- /dev/null
+DESCRIPTION = "Linux kernel for vuplus solo"
+LICENSE = "GPL"
+KV = "2.6.18-7.3"
+PV = "2.6.18-7.3"
+PR = "r4"
+
+MODULE = "stblinux-2.6.18"
+
+SRC_URI = "http://archive.vuplus.com/download/stblinux-${KV}.tar.bz2"
+
+SRC_URI += " file://vusolo_defconfig"
+
+
+SRC_URI += " file://linux-vusolo_nand4.patch;patch=1;pnum=0 \
+ file://linux-vusolo_info.patch;patch=1;pnum=0 \
+ file://linux-vusolo_resource.patch;patch=1;pnum=0 \
+ file://linux_vusolo_arch_makefile.patch;patch=1;pnum=0 \
+ file://linux-vusolo_kojbect.patch;patch=1;pnum=0 \
+ file://linux-vusolo_dvb-core_fe.patch;patch=1;pnum=0 \
+ file://linux-vusolo_romblock.patch;patch=1;pnum=0 \
+ file://linux-vusolo_serial.patch;patch=1;pnum=0"
+
+
+
+S = "${WORKDIR}/stblinux-2.6.18"
+
+inherit kernel
+
+FILES_kernel-image = "/boot/vmlinux.gz /boot/autoexec.bat"
+
+export OS = "Linux"
+KERNEL_IMAGETYPE = "vmlinux"
+KERNEL_OUTPUT = "vmlinux"
+KERNEL_OBJECT_SUFFIX = "ko"
+
+
+#addtask munge before do_patch after do_unpack
+
+do_configure_prepend() {
+ oe_machinstall -m 0644 ${WORKDIR}/vusolo_defconfig ${S}/.config
+ if [ -d ${WORKDIR}/cdfs-${PV} ]; then
+ mv ${WORKDIR}/cdfs-${PV} ${S}/fs/cdfs
+ cd ${S} & patch -p0 < ${S}/fs/cdfs/patch.cdfs
+ fi;
+ oe_runmake oldconfig
+}
+
+do_install_append () {
+ install -d ${D}/boot
+ install -m 0755 vmlinux ${D}/boot/vmlinux
+ gzip ${D}/boot/vmlinux
+}
+
+pkg_preinst_kernel-image () {
+ [ -d /proc/stb ] && mount -o rw,remount /boot
+ true
+ if [ -f /boot/vmlinux.gz ];
+ then rm -f /boot/vmlinux.gz;
+ fi
+}
+
+pkg_postinst_kernel-image () {
+ if [ -d /proc/stb ];
+ then flash_eraseall /dev/mtd1; nandwrite /dev/mtd1 /boot/vmlinux.gz -p;
+ fi
+ [ -d /proc/stb ] && mount -o ro,remount /boot
+ true
+}
+
+pkg_prerm_kernel-image () {
+ [ -d /proc/stb ] && mount -o rw,remount /boot
+ true
+}
+
+pkg_postrm_kernel-image () {
+ [ -d /proc/stb ] && mount -o ro,remount /boot
+ true
+}
--- /dev/null
+Index: drivers/media/dvb/dvb-core/dvb_frontend.h
+===================================================================
+--- drivers/media/dvb/dvb-core/dvb_frontend.h (revision 1)
++++ drivers/media/dvb/dvb-core/dvb_frontend.h (working copy)
+@@ -41,14 +41,40 @@
+ #include "dvbdev.h"
+
+ struct dvb_frontend_tune_settings {
+- int min_delay_ms;
+- int step_size;
+- int max_drift;
+- struct dvb_frontend_parameters parameters;
++ int min_delay_ms;
++ int step_size;
++ int max_drift;
++ struct dvb_frontend_parameters parameters;
+ };
+
+ struct dvb_frontend;
+
++//NOTE : LINUX_2_6_31 related stuffs are added to make back-porting of frontend driver easier.
++
++#define LINUX_2_6_31 1
++
++#ifdef LINUX_2_6_31
++
++#define FE_TUNE_MODE_ONESHOT 0x01
++#define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */
++
++struct delayed_work {
++ struct work_struct work;
++ struct timer_list timer;
++};
++
++#define DVB_MAX_ADAPTERS 8
++
++#define DVB_UNSET (-1)
++
++#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \
++ static short adapter_nr[] = \
++ {[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \
++ module_param_array(adapter_nr, short, NULL, 0444); \
++ MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers")
++
++
++
+ struct dvb_tuner_info {
+ char name[128];
+
+@@ -61,6 +87,132 @@
+ u32 bandwidth_step;
+ };
+
++struct analog_parameters {
++ unsigned int frequency;
++ unsigned int mode;
++ unsigned int audmode;
++ u64 std;
++};
++
++enum dvbfe_modcod {
++ DVBFE_MODCOD_DUMMY_PLFRAME = 0,
++ DVBFE_MODCOD_QPSK_1_4,
++ DVBFE_MODCOD_QPSK_1_3,
++ DVBFE_MODCOD_QPSK_2_5,
++ DVBFE_MODCOD_QPSK_1_2,
++ DVBFE_MODCOD_QPSK_3_5,
++ DVBFE_MODCOD_QPSK_2_3,
++ DVBFE_MODCOD_QPSK_3_4,
++ DVBFE_MODCOD_QPSK_4_5,
++ DVBFE_MODCOD_QPSK_5_6,
++ DVBFE_MODCOD_QPSK_8_9,
++ DVBFE_MODCOD_QPSK_9_10,
++ DVBFE_MODCOD_8PSK_3_5,
++ DVBFE_MODCOD_8PSK_2_3,
++ DVBFE_MODCOD_8PSK_3_4,
++ DVBFE_MODCOD_8PSK_5_6,
++ DVBFE_MODCOD_8PSK_8_9,
++ DVBFE_MODCOD_8PSK_9_10,
++ DVBFE_MODCOD_16APSK_2_3,
++ DVBFE_MODCOD_16APSK_3_4,
++ DVBFE_MODCOD_16APSK_4_5,
++ DVBFE_MODCOD_16APSK_5_6,
++ DVBFE_MODCOD_16APSK_8_9,
++ DVBFE_MODCOD_16APSK_9_10,
++ DVBFE_MODCOD_32APSK_3_4,
++ DVBFE_MODCOD_32APSK_4_5,
++ DVBFE_MODCOD_32APSK_5_6,
++ DVBFE_MODCOD_32APSK_8_9,
++ DVBFE_MODCOD_32APSK_9_10,
++ DVBFE_MODCOD_RESERVED_1,
++ DVBFE_MODCOD_BPSK_1_3,
++ DVBFE_MODCOD_BPSK_1_4,
++ DVBFE_MODCOD_RESERVED_2
++};
++
++enum tuner_param {
++ DVBFE_TUNER_FREQUENCY = (1 << 0),
++ DVBFE_TUNER_TUNERSTEP = (1 << 1),
++ DVBFE_TUNER_IFFREQ = (1 << 2),
++ DVBFE_TUNER_BANDWIDTH = (1 << 3),
++ DVBFE_TUNER_REFCLOCK = (1 << 4),
++ DVBFE_TUNER_IQSENSE = (1 << 5),
++ DVBFE_TUNER_DUMMY = (1 << 31)
++};
++
++/*
++ * ALGO_HW: (Hardware Algorithm)
++ * ----------------------------------------------------------------
++ * Devices that support this algorithm do everything in hardware
++ * and no software support is needed to handle them.
++ * Requesting these devices to LOCK is the only thing required,
++ * device is supposed to do everything in the hardware.
++ *
++ * ALGO_SW: (Software Algorithm)
++ * ----------------------------------------------------------------
++ * These are dumb devices, that require software to do everything
++ *
++ * ALGO_CUSTOM: (Customizable Agorithm)
++ * ----------------------------------------------------------------
++ * Devices having this algorithm can be customized to have specific
++ * algorithms in the frontend driver, rather than simply doing a
++ * software zig-zag. In this case the zigzag maybe hardware assisted
++ * or it maybe completely done in hardware. In all cases, usage of
++ * this algorithm, in conjunction with the search and track
++ * callbacks, utilizes the driver specific algorithm.
++ *
++ * ALGO_RECOVERY: (Recovery Algorithm)
++ * ----------------------------------------------------------------
++ * These devices have AUTO recovery capabilities from LOCK failure
++ */
++enum dvbfe_algo {
++ DVBFE_ALGO_HW = (1 << 0),
++ DVBFE_ALGO_SW = (1 << 1),
++ DVBFE_ALGO_CUSTOM = (1 << 2),
++ DVBFE_ALGO_RECOVERY = (1 << 31)
++};
++
++struct tuner_state {
++ u32 frequency;
++ u32 tunerstep;
++ u32 ifreq;
++ u32 bandwidth;
++ u32 iqsense;
++ u32 refclock;
++};
++
++/*
++ * search callback possible return status
++ *
++ * DVBFE_ALGO_SEARCH_SUCCESS
++ * The frontend search algorithm completed and returned succesfully
++ *
++ * DVBFE_ALGO_SEARCH_ASLEEP
++ * The frontend search algorithm is sleeping
++ *
++ * DVBFE_ALGO_SEARCH_FAILED
++ * The frontend search for a signal failed
++ *
++ * DVBFE_ALGO_SEARCH_INVALID
++ * The frontend search algorith was probably supplied with invalid
++ * parameters and the search is an invalid one
++ *
++ * DVBFE_ALGO_SEARCH_ERROR
++ * The frontend search algorithm failed due to some error
++ *
++ * DVBFE_ALGO_SEARCH_AGAIN
++ * The frontend search algorithm was requested to search again
++ */
++enum dvbfe_search {
++ DVBFE_ALGO_SEARCH_SUCCESS = (1 << 0),
++ DVBFE_ALGO_SEARCH_ASLEEP = (1 << 1),
++ DVBFE_ALGO_SEARCH_FAILED = (1 << 2),
++ DVBFE_ALGO_SEARCH_INVALID = (1 << 3),
++ DVBFE_ALGO_SEARCH_AGAIN = (1 << 4),
++ DVBFE_ALGO_SEARCH_ERROR = (1 << 31),
++};
++
++
+ struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+@@ -71,22 +223,73 @@
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
++ int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
++ /** This is to allow setting tuner-specific configs */
++ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
++
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+ #define TUNER_STATUS_LOCKED 1
++#define TUNER_STATUS_STEREO 2
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
++ int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
++
++ /*
++ * These are provided seperately from set_params in order to facilitate silicon
++ * tuners which require sophisticated tuning loops, controlling each parameter seperately.
++ */
++ int (*set_state)(struct dvb_frontend *fe, enum tuner_param param, struct tuner_state *state);
++ int (*get_state)(struct dvb_frontend *fe, enum tuner_param param, struct tuner_state *state);
+ };
++struct analog_demod_info {
++ char *name;
++};
+
++struct analog_demod_ops {
++
++ struct analog_demod_info info;
++
++ void (*set_params)(struct dvb_frontend *fe,
++ struct analog_parameters *params);
++ int (*has_signal)(struct dvb_frontend *fe);
++ int (*is_stereo)(struct dvb_frontend *fe);
++ int (*get_afc)(struct dvb_frontend *fe);
++ void (*tuner_status)(struct dvb_frontend *fe);
++ void (*standby)(struct dvb_frontend *fe);
++ void (*release)(struct dvb_frontend *fe);
++ int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable);
++
++ /** This is to allow setting tuner-specific configuration */
++ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
++};
++struct dtv_property {
++ __u32 cmd;
++ __u32 reserved[3];
++ union {
++ __u32 data;
++ struct {
++ __u8 data[32];
++ __u32 len;
++ __u32 reserved1[3];
++ void *reserved2;
++ } buffer;
++ } u;
++ int result;
++} __attribute__ ((packed));
++
++
++#endif
++
+ struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+@@ -95,7 +298,7 @@
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+-
++#ifdef LINUX_2_6_31
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+@@ -106,11 +309,11 @@
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
++#endif
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
++ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+- int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+-
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+@@ -123,11 +326,27 @@
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+- int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+- int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+- int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
++ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, int arg);
++ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned int cmd);
+
+- struct dvb_tuner_ops tuner_ops;
++#ifdef LINUX_2_6_31
++ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
++ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
++
++ /* These callbacks are for devices that implement their own
++ * tuning algorithms, rather than a simple swzigzag
++ */
++ enum dvbfe_search (*search)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
++ int (*track)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
++
++ struct dvb_tuner_ops tuner_ops;
++ struct analog_demod_ops analog_ops;
++
++ int (*set_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
++ int (*get_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
++#endif
++
++ int (*set_sw_loopthrough)(struct dvb_frontend* fe, int* arg);
+ };
+
+ #define MAX_EVENT 8
+@@ -141,13 +360,102 @@
+ struct semaphore sem;
+ };
+
++
++#ifdef LINUX_2_6_31
++// 2.6.31
++typedef enum fe_pilot {
++ PILOT_ON,
++ PILOT_OFF,
++ PILOT_AUTO,
++} fe_pilot_t;
++
++typedef enum fe_rolloff {
++ ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */
++ ROLLOFF_20,
++ ROLLOFF_25,
++ ROLLOFF_AUTO,
++} fe_rolloff_t;
++
++typedef enum fe_delivery_system {
++ SYS_UNDEFINED,
++ SYS_DVBC_ANNEX_AC,
++ SYS_DVBC_ANNEX_B,
++ SYS_DVBT,
++ SYS_DSS,
++ SYS_DVBS,
++ SYS_DVBS2,
++ SYS_DVBH,
++ SYS_ISDBT,
++ SYS_ISDBS,
++ SYS_ISDBC,
++ SYS_ATSC,
++ SYS_ATSCMH,
++ SYS_DMBTH,
++ SYS_CMMB,
++ SYS_DAB,
++} fe_delivery_system_t;
++
++struct dtv_frontend_properties {
++
++ /* Cache State */
++ u32 state;
++
++ u32 frequency;
++ fe_modulation_t modulation;
++
++ fe_sec_voltage_t voltage;
++ fe_sec_tone_mode_t sectone;
++ fe_spectral_inversion_t inversion;
++ fe_code_rate_t fec_inner;
++ fe_transmit_mode_t transmission_mode;
++ u32 bandwidth_hz; /* 0 = AUTO */
++ fe_guard_interval_t guard_interval;
++ fe_hierarchy_t hierarchy;
++ u32 symbol_rate;
++ fe_code_rate_t code_rate_HP;
++ fe_code_rate_t code_rate_LP;
++
++ fe_pilot_t pilot;
++ fe_rolloff_t rolloff;
++
++ fe_delivery_system_t delivery_system;
++};
++
++
++
++#ifndef false
++#define false 0
++#endif
++
++#ifndef true
++#define true 1
++#endif
++
++#define KERN_CONT "<c>"
++
++#endif
++
++
+ struct dvb_frontend {
++#ifndef LINUX_2_6_31
++ struct dvb_frontend_ops* ops;
++ struct dvb_adapter *dvb;
++ void* demodulator_priv;
++ void* frontend_priv;
++#else
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void* demodulator_priv;
+- void* tuner_priv;
+- void* frontend_priv;
+- void* misc_priv;
++ void *tuner_priv;
++ void *frontend_priv;
++ void *sec_priv;
++ void *analog_demod_priv;
++ struct dtv_frontend_properties dtv_property_cache;
++#define DVB_FRONTEND_COMPONENT_TUNER 0
++ int (*callback)(void *adapter_priv, int component, int cmd, int arg);
++ int id;
++
++#endif
+ };
+
+ extern int dvb_register_frontend(struct dvb_adapter* dvb,
+@@ -155,8 +463,6 @@
+
+ extern int dvb_unregister_frontend(struct dvb_frontend* fe);
+
+-extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+-
+ extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+ extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
--- /dev/null
+Index: arch/mips/kernel/proc.c
+===================================================================
+--- arch/mips/kernel/proc.c (revision 1)
++++ arch/mips/kernel/proc.c (working copy)
+@@ -84,7 +84,8 @@
+ [CPU_20KC] = "MIPS 20Kc",
+ [CPU_24K] = "MIPS 24K",
+ [CPU_25KF] = "MIPS 25Kf",
+- [CPU_34K] = "MIPS 34K",
++// [CPU_34K] = "MIPS 34K",
++ [CPU_34K] = "Brcm4380",
+ [CPU_74K] = "MIPS 74K",
+ [CPU_VR4111] = "NEC VR4111",
+ [CPU_VR4121] = "NEC VR4121",
--- /dev/null
+Index: lib/kobject.c
+===================================================================
+--- lib/kobject.c (revision 1)
++++ lib/kobject.c (working copy)
+@@ -588,7 +588,7 @@
+
+ EXPORT_SYMBOL(kset_register);
+ EXPORT_SYMBOL(kset_unregister);
+-
++EXPORT_SYMBOL(kobject_get_path);
+ EXPORT_SYMBOL(subsystem_register);
+ EXPORT_SYMBOL(subsystem_unregister);
+ EXPORT_SYMBOL(subsys_create_file);
--- /dev/null
+Index: drivers/mtd/brcmnand/bcm7xxx-nand.c
+===================================================================
+--- drivers/mtd/brcmnand/bcm7xxx-nand.c (revision 1)
++++ drivers/mtd/brcmnand/bcm7xxx-nand.c (working copy)
+@@ -74,31 +74,18 @@
+ * start of flash 1f7f_ffff flashSize-8MB rootfs Linux File System
+ */
+ #define SMALLEST_FLASH_SIZE (16<<20)
+-#define DEFAULT_RESERVED_SIZE (8<<20)
++#ifdef USE_SPLASH
++#define DEFAULT_RESERVED_SIZE (14<<20)
++#else
++#define DEFAULT_RESERVED_SIZE (12<<20)
++#endif
+ #define DEFAULT_SPLASH_SIZE (1<<20)
+ #define DEFAULT_BBT0_SIZE_MB (1)
+ #define DEFAULT_BBT1_SIZE_MB (4)
+
+ #define ROOTFS_PART (0)
+
+-#if defined( CONFIG_MTD_BRCMNAND_DISABLE_XOR )
+-/* Implies new partition scheme, starting with 7420
+- cfe: 0-4MB (not mapped)
+- mtd0: rootfs: Starts at 4MB offset
+- mtd1: all flash less BBT0 (1MB) for flash <= 512MB
+- mtd2: Kernel (4MB)
+- mtd3: Data, for flash>512MB, from 512MB up to flash - BBT1 (4MB)
+- */
+-
+-#define ALL_PART (1)
+-#define KERNEL_PART (2)
+-#define DATA_PART (3)
+-#define AVAIL1_PART (-1)
+-
+-#define DEFAULT_ECM_SIZE (0)
+-#define DEFAULT_AVAIL1_SIZE (0)
+-
+-#elif defined( CONFIG_MTD_NEW_PARTITION )
++#ifdef CONFIG_MTD_NEW_PARTITION
+ /* New partition scheme, starting with 7420
+ mtd0: rootfs
+ mtd1: all flash less BBT0 (1MB) for flash <= 512MB
+@@ -114,25 +101,18 @@
+ #define DEFAULT_ECM_SIZE (0)
+ #define DEFAULT_AVAIL1_SIZE (0)
+
+-#else
+- #if defined( CONFIG_MTD_ECM_PARTITION )
++#elif defined( CONFIG_MTD_ECM_PARTITION )
+ #define DEFAULT_OCAP_SIZE (6<<20)
+ #define DEFAULT_AVAIL1_SIZE (32<<20)
+ #define DEFAULT_ECM_SIZE (DEFAULT_OCAP_SIZE+DEFAULT_AVAIL1_SIZE)
+ #define AVAIL1_PART (1)
+ #define OCAP_PART (2)
+- #else
++#else
+ #define DEFAULT_ECM_SIZE (0)
+ #define DEFAULT_OCAP_SIZE (0)
+ #define DEFAULT_AVAIL1_SIZE (0)
+ #define AVAIL1_PART (-1)
+ #define OCAP_PART (-1)
+- #endif // if ECM
+-
+- /* Definitions for NOR+NAND */
+-#define ALL_PART (1)
+-#define KERNEL_PART (2)
+-#define DATA_PART (3)
+ #endif
+ #define DEFAULT_ROOTFS_SIZE (SMALLEST_FLASH_SIZE - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
+
+@@ -147,22 +127,9 @@
+ #define N_ALL "all"
+
+
+-static struct mtd_partition bcm7XXX_no_xor_partition[] =
++static struct mtd_partition bcm7XXX_nand_parts[] =
++#ifdef CONFIG_MTD_NEW_PARTITION
+ {
+- /* XOR disabled: Everything is shifted down 4MB */
+- { name: N_ROOTFS, offset: 0x00400000, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) }, // Less 1MB for BBT
+- { name: N_ALL, offset: 0, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) },
+- { name: N_KERNEL, offset: 0x00b00000, size: 4<<20 },
+- /* BBT0 1MB not mountable by anyone */
+-
+- /* Following partitions only present on flash with size > 512MB */
+- { name: N_DATA, offset: 0x20000000, size: 0 },
+- /* BBT1 4MB not mountable by anyone */
+- {name: NULL, offset: 0, size: 0} /* End marker */
+-};
+-
+-static struct mtd_partition bcm7XXX_new_partition[] =
+-{
+ { name: N_ROOTFS, offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ { name: N_ALL, offset: 0x0, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) },
+ { name: N_KERNEL, offset: 0x00800000, size: 4<<20 },
+@@ -174,15 +141,24 @@
+ {name: NULL, offset: 0, size: 0} /* End marker */
+ };
+
+-static struct mtd_partition bcm7XXX_old_partition[] =
++#else
+ {
+ { name: N_ROOTFS, offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ #ifdef CONFIG_MTD_ECM_PARTITION
+ { name: N_AVAIL1, offset: DEFAULT_ROOTFS_SIZE, size: DEFAULT_AVAIL1_SIZE },
+ { name: N_OCAP, offset: DEFAULT_ROOTFS_SIZE+DEFAULT_AVAIL1_SIZE, size: DEFAULT_OCAP_SIZE },
+ #endif
+- { name: N_KERNEL, offset: 0x00800000, size: 4<<20 },
+- { name: N_CFE, offset: 0x00C00000, size: 2<<20 },
++#ifdef USE_SPLASH
++ { name: N_KERNEL, offset: 0x00200000, size: 4<<20 },
++ { name: "boot", offset: 0x00600000, size: 4<<20 },
++ { name: "bootimg", offset: 0x00A00000, size: 2<<20 },
++#else
++ { name: N_KERNEL, offset: 0x00400000, size: 4<<20 },
++ { name: "boot", offset: 0x00800000, size: 4<<20 },
++#endif
++ { name: N_CFE, offset: 0x00C00000, size: 1<<20 },
++ { name: "mac", offset: 0x00D00000, size: 1<<19 },
++ { name: "env", offset: 0x00D80000, size: 1<<19 },
+ { name: N_NVM, offset: 0x00E00000, size: 1<<20 },
+ /* BBT 1MB not mountable by anyone */
+ { name: N_DATA, offset: 0x20000000, size: 0 },
+@@ -190,15 +166,6 @@
+ {name: NULL, offset: 0, size: 0},
+ {name: NULL, offset: 0, size: 0}
+ };
+-
+-#if defined( CONFIG_MTD_BRCMNAND_DISABLE_XOR )
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+-
+-#elif defined( CONFIG_MTD_NEW_PARTITION )
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_new_partition;
+-
+-#else
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
+ #endif
+
+ struct brcmnand_info {
+@@ -253,41 +220,17 @@
+ unsigned int ocap_size = DEFAULT_OCAP_SIZE;
+ #endif
+ unsigned int avail1_size = DEFAULT_AVAIL1_SIZE;
+- int oldNumParts = ARRAY_SIZE(bcm7XXX_old_partition);
+
+-//printk("========================> %s\n", __FUNCTION__);
+-
+-
+- /*
+- * Is XOR disabled? if so use the new partition.
+- */
+- if (nandinfo->brcmnand.xor_disable) {
+- bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+-
+- if (device_size(mtd) <= (512ULL <<20)) {
+- bcm7XXX_nand_parts[ALL_PART].size =
+- device_size(mtd) - (uint64_t) (DEFAULT_BBT0_SIZE_MB<<20);
+- *numParts = 3;
+- }
+- else {
+- bcm7XXX_nand_parts[ALL_PART].size = ((512-DEFAULT_BBT1_SIZE_MB)<<20);
+- *numParts = 4;
+- }
+- for (i=0; i<*numParts;i++) {
+- bcm7XXX_nand_parts[i].ecclayout = mtd->ecclayout;
+- }
+-
+- // Kernel partition will be initialized by Env Vars.
+- //printk("<-- %s, device_size=%0llx\n", __FUNCTION__, device_size(mtd));
+- //print_partition(*numParts);
+-
+- nandinfo->parts = bcm7XXX_nand_parts;
+-
+- return;
++ if (device_size(mtd) <= (512ULL <<20)) {
++ size = (unsigned long) device_size(mtd); // mtd->size may be different than nandinfo->size
++ *numParts = ARRAY_SIZE(bcm7XXX_nand_parts) - 3; /* take into account the extra 2 parts
++ and the data partition */
++ } else {
++ size = 512 << 20;
++ *numParts = ARRAY_SIZE(bcm7XXX_nand_parts) - 2; // take into account the extra 2 parts
+ }
+
+-
+-#if defined( CONFIG_MTD_NEW_PARTITION )
++#ifdef CONFIG_MTD_NEW_PARTITION
+ if (device_size(mtd) <= (512ULL <<20)) {
+ bcm7XXX_nand_parts[ALL_PART].size =
+ device_size(mtd) - (uint64_t) (DEFAULT_BBT0_SIZE_MB<<20);
+@@ -308,53 +251,8 @@
+ nandinfo->parts = bcm7XXX_nand_parts;
+
+ return;
+-#else
+-
+- /* NAND on CS1, same partition as that of CONFIG_MTD_NEW_PARTITION */
+-PRINTK("nandinfo->brcmnand.CS[0] = %d\n", nandinfo->brcmnand.CS[0]);
+-PRINTK("bcm7XXX_nand_parts=%p, bcm7XXX_new_partition=%p, bcm7XXX_old_partition=%p\n",
+- bcm7XXX_nand_parts, &bcm7XXX_new_partition[0], &bcm7XXX_old_partition[0]);
+- if (nandinfo->brcmnand.CS[0] != 0) {
+- bcm7XXX_nand_parts = bcm7XXX_new_partition;
+-
+- if (device_size(mtd) <= (512ULL <<20)) {
+- bcm7XXX_nand_parts[0].size = device_size(mtd) - DEFAULT_RESERVED_SIZE - ecm_size;
+- bcm7XXX_nand_parts[ALL_PART].size =
+- device_size(mtd) - ((uint64_t) (DEFAULT_BBT0_SIZE_MB) <<20);
+- *numParts = 3;
+- }
+- else {
+- bcm7XXX_nand_parts[0].size = (512ULL <<20) - DEFAULT_RESERVED_SIZE - ecm_size;
+- bcm7XXX_nand_parts[ALL_PART].size =
+- device_size(mtd) - ((uint64_t) (DEFAULT_BBT1_SIZE_MB)<<20);
+- *numParts = 4;
+- }
+- for (i=0; i<*numParts;i++) {
+- bcm7XXX_nand_parts[i].ecclayout = mtd->ecclayout;
+- }
++#elif defined( CONFIG_MTD_ECM_PARTITION )
+
+- nandinfo->parts = bcm7XXX_nand_parts;
+-
+-#if 1
+-PRINTK("%s: NAND on CS1: numparts=%d\n", __FUNCTION__, *numParts);
+-print_partition(*numParts);
+-#endif
+-
+- return;
+- }
+-
+- /* From now on, we are only dealing with old partition table */
+- if (device_size(mtd) <= (512ULL <<20)) {
+- size = (unsigned long) device_size(mtd); // mtd->size may be different than nandinfo->size
+- *numParts = oldNumParts - 3; /* take into account the extra 2 parts
+- and the data partition */
+- } else {
+- size = 512 << 20;
+- *numParts = oldNumParts - 2; // take into account the extra 2 parts
+- }
+-
+- #if defined( CONFIG_MTD_ECM_PARTITION )
+-
+ /* Do not generate AVAIL1 partition if usable flash size is less than 64MB */
+
+ if (size < (64<<20)) {
+@@ -370,12 +268,11 @@
+ ecm_size = ocap_size + avail1_size;
+ }
+
+- #endif
++
+ #endif
+ nandinfo->parts = bcm7XXX_nand_parts;
+ bcm7XXX_nand_parts[0].size = size - DEFAULT_RESERVED_SIZE - ecm_size;
+ bcm7XXX_nand_parts[0].ecclayout = mtd->ecclayout;
+-PRINTK("numParts=%d\n", numParts);
+ PRINTK("Part[%d] name=%s, size=%llx, offset=%llx\n", i, bcm7XXX_nand_parts[0].name,
+ bcm7XXX_nand_parts[0].size, bcm7XXX_nand_parts[0].offset);
+
+@@ -549,6 +446,7 @@
+ int e; // Index into Env vars
+ int i; // Index into mtd partition
+
++#ifndef USE_SPLASH
+ // Not configured for Splash, but does CFE define it?
+ if (!gBcmSplash) {
+ for (i=0; i < gCfePartitions.numParts; i++) {
+@@ -558,6 +456,7 @@
+ }
+ }
+ }
++#endif
+
+ /*
+ * Remove OCAP partitions if Env Vars are defined
+@@ -640,7 +539,6 @@
+ //unsigned long size = res->end - res->start + 1;
+ int err = 0;
+ int numParts = 0;
+- struct brcmnand_chip* chip;
+
+ gPageBuffer = NULL;
+ info = kmalloc(sizeof(struct brcmnand_info), GFP_KERNEL);
+@@ -672,7 +570,7 @@
+ //info->brcmnand.mmcontrol = NULL; // THT: Sync Burst Read TBD. pdata->mmcontrol;
+
+ info->mtd.name = pdev->dev.bus_id;
+- chip = info->mtd.priv = &info->brcmnand;
++ info->mtd.priv = &info->brcmnand;
+ info->mtd.owner = THIS_MODULE;
+
+ /* Enable the following for a flash based bad block table */
+@@ -690,19 +588,12 @@
+
+ //print_partition(numParts);
+
+- // Nand not on CS0, set it up to allow 1 partition, as in the new partition scheme
+- if (chip->CS[0] != 0) {
+- bcm7XXX_nand_parts = bcm7XXX_new_partition;
+- }
+-
+ if (gCfePartitions.numParts == 0) {
+ brcmnanddrv_setup_mtd_partitions(info, &numParts);
+ }
+ else {
+ brcmnanddrv_setup_mtdpart_cfe_env(info, &numParts);
+ }
+-
+-
+
+ //print_partition(numParts);
+
+@@ -711,20 +602,6 @@
+ //printk(" dev_set_drvdata\n");
+ dev_set_drvdata(&pdev->dev, info);
+ //printk("<-- brcmnanddrv_probe\n");
+-
+-/* NOR+NAND configuration */
+-#ifdef CONFIG_MTD_BRCMNAND_NOR_ACCESS
+- /* Append NOR partition to the end */
+- {
+- extern void (*gInitialize_Nor_Partition)(void);
+-
+- if (gInitialize_Nor_Partition) {
+- (*gInitialize_Nor_Partition) ();
+- }
+- // Else NAND is loaded first, NOR will append when it is started.
+- }
+-
+-#endif
+ return 0;
+
+
+Index: drivers/mtd/brcmnand/brcmnand_base.c
+===================================================================
+--- drivers/mtd/brcmnand/brcmnand_base.c (revision 1)
++++ drivers/mtd/brcmnand/brcmnand_base.c (working copy)
+@@ -39,8 +39,6 @@
+ #include <linux/byteorder/generic.h>
+ #include <linux/reboot.h>
+ #include <linux/vmalloc.h>
+-#include <linux/dma-mapping.h>
+-#include <linux/interrupt.h>
+
+ #include <asm/io.h>
+ #include <asm/bug.h>
+@@ -60,26 +58,6 @@
+
+ //#define DEBUG_HW_ECC
+
+-//#define BRCMNAND_READ_VERIFY
+-#undef BRCMNAND_READ_VERIFY
+-
+-//#ifdef CONFIG_MTD_BRCMNAND_VERIFY_WRITE
+-//#define BRCMNAND_WRITE_VERIFY
+-//#endif
+-#undef BRCMNAND_WRITE_VERIFY
+-
+-//#define DEBUG_ISR
+-#undef DEBUG_ISR
+-#if defined( DEBUG_ISR ) || defined(BRCMNAND_READ_VERIFY) \
+- || defined(BRCMNAND_WRITE_VERIFY)
+-#if defined(DEBUG_ISR ) || defined(BRCMNAND_READ_VERIFY)
+-#define EDU_DEBUG_4
+-#endif
+-#if defined(DEBUG_ISR ) || defined(BRCMNAND_WRITE_VERIFY)
+-#define EDU_DEBUG_5
+-#endif
+-#endif
+-
+ #define my_be32_to_cpu(x) be32_to_cpu(x)
+
+ #if defined( CONFIG_MTI_R24K ) || defined( CONFIG_MTI_R34K ) || defined( CONFIG_MTD_BRCMNAND_EDU )
+@@ -131,7 +109,21 @@
+
+ #define HW_AUTOOOB_LAYOUT_SIZE 32 /* should be enough */
+
++#define BRCMNAND_CORRECTABLE_ECC_ERROR (1)
++#define BRCMNAND_SUCCESS (0)
++#define BRCMNAND_UNCORRECTABLE_ECC_ERROR (-1)
++#define BRCMNAND_FLASH_STATUS_ERROR (-2)
++#define BRCMNAND_TIMED_OUT (-3)
+
++#ifdef CONFIG_MTD_BRCMNAND_EDU
++#define BRCMEDU_CORRECTABLE_ECC_ERROR (4)
++#define BRCMEDU_UNCORRECTABLE_ECC_ERROR (-4)
++
++#define BRCMEDU_MEM_BUS_ERROR (-5)
++
++//uint32_t EDU_ldw;
++#endif // #ifdef CONFIG_MTD_BRCMNAND_EDU
++
+ #ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+ /* Avoid infinite recursion between brcmnand_refresh_blk() and brcmnand_read_ecc() */
+ static atomic_t inrefresh = ATOMIC_INIT(0);
+@@ -166,7 +158,6 @@
+ uint32 options;
+ uint32_t idOptions; // Whether chip has all 5 ID bytes
+ uint32 timing1, timing2; // Specify a non-zero value to override the default timings.
+- int nop; // Number of partial writes per page
+ unsigned int ctrlVersion; // Required controller version if different than 0
+ } brcmnand_chip_Id;
+
+@@ -183,7 +174,6 @@
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .timing1 = 0, //00070000,
+ .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0, /* THT Verified on data-sheet 7/10/08: Allows 4 on main and 4 on OOB */
+ },
+
+@@ -195,7 +185,6 @@
+ .idOptions = 0,
+ .timing1 = 0, //0x6474555f,
+ .timing2 = 0, //0x00000fc7,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+ { /* 2 */
+@@ -206,7 +195,6 @@
+ .idOptions = 0,
+ .timing1 = 0, //0x6474555f,
+ .timing2 = 0, //0x00000fc7,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+ #if 0 // EOL
+@@ -228,7 +216,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -239,7 +226,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+ /* This is just the 16 bit version of the above?
+@@ -259,8 +245,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 6 */
+@@ -270,8 +255,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+
+@@ -282,7 +266,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -295,7 +278,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -306,7 +288,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -317,7 +298,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -328,7 +308,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -339,7 +318,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -350,7 +328,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -361,7 +338,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -372,7 +348,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -383,7 +358,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -394,7 +368,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -405,7 +378,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -416,7 +388,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -427,7 +398,6 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+@@ -438,11 +408,10 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=8,
+ .ctrlVersion = 0,
+ },
+
+- /* The following 6 ST chips only allow 4 writes per page, and requires version2.1 (4) of the controller or later */
++ /* The following 6 ST chips only allow 4 writes per page, and requires version2.2 (5) of the controller or later */
+ { /* 22 */
+ .chipId = ST_NAND01GW3B,
+ .mafId = FLASHTYPE_ST,
+@@ -450,8 +419,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 23 */
+@@ -461,8 +429,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 24 */
+@@ -472,8 +439,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+ { /* 25 */
+ .chipId = ST_NAND02GW3B,
+@@ -482,8 +448,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 26 */
+@@ -493,8 +458,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+ { /* 27 */
+ .chipId = ST_NAND08GW3B,
+@@ -503,8 +467,7 @@
+ .options = NAND_USE_FLASH_BBT,
+ .idOptions = 0,
+ .timing1 = 0, .timing2 = 0,
+- .nop=4,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_1,
++ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_2_0,
+ },
+
+ { /* 28 */
+@@ -514,9 +477,8 @@
+ .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+- .timing1 = 0,
++ .timing1 = 0, //00070000,
+ .timing2 = 0,
+- .nop=1,
+ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_3_0,
+ },
+
+@@ -527,9 +489,8 @@
+ .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES_TYPE2,
+- .timing1 = 0,
++ .timing1 = 0, //00070000,
+ .timing2 = 0,
+- .nop=1,
+ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_3_0,
+ },
+
+@@ -540,24 +501,10 @@
+ .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+- .timing1 = 0,
++ .timing1 = 0, //00070000,
+ .timing2 = 0,
+- .nop=1,
+ .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_3_0,
+ },
+-
+- { /* 31 */
+- .chipId = HYNIX_HY27UAG8T2M,
+- .mafId = FLASHTYPE_HYNIX,
+- .chipIdStr = "HYNIX_HY27UAG8T2M",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
+- //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+- .idOptions = BRCMNAND_ID_EXT_BYTES,
+- .timing1 = 0,
+- .timing2 = 0,
+- .nop=1,
+- .ctrlVersion = CONFIG_MTD_BRCMNAND_VERS_3_0,
+- },
+
+ { /* LAST DUMMY ENTRY */
+ .chipId = 0,
+@@ -613,7 +560,7 @@
+
+ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
+ (nandCtrlReg & 0x3) != 0) {
+- printk("brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
++ printk(KERN_ERR "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+ if (gdebug > 3) printk("%s: CMDREG=%08x val=%08x\n", __FUNCTION__, (unsigned int) nandCtrlReg, (unsigned int)*pReg);
+ return (uint32_t) (*pReg);
+@@ -627,7 +574,7 @@
+
+ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
+ (nandCtrlReg & 0x3) != 0) {
+- printk( "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
++ printk(KERN_ERR "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+ *pReg = (volatile unsigned long) (val);
+ if (gdebug > 3) printk("%s: CMDREG=%08x val=%08x\n", __FUNCTION__, nandCtrlReg, val);
+@@ -670,14 +617,13 @@
+ }
+
+ if (gdebug) printk("CS=%d, chip->CS[cs]=%d\n", cs, chip->CS[cs]);
+- // ldw is lower 32 bit of chipOffset, need to add pbase when on CS0 and XOR is ON.
+- if (!chip->xor_disable[cs]) {
++ // ldw is lower 32 bit of chipOffset, need to add pbase when on CS0
++ if (chip->CS[cs] == 0) {
+ ldw = chipOffset.s.low + chip->pbase;
+- }
++ }
+ else {
+ ldw = chipOffset.s.low;
+- }
+-
++ }
+ udw = chipOffset.s.high | (chip->CS[cs] << 16);
+
+ if (gdebug > 3) printk("%s: offset=%0llx cs=%d ldw = %08x, udw = %08x\n", __FUNCTION__, offset, cs, ldw, udw);
+@@ -692,7 +638,7 @@
+ #if 1
+ /* Dont delete, may be useful for debugging */
+
+-static void print_diagnostics(struct brcmnand_chip* chip)
++static void print_diagnostics(void)
+ {
+ uint32_t nand_acc_control = brcmnand_ctrl_read(BCHP_NAND_ACC_CONTROL);
+ uint32_t nand_select = brcmnand_ctrl_read(BCHP_NAND_CS_NAND_SELECT);
+@@ -703,7 +649,7 @@
+ uint32_t pageAddrExt = brcmnand_ctrl_read(BCHP_NAND_PROGRAM_PAGE_EXT_ADDR);
+ #endif
+
+-
++ uint32_t ebiCSBase0 = * ((volatile unsigned long*) (0xb0000000|BCHP_EBI_CS_BASE_0));
+ //unsigned long nand_timing1 = brcmnand_ctrl_read(BCHP_NAND_TIMING_1);
+ //unsigned long nand_timing2 = brcmnand_ctrl_read(BCHP_NAND_TIMING_2);
+
+@@ -712,17 +658,7 @@
+ #if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_1_0
+ printk("PAGE_EXT_ADDR=%08x\n", pageAddrExt);
+ #endif
+- if (chip->CS[0] == 0) {
+- uint32_t ebiCSBase0 = * ((volatile unsigned long*) (0xb0000000|BCHP_EBI_CS_BASE_0));
+- printk("PAGE_ADDR=%08x, \tCS0_BASE=%08x\n", pageAddr, ebiCSBase0);
+- }
+- else {
+- //uint32_t ebiCSBaseN = * ((volatile unsigned long*) (0xb0000000|(BCHP_EBI_CS_BASE_0));
+- uint32_t csNandBaseN = *(volatile unsigned long*) (0xb0000000 + BCHP_EBI_CS_BASE_0 + 8*chip->CS[0]);
+-
+- printk("PAGE_ADDR=%08x, \tCS%-d_BASE=%08x\n", pageAddr, chip->CS[0], csNandBaseN);
+- printk("pbase=%08lx, vbase=%p\n", chip->pbase, chip->vbase);
+- }
++ printk("PAGE_ADDR=%08x, \tCS0_BASE=%08x\n", pageAddr, ebiCSBase0);
+ }
+ #endif
+
+@@ -739,51 +675,6 @@
+ nand_acc_control, nand_config, flash_id, nand_timing1, nand_timing2);
+ }
+
+-#define NUM_NAND_REGS (1+((BCHP_NAND_BLK_WR_PROTECT-BCHP_NAND_REVISION)/4))
+-
+-static void print_nand_ctrl_regs(void)
+-{
+- int i;
+-
+- for (i=0; i<NUM_NAND_REGS; i++) {
+- uint32_t reg = (uint32_t) (BCHP_NAND_REVISION+(i*4));
+- uint32_t regval;
+- uint32_t regoff = reg - BCHP_NAND_REVISION; // i*4
+-
+- if ((i % 4) == 0) {
+- printk("\n%08x:", reg);
+- }
+-
+-#if CONFIG_MTD_BRCMNAND_VERSION < CONFIG_MTD_BRCMNAND_VERS_1_0
+- // V0.0, V0.1 7401Cx
+- if (regoff == 0x14 || regoff == 0x18 || regoff == 0x1c ) { // No NAND register at 0x281c
+- regval = 0;
+- }
+-#elif CONFIG_MTD_BRCMNAND_VERSION < CONFIG_MTD_BRCMNAND_VERS_2_0
+- // V1.0 7440Bx
+- if (regoff == 0x18 || regoff == 0x1c ) { // No NAND register at 0x281c
+- regval = 0;
+- }
+-#elif CONFIG_MTD_BRCMNAND_VERSION < CONFIG_MTD_BRCMNAND_VERS_3_0
+- // V2.x 7325, 7335, 7405bx
+- if (regoff == 0x1c) { // No NAND register at 0x281c
+- regval = 0;
+- }
+-#else // if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_3_0
+- // V3.x 3548, 7420a0, 7420b0
+- if (regoff == 0x1c || regoff == 0x44 || regoff == 0x4c || regoff == 0x5c
+- || regoff == 0x88 || regoff == 0x8c
+- || regoff == 0xb8 || regoff == 0xbc) {
+- regval = 0;
+- }
+-#endif
+- else {
+- regval = (uint32_t) brcmnand_ctrl_read(reg);
+- }
+- printk(" %08x", regval);
+- }
+-}
+-
+ void print_NandCtrl_Status(void)
+ {
+ #ifdef CONFIG_MTD_BRCMNAND_EDU
+@@ -1021,8 +912,11 @@
+ uint32_t rd_data;
+
+
+- rd_data = ISR_cache_is_valid();
++ rd_data = ISR_cache_is_valid(intr);
+
++
++
++
+ if (rd_data == 0) {
+ /* timed out */
+ printk("%s: rd_data=0 TIMEOUT\n", __FUNCTION__);
+@@ -1158,7 +1052,7 @@
+ return 0;
+ }
+
+- if (state != FL_READING && (!wr_preempt_en) && !in_interrupt())
++ if (state != FL_READING && (!wr_preempt_en))
+ cond_resched();
+ //touch_softlockup_watchdog();
+ }
+@@ -1192,10 +1086,6 @@
+
+ if (ready & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK &&
+ (ready & BCHP_NAND_INTFC_STATUS_SPARE_AREA_VALID_MASK)) {
+-
+-
+-#if 0
+-// THT 6/15/09: Reading OOB would not affect ECC
+ int ecc;
+
+ if (!raw) {
+@@ -1205,10 +1095,9 @@
+ return -1;
+ }
+ }
+-#endif
+ return 1;
+ }
+- if (state != FL_READING && !wr_preempt_en && !in_interrupt())
++ if (state != FL_READING && !wr_preempt_en)
+ cond_resched();
+ }
+
+@@ -1261,7 +1150,7 @@
+ //}
+ //return BRCMNAND_SUCCESS;
+ }
+- if (state != FL_READING && (!wr_preempt_en) && !in_interrupt())
++ if (state != FL_READING && (!wr_preempt_en))
+ cond_resched();
+
+ }
+@@ -1292,7 +1181,7 @@
+ uint32_t rd_data;
+
+ if (gdebug > 3 ) {
+-printk("%s: intr_status = %08x\n", __FUNCTION__, intr_status); }
++printk("%s: intr_status = %08x\n", intr_status); }
+
+ if (intr_status == 0) {
+ /* EDU_read timed out */
+@@ -1319,7 +1208,7 @@
+ */
+
+ if (!(intr_status & HIF_INTR2_CTRL_READY)) {
+- (void) ISR_cache_is_valid();
++ (void) ISR_cache_is_valid(0);
+ }
+ #endif
+ /*
+@@ -1356,12 +1245,9 @@
+ #endif
+
+
+-/*
+- * Returns 1 on success,
+- * 0 on error
+- */
+
+
++
+ static int brcmnand_ctrl_write_is_complete(struct mtd_info *mtd, int* outp_needBBT)
+ {
+ int err;
+@@ -1384,188 +1270,8 @@
+ }
+
+
+-
+-
+-//#define EDU_DEBUG_2
+-#undef EDU_DEBUG_2
+-
+-// EDU_DEBUG_4: Verify on Read
+-//#define EDU_DEBUG_4
+-//#undef EDU_DEBUG_4
+-
+-// EDU_DEBUG_5: Verify on Write
+-//#define EDU_DEBUG_5
+-//#undef EDU_DEBUG_5
+-
+-#if defined( EDU_DEBUG_2 ) || defined( EDU_DEBUG_4 ) || defined( EDU_DEBUG_5 )
+-/* 3548 internal buffer is 4K in size */
+-//static uint32_t edu_lbuf[2048];
+-static uint32_t* edu_buf32;
+-static uint8_t* edu_buf; // Used by EDU in Debug2
+-static uint8_t* ctrl_buf; // Used by Ctrl in Debug4
+-static uint32_t ctrl_oob32[4];
+-static uint8_t* ctrl_oob = (uint8_t*) ctrl_oob32;
+-
+-#define PATTERN 0xa55a0000
+-
+-#define EDU_BUFSIZE_B (512)
+-// One before and one after
+-#define EDU_BUF32_SIZE_B (EDU_BUFSIZE_B*3)
+-
+-// Same as above in DW instead
+-#define EDU_BUFSIZE_DW (EDU_BUFSIZE_B/4)
+-#define EDU_BUF32_SIZE_DW (EDU_BUF32_SIZE_B/4)
+-
+-// Real buffer starts at 1/3
+-#define EDU_BUF_START_DW (EDU_BUF32_SIZE_DW/3)
+-
+-
+-static void init_edu_buf(void)
+-{
+- /* Write pattern */
+- int i;
+-
+- if (!edu_buf32) {
+- edu_buf32 = (uint32_t*) kmalloc(EDU_BUF32_SIZE_B, GFP_KERNEL);
+- if (!edu_buf32) {
+- printk("%s: Out of memory\n", __FUNCTION__);
+- BUG();
+- }
+-
+- edu_buf = ctrl_buf = (uint8_t*) &edu_buf32[EDU_BUF_START_DW];
+- printk("%s: Buffer allocated at %p, %d bytes\n", __FUNCTION__, edu_buf32, EDU_BUF32_SIZE_B);
+- printk("Real buffer starts at %p\n", ctrl_buf);
+- }
+-
+- for (i=0; i<EDU_BUF32_SIZE_DW; i++) {
+- edu_buf32[i] = PATTERN | i;
+- }
+-}
+-
+-static int verify_edu_buf(void)
+-{
+- int i;
+- int ret = 0;
+-
+- for (i=0; i<EDU_BUF_START_DW; i++) {
+- if (edu_buf32[i] != (PATTERN | i)) {
+- printk("############ %s: pattern overwritten at offset %d, expect %08x, found %08x\n",
+- __FUNCTION__, i*4, PATTERN | i, edu_buf32[i]);
+- ret++;
+- }
+- }
+- for (i=EDU_BUF_START_DW+EDU_BUFSIZE_DW; i<EDU_BUF32_SIZE_DW; i++) {
+- if (edu_buf32[i] != (PATTERN | i)) {
+- printk("############ %s: pattern overwritten at offset %d, expect %08x, found %08x\n",
+- __FUNCTION__, i*4, PATTERN | i, edu_buf32[i]);
+- ret++;
+- }
+- }
+-if (ret) printk("+++++++++++++++ %s: %d DW overwritten by EDU\n", __FUNCTION__, ret);
+- return ret;
+-}
+-
+-
+-static uint8_t edu_write_buf[512];
+-
+-
+-
+ #ifdef CONFIG_MTD_BRCMNAND_EDU
+-#define NUM_EDU_REGS (1+((BCHP_EDU_ERR_STATUS-BCHP_EDU_CONFIG)/4))
+-#else
+-#define NUM_EDU_REGS 1
+-#endif
+
+-#define MAX_DUMPS 20
+-
+-typedef struct nand_dump {
+- loff_t offset;
+- uint32_t physAddr;
+- struct brcmnand_chip* chip;
+- struct register_dump_t {
+- unsigned long timestamp;
+- uint32_t nand_regs[NUM_NAND_REGS]; // NAND register dump
+- uint32_t edu_regs[NUM_EDU_REGS]; // EDU register
+- uint32_t hif_intr2; // HIF_INTR2 Interrupt status
+- uint8_t data[512]; // NAND controller cache
+- } dump[MAX_DUMPS];
+- //uint8_t udata[512]; // Uncached
+-} nand_dump_t; // Before and after
+-nand_dump_t nandDump;
+-int numDumps = 0;
+-
+-
+-#ifdef CONFIG_MTD_BRCMNAND_EDU
+-static void print_dump_nand_regs(int which)
+-{
+- int i;
+-
+- printk("NAND registers snapshot #%d: TS=%0lx, offset=%0llx, PA=%08x\n",
+- 1+which, nandDump.dump[which].timestamp, nandDump.offset, nandDump.physAddr);
+- for (i=0; i<NUM_NAND_REGS; i++) {
+- if ((i % 4) == 0) {
+- printk("\n%08x:", BCHP_NAND_REVISION+(i*4));
+- }
+- printk(" %08x", nandDump.dump[which].nand_regs[i]);
+- }
+- printk("\nEDU registers:\n");
+- for (i=0; i<NUM_EDU_REGS; i++) {
+- if ((i % 4) == 0) {
+- printk("\n%08x:", BCHP_EDU_CONFIG+(i*4));
+- }
+- printk(" %08x", nandDump.dump[which].edu_regs[i]);
+- }
+- printk("\n HIF_INTR2_STATUS=%08x\n", nandDump.dump[which].hif_intr2);
+- printk("\nNAND controller Internal cache:\n");
+- print_databuf(nandDump.dump[which].data, 512);
+-}
+-
+-void dump_nand_regs(struct brcmnand_chip* chip, loff_t offset, uint32_t pa, int which)
+-{
+- int i;
+-
+- /* We don't have the value of offset during snapshot #2 */
+- if (which == 0) {nandDump.offset = offset; nandDump.physAddr = pa;nandDump.chip = chip;}
+-
+- nandDump.dump[which].timestamp = jiffies;
+-
+- for (i=0; i<NUM_NAND_REGS; i++) {
+- uint32_t reg = BCHP_NAND_REVISION+(i*4);
+- uint32_t regval;
+-
+- if (reg == 0x281c) { // No NAND register at 0x281c
+- regval = 0;
+- }
+- else {
+- regval = brcmnand_ctrl_read(reg);
+- }
+- nandDump.dump[which].nand_regs[i] = regval;
+- }
+- for (i=0; i<NUM_EDU_REGS; i++) {
+- nandDump.dump[which].edu_regs[i] = EDU_volatileRead(EDU_BASE_ADDRESS + BCHP_EDU_CONFIG + ( i*4));
+- }
+- nandDump.dump[which].hif_intr2 = EDU_volatileRead(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
+- brcmnand_from_flash_memcpy32(nandDump.chip, &nandDump.dump[which].data[0], nandDump.offset, 512);
+-}
+-
+-#else
+-
+-#define print_dump_nand_regs(...)
+-
+-#define dump_nand_regs(...)
+-
+-#endif // EDU_DEBUG_2,4,5
+-#endif
+-
+-
+-#ifdef CONFIG_MTD_BRCMNAND_EDU
+-
+-
+-/*
+- * Returns 1 on success,
+- * 0 on error
+- */
+-
+ static int brcmnand_EDU_write_is_complete(struct mtd_info *mtd, int* outp_needBBT)
+ {
+ uint32_t hif_err, edu_err;
+@@ -1581,45 +1287,37 @@
+
+
+ #ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+- #if 0 // No need in Batch mode
+ // Unlike the Read case where we retry on everything, we either complete the write or die trying.
+- // Here we use retry only for ERESTARTSYS, relying on the fact that we write the same data
+- // over the flash.
+- // Caution: Since this can be called from an interrupt context, we cannot call the regular brcmnand_wait()
+- // call, since those call schedule()
++ // Here we use retry only for ERESTARTSYS, relying on the fact that we write the same data over the flash.
+ hif_err = ISR_wait_for_completion();
+ if ((hif_err == ERESTARTSYS) || (hif_err & HIF_INTR2_EBI_TIMEOUT))
+ return hif_err;
+- #endif // Batch mode
++
+ #else
+ hif_err = EDU_poll(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS,
+- HIF_INTR2_EDU_DONE|HIF_INTR2_CTRL_READY,
++ HIF_INTR2_EDU_DONE,
+ HIF_INTR2_EDU_ERR,
+- HIF_INTR2_EDU_DONE_MASK|HIF_INTR2_CTRL_READY);
+-
++ HIF_INTR2_EDU_DONE_MASK);
+ #endif
+
+-
+ if (hif_err != 0) // No timeout
+ {
+- uint32_t flashStatus; // = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ int flashStatus; // = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+
+-#if 0
+-if (!(hif_err & HIF_INTR2_EDU_DONE))
+-printk("hif_err=%08x\n", hif_err);
+-#endif
+
++
++
+ /******************* BUG BUG BUG *****************
+ * THT 01/06/09: What if EDU returns bus error? We should not mark the block bad then.
+ */
+ //Get status: should we check HIF_INTR2_ERR?
+- if (hif_err & HIF_INTR2_EDU_ERR)
+- edu_err = EDU_get_error_status_register();
+- else
+- edu_err = 0;
++ edu_err = EDU_get_error_status_register();
+
+ //Clear interrupt:
+ //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
++ EDU_reset_done();
++ EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
++ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS, HIF_INTR2_EDU_CLEAR_MASK);
+
+ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+
+@@ -1627,56 +1325,39 @@
+ if (!(flashStatus & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK)) {
+ ret = brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
+ // No need to check on the EDU side, already done inside ctrl_write_is_complete
+- udelay(1000);
+- //dump_nand_regs(chip, 0, 0, numDumps++);
+- goto out;
++ return ret;
+ }
+-
+-#ifdef EDU_DEBUG_5
+-/* else */ {
+-
+-// 2nd dump after CTRL_READY is asserted
+-//udelay(1000);
+-//dump_nand_regs(chip, 0, 0, numDumps++);
+-}
+-#endif
+
+ if ((edu_err & EDU_ERR_STATUS_NandWrite) || (flashStatus & 0x01)) {
+ /* Write did not complete, flash error, will mark block bad */
+ *outp_needBBT = 1;
+ printk("EDU_write_is_complete(): error 0x%08X\n", edu_err);
+- ret = 0;
+- goto out;
++ return 0;
+ }
+ else if (edu_err) {
+ /* Write did not complete, bus error, will NOT mark block bad */
+ *outp_needBBT = 0;
+ printk("EDU_write_is_complete(): error 0x%08X\n", edu_err);
+- ret = 0;
+- goto out;
++ return 0;
+ }
+
+- ret = 1; // Success brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
+- goto out;
++ return 1; // Success brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
+ }
+ else { // Write timeout
+ printk("%s: Write has timed out\n", __FUNCTION__);
+ //*outp_needBBT = 1;
+- ret = 0;
+- goto out;
++ EDU_reset_done();
++ EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
++ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS, HIF_INTR2_EDU_CLEAR_MASK);
++
++ return 0;
+ }
+
+-out:
+
+- EDU_reset_done();
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
+- EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS, HIF_INTR2_EDU_CLEAR_MASK);
++ printk("EDU_write_is_complete(): error 2 hif_err: %08x\n", hif_err);
+
+-
+- //printk("EDU_write_is_complete(): error 2 hif_err: %08x\n", hif_err);
+-
+ //Poll time out or did not return HIF_INTR2_EDU_DONE:
+- return ret;
++ return 0;
+ }
+
+
+@@ -1689,7 +1370,7 @@
+
+
+ /**
+- * brcmnand_transfer_oob - [Internal] Transfer oob from chip->oob_poi to client buffer
++ * brcmnand_transfer_oob - [Internal] Transfer oob to client buffer
+ * @chip: nand chip structure
+ * @oob: oob destination address
+ * @ops: oob ops structure
+@@ -1727,10 +1408,6 @@
+ bytes = min_t(size_t, len, free->length);
+ boffs = free->offset;
+ }
+-#ifdef DEBUG_ISR
+-printk("%s: AUTO: oob=%p, chip->oob_poi=%p, ooboffs=%d, len=%d, bytes=%d, boffs=%d\n",
+- __FUNCTION__, oob, chip->oob_poi, ops->ooboffs, len, bytes, boffs);
+-#endif
+ memcpy(oob, chip->oob_poi + boffs, bytes);
+ oob += bytes;
+ }
+@@ -1752,7 +1429,7 @@
+ void* buffer, u_char* oobarea, loff_t offset)
+ {
+ struct brcmnand_chip* chip = mtd->priv;
+- //int retries = 2;
++ int retries = 2, done = 0;
+ static uint32_t oobbuf[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+ uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oobbuf[0]);
+ u_char* p8 = (u_char*) p32;
+@@ -1769,31 +1446,7 @@
+ //u_char oobbuf[16];
+ int erased, allFF;
+ int i;
+- uint32_t acc, acc0;
+- //int valid;
+
+- /*
+- * First disable Read ECC then re-try read OOB, because some times, the controller
+- * just drop the op on ECC errors.
+- */
+-
+-#if 1 /* Testing 1 2 3 */
+- /* Disable ECC */
+- acc = brcmnand_ctrl_read(BCHP_NAND_ACC_CONTROL);
+- acc0 = acc & ~(BCHP_NAND_ACC_CONTROL_RD_ECC_EN_MASK | BCHP_NAND_ACC_CONTROL_RD_ECC_BLK0_EN_MASK);
+- brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc0);
+-
+- chip->ctrl_writeAddr(chip, offset, 0);
+- PLATFORM_IOFLUSH_WAR();
+- chip->ctrl_write(BCHP_NAND_CMD_START, OP_SPARE_AREA_READ);
+-
+- // Wait until cache is filled up, disabling ECC checking
+- (void) brcmnand_spare_is_valid(mtd, FL_READING, 1);
+-
+- // Restore acc
+- brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
+-#endif
+-
+ for (i = 0; i < 4; i++) {
+ p32[i] = be32_to_cpu (chip->ctrl_read(BCHP_NAND_SPARE_AREA_READ_OFS_0 + i*4));
+ }
+@@ -1801,25 +1454,19 @@
+ erased = (p8[6] == 0xff && p8[7] == 0xff && p8[8] == 0xff);
+ allFF = (p8[6] == 0x00 && p8[7] == 0x00 && p8[8] == 0x00);
+ if (gdebug > 3 )
+-{printk("%s: offset=%0llx, erased=%d, allFF=%d\n",
+-__FUNCTION__, offset, erased, allFF);
++{printk("%s: erased=%d, allFF=%d\n", __FUNCTION__, erased, allFF);
+ print_oobbuf(p8, 16);
+ }
+ }
+ else if (chip->ecclevel >= BRCMNAND_ECC_BCH_1 && chip->ecclevel <= BRCMNAND_ECC_BCH_12) {
+- erased = 1;
+- allFF = 0; // Not sure for BCH.
++ erased = allFF = 1;
+ // For BCH-n, the ECC bytes are at the end of the OOB area
+- for (i=chip->eccOobSize-chip->eccbytes; i<min(16,chip->eccOobSize); i++) {
++ for (i=chip->eccOobSize-chip->eccbytes; i<chip->eccOobSize; i++) {
+ erased = erased && (p8[i] == 0xff);
+- if (!erased) {
+- printk("p8[%d]=%02x\n", i, p8[i]);
+- break;
++ allFF = allFF && (p8[i] == 0x00);
+ }
+- }
+-if (gdebug > 3 )
+-{printk("%s: offset=%0llx, i=%d from %d to %d, eccOobSize=%d, eccbytes=%d, erased=%d, allFF=%d\n",
+-__FUNCTION__, offset, i, chip->eccOobSize-chip->eccbytes, chip->eccOobSize,
++//if (gdebug > 3 )
++{printk("%s: eccOobSize=%d, eccbytes=%d, erased=%d, allFF=%d\n", __FUNCTION__,
+ chip->eccOobSize, chip->eccbytes, erased, allFF);}
+ }
+ else {
+@@ -2134,7 +1781,7 @@
+ static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+ uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
+ u_char* p8 = (u_char*) p32;
+- //unsigned long irqflags;
++ unsigned long irqflags;
+ int retries = 5, done=0;
+ int valid = 0;
+
+@@ -2257,24 +1904,17 @@
+ print_databuf(buffer, 32);
+ }
+
+-#if defined( EDU_DEBUG ) || defined (BRCMNAND_READ_VERIFY )
+-//if (in_verify <=0)
+-if (chip->ecclevel == BRCMNAND_ECC_HAMMING) {
++#ifdef EDU_DEBUG
++if (in_verify <=0) {
+ u_char edu_sw_ecc[4];
+
+ brcmnand_Hamming_ecc(buffer, edu_sw_ecc);
+
+-if ((p8[6] != edu_sw_ecc[0] || p8[7] != edu_sw_ecc[1] || p8[8] != edu_sw_ecc[2])
+- && !(p8[6]==0xff && p8[7]==0xff && p8[8]==0xff &&
+- edu_sw_ecc[0]==0x0 && edu_sw_ecc[1]==0x0 && edu_sw_ecc[2]==0x0)
+-) {
+ printk("!!!!!!!!! %s: offset=%0llx ECC=%02x%02x%02x, OOB:",
+ in_verify < 0 ? "WR" : "RD",
+ offset, edu_sw_ecc[0], edu_sw_ecc[1], edu_sw_ecc[2]);
+- print_oobbuf(p8, 16);
+- BUG();
++ print_oobbuf(oobarea, 16);
+ }
+-}
+ #endif
+
+
+@@ -2282,14 +1922,24 @@
+ }
+
+
+-/*
+- * Clear the controller cache by reading at a location we don't normally read
+- */
++
++
++#ifdef CONFIG_MTD_BRCMNAND_EDU
++
++
++extern int EDU_buffer_OK(volatile void* addr);
++
++
++#if 1
++static uint32_t debug_buf32[512];
++static u_char* ver_buf = (u_char*) &debug_buf32[0];
++static u_char ver_oob[16];
++
+ static void debug_clear_ctrl_cache(struct mtd_info* mtd)
+ {
+ /* clear the internal cache by writing a new address */
+ struct brcmnand_chip* chip = mtd->priv;
+- loff_t offset = chip->chipSize-chip->blockSize; // Start of BBT region
++ loff_t offset = chip->chipSize-0x100000; // Start of BBT region
+
+ chip->ctrl_writeAddr(chip, offset, 0);
+ PLATFORM_IOFLUSH_WAR();
+@@ -2299,20 +1949,6 @@
+ (void) brcmnand_cache_is_valid(mtd, FL_READING, offset);
+ }
+
+-#ifdef CONFIG_MTD_BRCMNAND_EDU
+-
+-
+-extern int EDU_buffer_OK(volatile void* addr, int command);
+-
+-
+-#if 1
+-static uint32_t debug_buf32[512];
+-static u_char* ver_buf = (u_char*) &debug_buf32[0];
+-static u_char ver_oob[16];
+-
+-
+-
+-
+ static void debug_EDU_read(struct mtd_info* mtd,
+ void* edu_buffer, u_char* edu_oob, loff_t offset, uint32_t intr_status,
+ uint32_t edu_status, u_char* edu_sw_ecc)
+@@ -2373,126 +2009,213 @@
+ }
+ #endif
+
++/**
++ * brcmnand_posted_read_cache - [BrcmNAND Interface] Read the 512B cache area
++ * Assuming brcmnand_get_device() has been called to obtain exclusive lock
++ * @param mtd MTD data structure
++ * @param oobarea Spare area, pass NULL if not interested
++ * @param buffer the databuffer to put/get data, pass NULL if only spare area is wanted.
++ * @param offset offset to read from or write to, must be 512B aligned.
++ * @param raw: Ignore BBT bytes when raw = 1
++ *
++ * Caller is responsible to pass a buffer that is
++ * (1) large enough for 512B for data and optionally an oobarea large enough for 16B.
++ * (2) 4-byte aligned.
++ *
++ * Read the cache area into buffer. The size of the cache is mtd-->eccsize and is always 512B.
++ */
++//#define EDU_DEBUG_2
++#undef EDU_DEBUG_2
+
+-#ifdef EDU_DEBUG_4
+-int edu_read_verify(struct mtd_info *mtd, char* buffer, char* oobarea, loff_t offset)
+-{
+- struct brcmnand_chip* chip = mtd->priv;
+- static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+- uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
+-int ctrlret;
++// EDU_DEBUG_4: Verify on Read
++//#define EDU_DEBUG_4
++#undef EDU_DEBUG_4
+
+-PRINTK("%s: buffer=%08x, ctrlbuf=%08x, oobarea=%08x, ctrl_oob=%08x, offset=%08llx\n", __FUNCTION__,
+- buffer, ctrl_buf, oobarea, ctrl_oob, offset);
++// EDU_DEBUG_5: Verify on Write
++//#define EDU_DEBUG_5
++#undef EDU_DEBUG_5
+
++#if defined( EDU_DEBUG_2 ) || defined( EDU_DEBUG_4 )
++/* 3548 internal buffer is 4K in size */
++//static uint32_t edu_lbuf[2048];
++static uint32_t* edu_buf32;
++static uint8_t* edu_buf; // Used by EDU in Debug2
++static uint8_t* ctrl_buf; // Used by Ctrl in Debug4
++static uint32_t ctrl_oob32[4];
++static uint8_t* ctrl_oob = (uint8_t*) ctrl_oob32;
+
++#define PATTERN 0xa55a0000
+
+- ctrlret = brcmnand_ctrl_posted_read_cache(mtd, ctrl_buf, ctrl_oob, offset);
+- //verify_edu_buf();
+- // Compare buffer returned from EDU and Ctrl reads:
+- if (0 != memcmp(ctrl_buf, buffer, 512)) {
+-printk("$$$$$$$$$$$$ EDU Read: offset=%08llx\n", offset);
+-print_databuf(buffer, 512);
+-printk("------------ Ctrl Read: \n");
+-print_databuf(ctrl_buf, 512);
+- BUG();
+- }
+- if (oobarea)
+- {
+- if (0 != memcmp(p32, ctrl_oob, 16)) {
+-printk("########## Ctrl OOB:\n");
+-print_oobbuf(ctrl_oob, 16);
+-printk("------------ EDU OOB: \n");
+-print_oobbuf(p32, 16);
+-/* Which one is correct? Since the data buffers agree, use Hamming codes */
+- if (chip->ecclevel == BRCMNAND_ECC_HAMMING)
+- {
+- unsigned char ecc1[3]; // SW ECC, manually calculated
+- brcmnand_Hamming_WAR(mtd, offset, buffer, &ctrl_oob[6], &ecc1[0]);
+- printk("Hamming ECC=%02x%02x%02x\n", ecc1[0], ecc1[1], ecc1[2]);
+- }
++#define EDU_BUFSIZE_B (512)
++// One before and one after
++#define EDU_BUF32_SIZE_B (EDU_BUFSIZE_B*3)
++
++// Same as above in DW instead
++#define EDU_BUFSIZE_DW (EDU_BUFSIZE_B/4)
++#define EDU_BUF32_SIZE_DW (EDU_BUF32_SIZE_B/4)
++
++// Real buffer starts at 1/3
++#define EDU_BUF_START_DW (EDU_BUF32_SIZE_DW/3)
++
++
++static void init_edu_buf(void)
++{
++ /* Write pattern */
++ int i;
++
++ if (!edu_buf32) {
++ edu_buf32 = (uint32_t*) kmalloc(EDU_BUF32_SIZE_B, GFP_KERNEL);
++ if (!edu_buf32) {
++ printk("%s: Out of memory\n", __FUNCTION__);
+ BUG();
+ }
++
++ edu_buf = ctrl_buf = (uint8_t*) &edu_buf32[EDU_BUF_START_DW];
++ printk("%s: Buffer allocated at %p, %d bytes\n", __FUNCTION__, edu_buf32, EDU_BUF32_SIZE_B);
++ printk("Real buffer starts at %p\n", ctrl_buf);
+ }
+- return 0;
++
++ for (i=0; i<EDU_BUF32_SIZE_DW; i++) {
++ edu_buf32[i] = PATTERN | i;
++ }
+ }
+-#endif // Verify EDU on Read
+
+-
+-/*
+- * Read completion after EDU_Read is called.
+- * In ISR mode, this routine is run in interrupt context
+- */
+-int
+-brcmnand_edu_read_comp_intr(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset, uint32_t intr_status)
++static int verify_edu_buf(void)
+ {
+- struct brcmnand_chip* chip = mtd->priv;
+- uint32_t intfc_status;
+ int i;
+- static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+- uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
++ int ret = 0;
+
+- if (intr_status & HIF_INTR2_EDU_ERR) {
+- printk("%s: Should not call me with EDU ERR\n", __FUNCTION__);
+- BUG();
++ for (i=0; i<EDU_BUF_START_DW; i++) {
++ if (edu_buf32[i] != (PATTERN | i)) {
++ printk("############ %s: pattern overwritten at offset %d, expect %08x, found %08x\n",
++ __FUNCTION__, i*4, PATTERN | i, edu_buf32[i]);
++ ret++;
++ }
+ }
+- intfc_status = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+- if (!(intfc_status & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK)) {
+- printk("%s: Impossible, HIF_INTR2_CTRL_READY already asserted\n", __FUNCTION__);
+- BUG();
+- }
+-
+- // Remember last good sector read. Needed for HIF_INTR2 workaround.
+- gLastKnownGoodEcc = offset;
+- if (oobarea)
+- {
+- PLATFORM_IOFLUSH_WAR();
+- for (i = 0; i < 4; i++) {
+- p32[i] = be32_to_cpu (chip->ctrl_read(BCHP_NAND_SPARE_AREA_READ_OFS_0 + i*4));
++ for (i=EDU_BUF_START_DW+EDU_BUFSIZE_DW; i<EDU_BUF32_SIZE_DW; i++) {
++ if (edu_buf32[i] != (PATTERN | i)) {
++ printk("############ %s: pattern overwritten at offset %d, expect %08x, found %08x\n",
++ __FUNCTION__, i*4, PATTERN | i, edu_buf32[i]);
++ ret++;
+ }
+-if (gdebug > 3) {printk("SUCCESS: %s: offset=%0llx, oob=\n", __FUNCTION__, offset); print_oobbuf((u_char*) &p32[0], 16);}
+- }
+-
+- return 0;
++ }
++if (ret) printk("+++++++++++++++ %s: %d DW overwritten by EDU\n", __FUNCTION__, ret);
++ return ret;
+ }
+
+-/*
+- * Read WAR after EDU_Read is called, and EDU returns errors.
+- * This routine can only be called in process context
+- */
+-int
+-brcmnand_edu_read_completion(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset, uint32_t intr_status)
++#endif
++
++static int brcmnand_EDU_posted_read_cache(struct mtd_info* mtd,
++ void* buffer, u_char* oobarea, loff_t offset)
+ {
++
++ int ecc;
++
+ struct brcmnand_chip* chip = mtd->priv;
+- uint32_t edu_err_status;
++ loff_t sliceOffset = offset & (~ (mtd->eccsize - 1));
++ int i, ret = 0;
+ static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+ uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
+ u_char* p8 = (u_char*) p32;
+- int ecc;
+- int ret = 0, i;
++ uint32_t EDU_ldw;
++ uint32_t intr_status;
++ unsigned long irqflags;
++ int retries = 5;
++
++int save_debug;
++uint32_t edu_status;
+
+- if (in_interrupt()) {
+- printk(KERN_ERR "%s cannot be run in interrupt context\n", __FUNCTION__);
+- BUG();
++#ifdef EDU_DEBUG_2
++u_char* save_buf = buffer;
++#endif
++
++//if((offset >= (0x3a8148 & ~(0x1FF))) && (offset < ((0x3a8298+0x1F) & ~(0x1FF)))) gdebug=4;
++//gdebug = 4;
++if (gdebug > 3) {
++printk("%s: offset=%0llx, buffer=%p, oobarea=%p\n", __FUNCTION__, offset, buffer, oobarea);}
++
++#if 0 //def EDU_DEBUG_4
++printk("%s: offset=%0llx, buffer=%p, oobarea=%p\n", __FUNCTION__, offset, buffer, oobarea);
++#endif
++
++
++ if (unlikely(offset - sliceOffset)) {
++ printk(KERN_ERR "%s: offset %0llx is not cache aligned, sliceOffset=%0llx, CacheSize=%d\n",
++ __FUNCTION__, offset, sliceOffset, mtd->eccsize);
++ ret = -EINVAL;
++ goto out;
+ }
+- if (intr_status & HIF_INTR2_EDU_ERR) {
++
++//#if 0 // Testing 1 2 3
++ if (unlikely(!EDU_buffer_OK(buffer)))
++//#endif
++ {
++if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
++ /* EDU does not work on non-aligned buffers */
++ ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, oobarea, offset);
++ return (ret);
++ }
++
++ if (wr_preempt_en) {
++ // local_irq_save(irqflags);
++ }
++
++#if defined( EDU_DEBUG_2 )
++ init_edu_buf();
++
++ buffer = edu_buf;
++
++#elif defined( EDU_DEBUG_4 )
++ init_edu_buf();
++
++#endif
++
++ intr_status = 0;
++ do {
++
++ EDU_ldw = chip->ctrl_writeAddr(chip, sliceOffset, 0);
++ PLATFORM_IOFLUSH_WAR();
++
++ if (intr_status & HIF_INTR2_EBI_TIMEOUT) {
++ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EBI_TIMEOUT);
++ }
++ intr_status = EDU_read(buffer, EDU_ldw);
++
++#if 0
++if ((intr_status == ERESTARTSYS) || (intr_status & HIF_INTR2_EBI_TIMEOUT) ) {
++uint32_t rd_data = ISR_volatileRead(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
++printk("%s: EDU_read returns error %08x , intr=%08x at offset %0llx\n", __FUNCTION__, intr_status, rd_data, offset);
++}
++#endif
++ } while (retries-- > 0 && ((intr_status == ERESTARTSYS) || (intr_status & HIF_INTR2_EBI_TIMEOUT) ));
++
++ if (retries <= 0 && ((intr_status == ERESTARTSYS) || (intr_status & HIF_INTR2_EBI_TIMEOUT))) { // EBI Timeout
++ // Use controller read
++ printk("%s: EBI timeout, use controller read at offset %0llx\n", __FUNCTION__, offset);
++ ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, oobarea, offset);
++ return (ret);
++ }
++
++ else if (intr_status & HIF_INTR2_EDU_ERR) {
+ if (wr_preempt_en) {
+ //local_irq_restore(irqflags);
+ }
+- edu_err_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_ERR_STATUS);
++ edu_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_ERR_STATUS);
++//if (edu_status == 0)
++// printk("+++++++++++ %s:offset=%0llx Intr=%08x but EDU_status=%08x, LKG=%0llx\n", __FUNCTION__,
++// offset, intr_status, edu_status, gLastKnownGoodEcc);
+
++
+ /**** WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR WAR */
+ /* Do a dummy read on a known good ECC sector to clear error */
+- if (edu_err_status) {
+- static uint8_t myBuf2[512+31];
+- // EDU aligned
+- uint8_t* tmpBuf = (uint8_t*) ((((unsigned int) &myBuf2[0]) + 31) & (~31));
+-
++ if (edu_status) {
++ static uint32_t tmpBuf[128];
+ // We start from the BBT, since these would (hopefully) always be good sectors.
+ loff_t tmpOffset = chip->chipSize - 512;
+
++//printk("Handle HIF_INTR2_UNC_ERR: Step 1: @offset %0llx\n", offset);
++//print_oobreg(chip);
++
+ // First make sure that there is a last known good sector
+ while (gLastKnownGoodEcc == 0 && tmpOffset >= 0) {
+ ret = brcmnand_ctrl_posted_read_cache(mtd, tmpBuf, NULL, tmpOffset);
+@@ -2502,21 +2225,22 @@
+ uint32_t lkgs;
+ // Clear the error condition
+ //(void) brcmnand_EDU_posted_read_cache(mtd, tmpBuf, NULL, gLastKnownGoodEcc);
++ lkgs = chip->ctrl_writeAddr(chip, gLastKnownGoodEcc, 0);
++ PLATFORM_IOFLUSH_WAR();
+
+-
+ // Use Register Array
+ // EDU_ldw = BCHP_PHYSICAL_OFFSET + BCHP_NAND_FLASH_CACHEi_ARRAY_BASE;
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+- // Reset EDU
+- ISR_push_request(mtd, tmpBuf, NULL, tmpOffset);
+-#else
+- lkgs = chip->ctrl_writeAddr(chip, gLastKnownGoodEcc, 0);
+- PLATFORM_IOFLUSH_WAR();
+ intr_status = EDU_read(buffer, lkgs);
+-#endif
+-
++//printk("intr_status returns from dummy read at offset %0llx: %08x\n", gLastKnownGoodEcc, intr_status);
++//printk("Handle HIF_INTR2_UNC_ERR: Step 2:\n");
++//print_oobreg(chip);
+ ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, p8, offset);
+-
++//printk("Handle HIF_INTR2_UNC_ERR: Step 3:\n");
++//print_oobreg(chip);
++//if (oobarea)
++{
++// printk("Unc Error WAR OOB="); print_oobbuf(p8, 16);
++}
+ return ret;
+ }
+ // else there can be no workaround possible, use controller read
+@@ -2525,8 +2249,16 @@
+ }
+ }
+ /**** ENDWAR ENDWAR ENDWAR ENDWAR */
++
++ // If error was not due to UNC or COR errors, or poll timeout, try the old-fashioned way
++ //ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, oobarea, offset);
++ //return (ret);
+ }
+
++
++//if (intr_status & HIF_INTR2_EDU_ERR)
++// printk("%s: EDU_read returns error at offset=%0llx, intr_status=%08x\n", __FUNCTION__, offset, intr_status);
++
+ /*
+ * Wait for Controller ready, which indicates the OOB and buffer are ready to be read.
+ */
+@@ -2563,7 +2295,7 @@
+ for (i = 0; i < 4; i++) {
+ p32[i] = be32_to_cpu (chip->ctrl_read(BCHP_NAND_SPARE_AREA_READ_OFS_0 + i*4));
+ }
+-if (gdebug > 3) {printk("SUCCESS: %s: offset=%0llx, oob=\n", __FUNCTION__, offset); print_oobbuf((u_char*) &p32[0], 16);}
++if (gdebug > 3) {printk("SUCCESS: %s: offset=%0llx, oob=\n", __FUNCTION__, sliceOffset); print_oobbuf((u_char*) &p32[0], 16);}
+ }
+ ret = 0; // Success!
+ break;
+@@ -2571,7 +2303,9 @@
+ case BRCMEDU_CORRECTABLE_ECC_ERROR:
+ /* FALLTHRU */
+ case BRCMNAND_CORRECTABLE_ECC_ERROR:
+-
++{save_debug = gdebug;
++//gdebug = 4;
++//edu_debug = 4;
+ printk("+++++++++++++++ CORRECTABLE_ECC: offset=%0llx ++++++++++++++++++++\n", offset);
+ // Have to manually copy. EDU drops the buffer on error - even correctable errors
+ if (buffer) {
+@@ -2584,7 +2318,7 @@
+ for (i = 0; i < 4; i++) {
+ p32[i] = be32_to_cpu (chip->ctrl_read(BCHP_NAND_SPARE_AREA_READ_OFS_0 + i*4));
+ }
+-if (gdebug > 3) {printk("CORRECTABLE: %s: offset=%0llx, oob=\n", __FUNCTION__, offset); print_oobbuf(oobarea, 16);}
++if (gdebug > 3) {printk("CORRECTABLE: %s: offset=%0llx, oob=\n", __FUNCTION__, sliceOffset); print_oobbuf(oobarea, 16);}
+ }
+
+ #ifndef DEBUG_HW_ECC // Comment out for debugging
+@@ -2604,7 +2338,7 @@
+ }
+ }
+ }
+-
++gdebug = edu_debug = save_debug;}
+ break;
+
+ case BRCMEDU_UNCORRECTABLE_ECC_ERROR:
+@@ -2612,13 +2346,16 @@
+ {
+ int valid;
+
+-
++save_debug = gdebug;
++//gdebug = 4;
++//edu_debug = 4;
++//
+ PRINTK("************* UNCORRECTABLE_ECC (offset=%0llx) ********************\n", offset);
+ /*
+ * THT: Since EDU does not handle OOB area, unlike the UNC ERR case of the ctrl read,
+ * we have to explicitly read the OOB, before calling the WAR routine.
+ */
+- chip->ctrl_writeAddr(chip, offset, 0);
++ chip->ctrl_writeAddr(chip, sliceOffset, 0);
+ chip->ctrl_write(BCHP_NAND_CMD_START, OP_SPARE_AREA_READ);
+
+ // Wait until spare area is filled up
+@@ -2635,6 +2372,8 @@
+ printk("************* UNCORRECTABLE_ECC (offset=%0llx) valid!=0 ********************\n", offset);
+ ret = -EBADMSG;
+ }
++if (!ret)
++{gdebug = edu_debug = save_debug;}
+ }
+ break;
+
+@@ -2661,126 +2400,73 @@
+
+ out:
+
+-
+-//gdebug=0;
+- return ret;
+-}
+-
+-
+- #ifndef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+-/**
+- * brcmnand_posted_read_cache - [BrcmNAND Interface] Read the 512B cache area
+- * Assuming brcmnand_get_device() has been called to obtain exclusive lock
+- * @param mtd MTD data structure
+- * @param oobarea Spare area, pass NULL if not interested
+- * @param buffer the databuffer to put/get data, pass NULL if only spare area is wanted.
+- * @param offset offset to read from or write to, must be 512B aligned.
+- * @param raw: Ignore BBT bytes when raw = 1
+- *
+- * Caller is responsible to pass a buffer that is
+- * (1) large enough for 512B for data and optionally an oobarea large enough for 16B.
+- * (2) 4-byte aligned.
+- *
+- * Read the cache area into buffer. The size of the cache is mtd-->eccsize and is always 512B.
+- */
+-
+-
+-static int brcmnand_EDU_posted_read_cache(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset)
++#if 0
+ {
++//if (!ret)
++ u_char edu_sw_ecc[4];
+
+- //int ecc;
++ debug_EDU_read(mtd, buffer, oobarea, offset, intr_status, edu_status, edu_sw_ecc);
+
+- struct brcmnand_chip* chip = mtd->priv;
+- loff_t sliceOffset = offset & (~ (mtd->eccsize - 1));
+- int i, ret = 0;
+- //static uint32_t oob0[4]; // Sparea Area to handle ECC workaround, aligned on DW boundary
+- //uint32_t* p32 = (oobarea ? (uint32_t*) oobarea : (uint32_t*) &oob0[0]);
+- //u_char* p8 = (u_char*) p32;
+- uint32_t EDU_ldw;
+- uint32_t intr_status;
+- unsigned long irqflags;
+- int retries = 5;
+-
+-int save_debug;
+-uint32_t edu_status;
+-
+-#ifdef EDU_DEBUG_2
+-u_char* save_buf = buffer;
++ printk("!!!!!!!!! RD: offset=%0llx ECC=%02x%02x%02x, OOB:",
++offset, edu_sw_ecc[0], edu_sw_ecc[1], edu_sw_ecc[2]);
++ print_oobbuf(oobarea, 16);
++}
+ #endif
+
+-//if((offset >= (0x3a8148 & ~(0x1FF))) && (offset < ((0x3a8298+0x1F) & ~(0x1FF)))) gdebug=4;
+-//gdebug = 4;
+-if (gdebug > 3) {
+-printk("%s: offset=%0llx, buffer=%p, oobarea=%p\n", __FUNCTION__, offset, buffer, oobarea);}
+-
+-#if 0 //def EDU_DEBUG_4
+-printk("%s: offset=%0llx, buffer=%p, oobarea=%p\n", __FUNCTION__, offset, buffer, oobarea);
++#if 0
++if (offset <= 0x3a3600 && (offset+512) > 0x3a3600) {
++printk("@@@@@@@@@ Dump EDU Read around 0x3a3600:\n");
++print_databuf(buffer, 512);print_oobbuf(p32, 16);
++}
+ #endif
+
++#ifdef EDU_DEBUG_4
++{
++int ctrlret;
+
+- if (unlikely(offset - sliceOffset)) {
+- printk(KERN_ERR "%s: offset %0llx is not cache aligned, sliceOffset=%0llx, CacheSize=%d\n",
+- __FUNCTION__, offset, sliceOffset, mtd->eccsize);
+- ret = -EINVAL;
+- return (ret);
++ ctrlret = brcmnand_ctrl_posted_read_cache(mtd, ctrl_buf, ctrl_oob, offset);
++ //verify_edu_buf();
++ // Compare buffer returned from EDU and Ctrl reads:
++ if (0 != memcmp(ctrl_buf, buffer, 512)) {
++printk("$$$$$$$$$$$$ Read buffer from Ctrl & EDU read-ops differ at offset %0llx, intr_status=%08x, ecc=%d\n",
++ offset, intr_status, ecc);
++printk("$$$$$$$$$$$$ EDU Read:\n");
++print_databuf(buffer, 512);
++printk("------------ Ctrl Read: \n");
++print_databuf(edu_buf, 512);
++ BUG();
+ }
+-
+-//#if 0 // Testing 1 2 3
+- if (unlikely(!EDU_buffer_OK(buffer, EDU_READ)))
+-//#endif
++ //if (oobarea)
+ {
+-if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
+- /* EDU does not work on non-aligned buffers */
+- ret = brcmnand_ctrl_posted_read_cache(mtd, buffer, oobarea, offset);
+- return (ret);
++ if (0 != memcmp(p32, ctrl_oob, 16)) {
++printk("########## Read OOB from Ctrl & EDU read-ops differ at offset %0llx, intr_status=%08x, ecc=%d\n",
++ offset, intr_status, ecc);
++printk("########## Ctrl OOB:\n");
++print_oobbuf(ctrl_oob, 16);
++printk("------------ EDU OOB: \n");
++print_oobbuf(p32, 16);
++/* Which one is correct? Since the data buffers agree, use Hamming codes */
++ if (chip->ecclevel == BRCMNAND_ECC_HAMMING)
++ {
++ unsigned char ecc1[3]; // SW ECC, manually calculated
++ brcmnand_Hamming_WAR(mtd, offset, buffer, &ctrl_oob[6], &ecc1[0]);
++ printk("Hamming ECC=%02x%02x%02x\n", ecc1[0], ecc1[1], ecc1[2]);
++ }
++ BUG();
++ }
+ }
++}
++#endif // Verify EDU on Read
+
+- if (wr_preempt_en) {
+- // local_irq_save(irqflags);
+- }
+-
+-#if defined( EDU_DEBUG_2 )
+- init_edu_buf();
+-
+- buffer = edu_buf;
+-
+-#elif defined( EDU_DEBUG_4 )
+- init_edu_buf();
+-
+-#endif
+-
+- intr_status = 0;
+- do {
+-
+- EDU_ldw = chip->ctrl_writeAddr(chip, sliceOffset, 0);
+- PLATFORM_IOFLUSH_WAR();
+-
+- if (intr_status & HIF_INTR2_EBI_TIMEOUT) {
+- EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EBI_TIMEOUT);
+- }
+- intr_status = EDU_read(buffer, EDU_ldw);
+-
+- } while (retries-- > 0 && ((intr_status == ERESTARTSYS) || (intr_status & HIF_INTR2_EBI_TIMEOUT) ));
+-
+-
+- ret = brcmnand_edu_read_completion(mtd, buffer, oobarea, offset, intr_status);
+-
+-//gdebug=0;
++gdebug=0;
+ return ret;
+ }
+
+
+-
+ static int (*brcmnand_posted_read_cache)(struct mtd_info*,
+ void*, u_char*, loff_t) = brcmnand_EDU_posted_read_cache;
+-
+- #else /* Queue Mode */
+-static int (*brcmnand_posted_read_cache)(struct mtd_info*,
+- void*, u_char*, loff_t) = brcmnand_ctrl_posted_read_cache;
+- #endif
+
+-#else
++#else
+ static int (*brcmnand_posted_read_cache)(struct mtd_info*,
+ void*, u_char*, loff_t) = brcmnand_ctrl_posted_read_cache;
+ #endif
+@@ -2805,33 +2491,16 @@
+ loff_t sliceOffset = offset & (~(mtd->eccsize - 1));
+ int i, ret = 0, valid, done = 0;
+ int retries = 5;
+- //unsigned long irqflags;
++ unsigned long irqflags;
+
+ //char msg[20];
+
+-#if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_3_0
+- static uint8_t myBuf2[512+31]; // Place holder only.
+- static uint8_t* myBuf = NULL;
+-
+- /*
+- * Force alignment on 32B boundary
+- */
+- if (!myBuf) {
+- myBuf = (uint8_t*) ((((unsigned int) &myBuf2[0]) + 31) & (~31));
+- }
+-
+- #if CONFIG_MTD_BRCMNAND_VERSION == CONFIG_MTD_BRCMNAND_VERS_3_0
+- {
+- // PR2516. Not a very good WAR, but the affected chips (3548A0,7443A0) have been EOL'ed
+- return brcmnand_ctrl_posted_read_cache(mtd, (void*) myBuf, oobarea, offset);
+- }
+-
+- #else /* 3.1 or later */
+- // If BCH codes, force full page read to activate ECC correction on OOB bytes.
+- if (chip->ecclevel != BRCMNAND_ECC_HAMMING && chip->ecclevel != BRCMNAND_ECC_DISABLE) {
+- return brcmnand_ctrl_posted_read_cache(mtd, (void*) myBuf, oobarea, offset);
+- }
+- #endif
++#if CONFIG_MTD_BRCMNAND_VERSION == CONFIG_MTD_BRCMNAND_VERS_3_0
++{
++ // PR2516. Not a very good WAR, but the affected chips (3548A0,7443A0) have been EOL'ed
++ static uint32_t myBuf[128]; // Place holder only.
++ return brcmnand_ctrl_posted_read_cache(mtd, (void*) myBuf, oobarea, offset);
++}
+ #endif
+
+ if (gdebug > 3 ) PRINTK("->%s: offset=%0llx\n", __FUNCTION__, offset);
+@@ -2921,151 +2590,6 @@
+ return ret;
+ }
+
+-
+-//#ifdef CONFIG_MTD_BRCMNAND_EDU
+-
+-//#define EDU_DEBUG_3
+-#undef EDU_DEBUG_3
+-
+-#if 0 //defined( EDU_DEBUG_3 ) || defined( EDU_DEBUG_5 ) || defined(BRCMNAND_WRITE_VERIFY )
+-
+-
+-/*
+- * Returns 0 on no errors.
+- * THis should never be called, because partial writes may screw up the verify-read.
+- */
+-static int edu_write_verify(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset)
+-{
+- struct brcmnand_chip* chip = mtd->priv;
+- static uint8_t sw_ecc[4];
+- static uint32_t read_oob[4];
+- static uint8_t write_oob[16];
+- uint8_t* oobpoi = (uint8_t*) &read_oob[0];
+- int ret = 0;
+-
+- // Dump the register, done immediately after EDU_Write returns
+- // dump_nand_regs(chip, offset);
+-
+- if ( chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- // Read back the data, but first clear the internal cache first.
+- debug_clear_ctrl_cache(mtd);
+-
+- ret = brcmnand_ctrl_posted_read_cache(mtd, edu_write_buf, oobpoi, offset);
+- if (ret) {
+- printk("+++++++++++++++++++++++ %s: Read Verify returns %d\n", __FUNCTION__, ret);
+- goto out;
+- }
+- if (0 != memcmp(buffer, edu_write_buf, 512)) {
+- printk("+++++++++++++++++++++++ %s: WRITE buffer differ with READ-Back buffer\n",
+- __FUNCTION__);
+- ret = (-1);
+- goto out;
+- }
+- if (oobarea) { /* For BCH, the ECC is at the end */
+- // Number of bytes to compare (with ECC bytes taken out)
+- int numFree = min(16, chip->eccOobSize - chip->eccbytes);
+-
+- if (memcmp(oobarea, oobpoi, numFree)) {
+- printk("+++++++++++++++++++++++ %s: BCH-%-d OOB comp failed, numFree=%d\n",
+- __FUNCTION__, chip->ecclevel, numFree);
+- printk("In OOB:\n"); print_oobbuf(oobarea, 16);
+- printk("\nVerify OOB:\n"); print_oobbuf(oobpoi, 16);
+- ret = (-2);
+- goto out;
+- }
+- }
+- return 0;
+- }
+-
+- // Calculate the ECC
+- // brcmnand_Hamming_ecc(buffer, sw_ecc);
+-
+- // Read back the data, but first clear the internal cache first.
+- debug_clear_ctrl_cache(mtd);
+-
+-in_verify = -1;
+- ret = brcmnand_ctrl_posted_read_cache(mtd, edu_write_buf, oobpoi, offset);
+-in_verify = 0;
+-
+- if (ret) {
+- printk("+++++++++++++++++++++++ %s: Read Verify returns %d\n", __FUNCTION__, ret);
+- goto out;
+- }
+-
+-#if 0
+- if (sw_ecc[0] != oobpoi[6] || sw_ecc[1] != oobpoi[7] || sw_ecc[2] != oobpoi[8]) {
+-printk("+++++++++++++++++++++++ %s: SWECC=%02x%02x%02x ReadOOB=%02x%02x%02x, buffer=%p, offset=%0llx\n",
+- __FUNCTION__,
+- sw_ecc[0], sw_ecc[1], sw_ecc[2], oobpoi[6], oobpoi[7], oobpoi[8], buffer, offset);
+-
+- ret = (-1);
+- goto out;
+- }
+-#endif
+-
+- // Verify the OOB if not NULL
+- if (oobarea) {
+- //memcpy(write_oob, oobarea, 16);
+- //write_oob[6] = sw_ecc[0];
+- //write_oob[7] = sw_ecc[1];
+- //write_oob[8] = sw_ecc[2];
+- if (memcmp(oobarea, oobpoi, 6) || memcmp(&oobarea[9], &oobpoi[9],7)) {
+- printk("+++++++++++++++++++++++ %s: OOB comp Hamming failed\n", __FUNCTION__);
+- printk("In OOB:\n"); print_oobbuf(oobarea, 16);
+- printk("\nVerify OOB:\n"); print_oobbuf(oobpoi, 16);
+- ret = (-2);
+- goto out;
+- }
+- }
+-
+-out:
+-if (ret) {
+- int i, j, k;
+- uint8_t* writeBuf = (uint8_t*) buffer;
+-//for (i=0; i<2; i++)
+-{
+-// Let user land completes its run to avoid garbled printout
+-//schedule();
+-for (j=0; j<512; j++) {
+- if (writeBuf[j] != edu_write_buf[j]) {
+- printk("Buffers differ at offset %04x\n", j);
+- break;
+- }
+-}
+-printk("$$$$$$$$$$$$$$$$$ Register dump:\n");
+-printk("\n");
+-printk("\n");
+-printk("\n");
+-printk("\n");
+-for (k=0; k<numDumps; k++) {
+-printk("\n");
+-printk("\n");
+-printk("$$$$$$$$$$$$$$$$$ Register dump snapshot #%d:\n", k+1);
+-print_dump_nand_regs(k);
+-printk("\n");
+-}
+-printk("\n");
+-printk("\n");
+-printk("EDU_write 99, ret=%d, offset=%0llx, buffer=%p\n", ret, offset, buffer);
+-printk("Write buffer:\n"); print_databuf(buffer, 512);
+-if (oobarea) { printk("Write OOB: "); print_oobbuf(oobarea, 512); }
+-printk("Read back buffer:\n"); print_databuf(edu_write_buf, 512);
+-if (oobarea) { printk("Read OOB: "); print_oobbuf(write_oob, 512); }
+-
+-//printk("$$$$$$$$$$$$$$$$$ Register dump:\n");
+-//print_dump_nand_regs();
+-}
+-}
+- return ret;
+-}
+-
+-
+-#else
+-#define edu_write_verify(...) (0)
+-#endif
+-
+-
+ /**
+ * brcmnand_posted_write - [BrcmNAND Interface] Write a buffer to the flash cache
+ * Assuming brcmnand_get_device() has been called to obtain exclusive lock
+@@ -3160,136 +2684,88 @@
+ }
+
+
+-
+ #ifdef CONFIG_MTD_BRCMNAND_EDU
+- #ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+
+- /*
+- * Performs WAR for queue-write. Currently, it is always called with needBBT=1
+- * Runs in process context.
+- * Return 0 on success, error codes on errors.
+- */
+-int
+-brcmnand_edu_write_war(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset, uint32_t intr_status,
+- int needBBT)
+-{
+- struct brcmnand_chip* chip = mtd->priv;
+- int ret = 0;
++//#define EDU_DEBUG_3
++#undef EDU_DEBUG_3
+
++#ifdef EDU_DEBUG_3
+
+- if (!(intr_status & HIF_INTR2_CTRL_READY)) {
+- printk("%s: Impossible, ctrl-ready asserted in interrupt handler\n", __FUNCTION__);
+- BUG();
+- }
++static uint8_t edu_write_buf[512];
+
+- if (!needBBT)
+- {
+- ret = 0;
+- }
+- else
+- { // Need BBT
+-#if 1 //defined (ECC_CORRECTABLE_SIMULATION) || defined(ECC_UNCORRECTABLE_SIMULATION) || defined(WR_BADBLOCK_SIMULATION)
+- printk("%s: Marking bad block @%0llx\n", __FUNCTION__, offset);
+-#endif
+- ret = chip->block_markbad(mtd, offset);
+- ret = -EINVAL;
+- }
+-
+-#if defined(EDU_DEBUG_5) // || defined( CONFIG_MTD_BRCMNAND_VERIFY_WRITE )
+-//gdebug = 0;
+- if (0 == ret) {
+- if (edu_write_verify(mtd, buffer, oobarea, offset)) {
+- BUG();
+- }
+- }
+-
+-#endif
+- return ret;
+-}
+-
+-// When buffer is nor aligned as per EDU requirement, use controller-write
+-static int (*brcmnand_posted_write_cache)(struct mtd_info*,
+- const void*, const u_char*, loff_t) = brcmnand_ctrl_posted_write_cache;
+-
+- #else //#ifndef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+-
+-/*
+- * Write completion after EDU_Read is called.
+- * Non-Queue mode
+- */
+-static int
+-brcmnand_edu_write_completion(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset, uint32_t intr_status, uint32_t physAddr)
++static int edu_write_verify(struct mtd_info *mtd,
++ const void* buffer, const u_char* oobarea, loff_t offset)
+ {
+ struct brcmnand_chip* chip = mtd->priv;
+- int comp;
+- int needBBT;
+- int ret;
++ static uint8_t sw_ecc[4];
++ static uint32_t read_oob[4];
++ static uint8_t write_oob[16];
++ uint8_t* oobpoi = (uint8_t*) &read_oob[0];
++ int ret = 0;
+
+-
+-#ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+- if (!(intr_status & HIF_INTR2_CTRL_READY)) {
+- printk("%s: Impossible, ctrl-ready asserted in interrupt handler\n", __FUNCTION__);
+- BUG();
+- }
+-#else
+- // Wait until flash is ready.
+- // Becareful here. Since this can be called in interrupt context,
+- // we cannot call sleep or schedule()
+- comp = brcmnand_EDU_write_is_complete(mtd, &needBBT);
+-
+- // Already done in interrupt handler
+- (void) dma_unmap_single(NULL, physAddr, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
+-#endif
+-
+- if (comp)
+- {
+- if (!needBBT)
+- {
+- ret = 0;
+- goto out;
++ if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
++ ret = brcmnand_ctrl_posted_read_cache(mtd, edu_write_buf, oobpoi, offset);
++ if (ret) {
++ printk("+++++++++++++++++++++++ %s: Read Verify returns %d\n", __FUNCTION__, ret);
++ return ret;
+ }
+- else
+- { // Need BBT
+-#if 1 //defined (ECC_CORRECTABLE_SIMULATION) || defined(ECC_UNCORRECTABLE_SIMULATION) || defined(WR_BADBLOCK_SIMULATION)
+- printk("%s: Marking bad block @%0llx\n", __FUNCTION__, offset);
+-#endif
+- ret = chip->block_markbad(mtd, offset);
+- ret = -EINVAL;
+- //ret = -EINVAL;
+- goto out;
++ if (0 != memcmp(buffer, edu_write_buf, 512)) {
++ printk("+++++++++++++++++++++++ %s: WRITE buffer differ with READ-Back buffer\n",
++ __FUNCTION__);
++ return (-1);
+ }
++ if (oobarea) {
++ if (memcmp(oobarea, oobpoi, 16)) {
++ printk("+++++++++++++++++++++++ %s: OOB comp failed\n", __FUNCTION__);
++ printk("In OOB:\n"); print_oobbuf(oobarea, 16);
++ printk("\nVerify OOB:\n"); print_oobbuf(oobpoi, 16);
++ }
++ }
++ return 0;
+ }
++
++ // Calculate the ECC
++ brcmnand_Hamming_ecc(buffer, sw_ecc);
+
+- //Write has timed out or read found bad block. TBD: Find out which is which
+- printk(KERN_INFO "%s: Timeout at offset %0llx\n", __FUNCTION__, offset);
+- // Marking bad block
+- if (needBBT) {
+- printk("%s: Marking bad block @%0llx\n", __FUNCTION__, offset);
+-
+- ret = chip->block_markbad(mtd, offset);
+- ret = -EINVAL;
+- //ret = -EINVAL;
+- goto out;
+- }
+- ret = -ETIMEDOUT;
++ // Read back the data, but first clear the internal cache first.
++ debug_clear_ctrl_cache(mtd);
+
+-out:
++in_verify = -1;
++ ret = brcmnand_ctrl_posted_read_cache(mtd, edu_write_buf, oobpoi, offset);
++in_verify = 0;
+
+-#if defined(EDU_DEBUG_5) // || defined( CONFIG_MTD_BRCMNAND_VERIFY_WRITE )
+-//gdebug = 0;
+- if (0 == ret) {
+- if (edu_write_verify(mtd, buffer, oobarea, offset)) {
+- BUG();
+- }
+- }
++ if (ret) {
++ printk("+++++++++++++++++++++++ %s: Read Verify returns %d\n", __FUNCTION__, ret);
++ return ret;
++ }
+
+-#endif
++ if (sw_ecc[0] != oobpoi[6] || sw_ecc[1] != oobpoi[7] || sw_ecc[2] != oobpoi[8]) {
++ printk("+++++++++++++++++++++++ %s: SWECC=%02x%02x%02x ReadOOB=%02x%02x%02x\n",
++ __FUNCTION__,
++ sw_ecc[0], sw_ecc[1], sw_ecc[2], oobpoi[6], oobpoi[7], oobpoi[8]);
++ return (-1);
++ }
++
++ // Verify the OOB if not NULL
++ if (oobarea) {
++ memcpy(write_oob, oobarea, 16);
++ write_oob[6] = sw_ecc[0];
++ write_oob[7] = sw_ecc[1];
++ write_oob[8] = sw_ecc[2];
++ if (memcmp(write_oob, oobpoi, 16)) {
++ printk("+++++++++++++++++++++++ %s: OOB comp failed\n", __FUNCTION__);
++ printk("In OOB:\n"); print_oobbuf(write_oob, 16);
++ printk("\nVerify OOB:\n"); print_oobbuf(oobpoi, 16);
++ }
++ }
+ return ret;
+ }
+
+
++#else
++#define edu_write_verify(...) (0)
++#endif
++
+ /**
+ * brcmnand_posted_write - [BrcmNAND Interface] Write a buffer to the flash cache
+ * Assuming brcmnand_get_device() has been called to obtain exclusive lock
+@@ -3307,14 +2783,12 @@
+ uint32_t* p32;
+ int i;
+ int ret;
+- int comp = 0;
+
+ struct brcmnand_chip* chip = mtd->priv;
+ int needBBT=0;
+ loff_t sliceOffset = offset & (~ (mtd->eccsize - 1));
+ uint32_t EDU_ldw;
+ int retries = 5;
+- uint32_t physAddr;
+
+ #ifdef WR_BADBLOCK_SIMULATION
+ unsigned long tmp = (unsigned long) offset;
+@@ -3333,7 +2807,7 @@
+ goto out;
+ }
+
+- if (unlikely(!EDU_buffer_OK(buffer, EDU_WRITE))) {
++ if (unlikely(!EDU_buffer_OK(buffer))) {
+ // EDU requires the buffer to be DW-aligned
+ PRINTK("%s: Buffer %p not suitable for EDU at %0llx, trying ctrl read op\n", __FUNCTION__, buffer, offset);
+ ret = brcmnand_ctrl_posted_write_cache(mtd, buffer, oobarea, offset);
+@@ -3362,26 +2836,23 @@
+
+ PLATFORM_IOFLUSH_WAR(); // Check if this line may be taken-out
+
++ //chip->ctrl_write(BCHP_NAND_CMD_START, OP_PROGRAM_PAGE);
+
+ if (ret & HIF_INTR2_EBI_TIMEOUT) {
+ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EBI_TIMEOUT);
+ }
+- ret = EDU_write(buffer, EDU_ldw, &physAddr);
+-
++ ret = EDU_write(buffer, EDU_ldw);
+ if (ret) {
+ // Nothing we can do, because, unlike read op, where we can just call the traditional read,
+ // here we may need to erase the flash first before we can write again.
+-//printk("EDU_write returns %d, trying ctrl write \n", ret);
+-// ret = brcmnand_ctrl_posted_write_cache(mtd, buffer, oobarea, offset);
++ ret = brcmnand_ctrl_posted_write_cache(mtd, buffer, oobarea, offset);
+ goto out;
+ }
+
+-//printk("EDU50\n");
++// printk("EDU50\n");
+
+ // Wait until flash is ready
+- comp = brcmnand_EDU_write_is_complete(mtd, &needBBT);
+-
+- (void) dma_unmap_single(NULL, physAddr, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
++ ret = brcmnand_EDU_write_is_complete(mtd, &needBBT);
+ }while (retries-- > 0 && ((ret == ERESTARTSYS) || (ret & HIF_INTR2_EBI_TIMEOUT)));
+
+ if (retries <= 0 && ((ret == ERESTARTSYS) || (ret & HIF_INTR2_EBI_TIMEOUT))) {
+@@ -3390,9 +2861,18 @@
+ goto out;
+ }
+
++#ifdef WR_BADBLOCK_SIMULATION
++ if((tmp == wrBadBlockFailLocation) && (bScanBypass_badBlock == 0))
++ {
++ wrFailLocationOffset.s.high = 0;
++ wrFailLocationOffset.s.low = wrBadBlockFailLocation;
++ printk("Creating new bad block @ %0llx\n", EDU_sprintf(brcmNandMsg, wrFailLocationOffset.ll, this->xor_invert_val));
++ needBBT = 1;
++ ret = 1;
++ }
++#endif
+
+-
+- if (comp)
++ if (ret)
+ {
+ if (!needBBT)
+ {
+@@ -3425,10 +2905,10 @@
+ ret = -ETIMEDOUT;
+
+ out:
++// printk("EDU99\n");
++//gdebug = 0;
+
+-
+ #if defined(EDU_DEBUG_5) // || defined( CONFIG_MTD_BRCMNAND_VERIFY_WRITE )
+-//gdebug = 0;
+ if (0 == ret) {
+ if (edu_write_verify(mtd, buffer, oobarea, offset)) {
+ BUG();
+@@ -3440,11 +2920,17 @@
+ return ret;
+ }
+
++#if 1
++
+ static int (*brcmnand_posted_write_cache)(struct mtd_info*,
+ const void*, const u_char*, loff_t) = brcmnand_EDU_posted_write_cache;
+- #endif
++#else
++/* Testing 1 2 3, use controller write */
++static int (*brcmnand_posted_write_cache)(struct mtd_info*,
++ const void*, const u_char*, loff_t) = brcmnand_ctrl_posted_write_cache;
++#endif
+
+-#else /* No EDU */
++#else
+ static int (*brcmnand_posted_write_cache)(struct mtd_info*,
+ const void*, const u_char*, loff_t) = brcmnand_ctrl_posted_write_cache;
+
+@@ -3564,7 +3050,7 @@
+ set_current_state(TASK_UNINTERRUPTIBLE);
+ add_wait_queue(&chip->wq, &wait);
+ spin_unlock(&chip->chip_lock);
+- if (!wr_preempt_en && !in_interrupt())
++ if (!wr_preempt_en)
+ schedule();
+ remove_wait_queue(&chip->wq, &wait);
+ }
+@@ -3616,7 +3102,6 @@
+ }
+
+
+-
+ /**
+ * brcmnand_read_page - {REPLACEABLE] hardware ecc based page read function
+ * @mtd: mtd info structure
+@@ -3722,7 +3207,7 @@
+ #ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+ static int brcmnand_refresh_blk(struct mtd_info *mtd, loff_t from)
+ {
+- struct brcmnand_chip *chip = mtd->priv;
++ struct brcmnand_chip *this = mtd->priv;
+ int i, j, k, numpages, ret, count = 0, nonecccount = 0;
+ uint8_t *blk_buf; /* Store one block of data (including OOB) */
+ unsigned int pg_idx, oob_idx;
+@@ -3737,9 +3222,9 @@
+
+
+ #if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_1_0
+- chip->ctrl_write(BCHP_NAND_ECC_CORR_EXT_ADDR, 0);
++ this->ctrl_write(BCHP_NAND_ECC_CORR_EXT_ADDR, 0);
+ #endif
+- chip->ctrl_write(BCHP_NAND_ECC_CORR_ADDR, 0);
++ this->ctrl_write(BCHP_NAND_ECC_CORR_ADDR, 0);
+
+ DEBUG(MTD_DEBUG_LEVEL3, "Inside %s: from=%0llx\n", __FUNCTION__, from);
+ printk(KERN_INFO "%s: Performing block refresh for correctable ECC error at %0llx\n",
+@@ -3747,9 +3232,9 @@
+ pg_idx = 0;
+ oob_idx = mtd->writesize;
+ numpages = mtd->erasesize/mtd->writesize;
+- block_size = (1 << chip->erase_shift);
++ block_size = (1 << this->erase_shift);
+ blkbegin = (from & (~(mtd->erasesize-1)));
+- realpage = blkbegin >> chip->page_shift;
++ realpage = blkbegin >> this->page_shift;
+
+ #ifdef CONFIG_MTD_BRCMNAND_EDU
+ if (!gblk_buf) {
+@@ -3777,7 +3262,7 @@
+ /* Read an entire block */
+ brcmnand_get_device(mtd, FL_READING);
+ for (i = 0; i < numpages; i++) {
+- ret = chip->read_page(mtd, blk_buf+pg_idx, blk_buf+oob_idx, realpage);
++ ret = brcmnand_read_page(mtd, blk_buf+pg_idx, blk_buf+oob_idx, realpage);
+ if (ret < 0) {
+ #ifndef CONFIG_MTD_BRCMNAND_EDU
+ BRCMNAND_free(blk_buf);
+@@ -3795,7 +3280,7 @@
+ if (unlikely(gdebug > 0)) {
+ printk("---> %s: Read -> erase\n", __FUNCTION__);
+ }
+- chip->state = FL_ERASING;
++ this->state = FL_ERASING;
+
+ /* Erase the block */
+ instr = kmalloc(sizeof(struct erase_info), GFP_KERNEL);
+@@ -3813,7 +3298,7 @@
+ instr->addr = blkbegin;
+ instr->len = mtd->erasesize;
+ if (unlikely(gdebug > 0)) {
+- printk("DEBUG -> erasing %0llx, %x %d\n",instr->addr, instr->len, chip->state);
++ printk("DEBUG -> erasing %0llx, %x %d\n",instr->addr, instr->len, this->state);
+ }
+ ret = brcmnand_erase_nolock(mtd, instr, 0);
+ if (ret) {
+@@ -3831,12 +3316,12 @@
+ /* Write the entire block */
+ pg_idx = 0;
+ oob_idx = mtd->writesize;
+- realpage = blkbegin >> chip->page_shift;
++ realpage = blkbegin >> this->page_shift;
+ if (unlikely(gdebug > 0)) {
+- printk("---> %s: Erase -> write ... %d\n", __FUNCTION__, chip->state);
++ printk("---> %s: Erase -> write ... %d\n", __FUNCTION__, this->state);
+ }
+- oobinfo = chip->ecclayout;
+- chip->state = FL_WRITING;
++ oobinfo = this->ecclayout;
++ this->state = FL_WRITING;
+ for (i = 0; i < numpages; i++) {
+ /* Avoid writing empty pages */
+ count = 0;
+@@ -3858,7 +3343,7 @@
+ }
+ /* Skip this page, but write the OOB */
+ if (count == j && nonecccount != k) {
+- ret = chip->write_page_oob(mtd, blk_buf + oob_idx, realpage);
++ ret = this->write_page_oob(mtd, blk_buf + oob_idx, realpage);
+ if (ret) {
+ #ifndef CONFIG_MTD_BRCMNAND_EDU
+ BRCMNAND_free(blk_buf);
+@@ -3875,7 +3360,7 @@
+ for (j = 0; j < oobinfo->eccbytes; j++) {
+ oobptr[oobinfo->eccpos[j]] = 0xff;
+ }
+- ret = chip->write_page(mtd, blk_buf+pg_idx, blk_buf+oob_idx, realpage);
++ ret = this->write_page(mtd, blk_buf+pg_idx, blk_buf+oob_idx, realpage);
+ if (ret) {
+ #ifndef CONFIG_MTD_BRCMNAND_EDU
+ BRCMNAND_free(blk_buf);
+@@ -3900,463 +3385,7 @@
+ #endif
+
+
+-#ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+-/*
+- * EDU ISR Implementation
+- */
+-
+-
+-/*
+- * Submit the read op, then return immediately, without waiting for completion.
+- * Assuming queue lock held (with interrupt disable).
+- */
+-static void
+-EDU_submit_read(eduIsrNode_t* req)
+-{
+- struct brcmnand_chip* chip = (struct brcmnand_chip*) req->mtd->priv;
+- uint32_t edu_status;
+-
+- // THT: TBD: Need to adjust for cache line size here, especially on 7420.
+- req->physAddr = dma_map_single(NULL, req->buffer, EDU_LENGTH_VALUE, DMA_FROM_DEVICE);
+-
+-if (edu_debug) PRINTK("%s: vBuff: %p physDev: %08x, PA=%08x\n", __FUNCTION__,
+-req->buffer, external_physical_device_address, phys_mem);
+-
+- spin_lock(&req->lock);
+-
+- req->edu_ldw = chip->ctrl_writeAddr(chip, req->offset, 0);
+- PLATFORM_IOFLUSH_WAR();
+-
+- //req->cmd = EDU_READ;
+- req->opComplete = ISR_OP_SUBMITTED;
+- req->status = 0;
+-
+- // We must also wait for Ctlr_Ready, otherwise the OOB is not correct, since we read the OOB bytes off the controller
+-
+- req->mask = HIF_INTR2_EDU_CLEAR_MASK|HIF_INTR2_CTRL_READY;
+- req->expect = HIF_INTR2_EDU_DONE;
+- // On error we also want Ctrlr-Ready because for COR ERR, the Hamming WAR depends on the OOB bytes.
+- req->error = HIF_INTR2_EDU_ERR;
+- req->intr = HIF_INTR2_EDU_DONE_MASK;
+- req->expired = jiffies + 3*HZ;
+-
+- edu_status = EDU_volatileRead(EDU_BASE_ADDRESS+EDU_STATUS);
+- // Enable HIF_INTR2 only when we submit the first job in double buffering scheme
+- if (0 == (edu_status & BCHP_EDU_STATUS_Active_MASK)) {
+- ISR_enable_irq(req);
+- }
+-
+- //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+- EDU_reset_done();
+-
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
+-
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_LENGTH, EDU_LENGTH_VALUE);
+-
+- EDU_waitForNoPendingAndActiveBit();
+-
+- EDU_issue_command(req->physAddr , req->edu_ldw, EDU_READ);
+-
+- spin_unlock(&req->lock);
+- return;
+-
+-}
+-
+-int EDU_submit_write(eduIsrNode_t* req)
+-{
+- struct brcmnand_chip* chip = (struct brcmnand_chip*) req->mtd->priv;
+- uint32_t edu_status;
+- uint32_t* p32;
+- int i;
+-
+- spin_lock(&req->lock);
+- // EDU is not a PCI device
+- // THT: TBD: Need to adjust for cache line size here, especially on 7420.
+- req->physAddr = dma_map_single(NULL, req->buffer, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
+-
+- if (!(req->physAddr)) {
+- spin_unlock(&req->lock);
+- return (-1);
+- }
+-
+-
+- req->edu_ldw = chip->ctrl_writeAddr(chip, req->offset, 0);
+-
+-
+- if (req->oobarea) {
+- p32 = (uint32_t*) req->oobarea;
+-if (gdebug) {printk("%s: oob=\n", __FUNCTION__); print_oobbuf(req->oobarea, 16);}
+- }
+- else {
+- // Fill with 0xFF if don't want to change OOB
+- p32 = (uint32_t*) &ffchars[0];
+- }
+-
+-// printk("EDU40\n");
+- for (i = 0; i < 4; i++) {
+- chip->ctrl_write(BCHP_NAND_SPARE_AREA_WRITE_OFS_0 + i*4, cpu_to_be32(p32[i]));
+- }
+-
+- PLATFORM_IOFLUSH_WAR(); // Check if this line may be taken-out
+-
+- /*
+- * Enable L2 Interrupt
+- */
+- //req->cmd = EDU_WRITE;
+- req->opComplete = ISR_OP_SUBMITTED;
+- req->status = 0;
+-
+- /* On write we wait for both DMA done|error and Flash Status */
+- req->mask = HIF_INTR2_EDU_CLEAR_MASK|HIF_INTR2_CTRL_READY;
+- req->expect = HIF_INTR2_EDU_DONE;
+- req->error = HIF_INTR2_EDU_ERR;
+- req->intr = HIF_INTR2_EDU_DONE_MASK|HIF_INTR2_CTRL_READY;
+-
+-
+- ISR_enable_irq(req);
+-
+- //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+- EDU_reset_done();
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
+-
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_LENGTH, EDU_LENGTH_VALUE);
+-
+- EDU_issue_command(req->physAddr, req->edu_ldw, EDU_WRITE); /* 1: Is a Read, 0 Is a Write */
+- spin_unlock(&req->lock);
+- return 0;
+-}
+-
+-
+-/*
+- * Submit the first entry that is in queued state,
+- * assuming queue lock has been held by caller.
+- *
+- * @doubleBuffering indicates whether we need to submit just 1 job or until EDU is full (double buffering)
+- * Return the number of job submitted (either 1 or zero), as we don't support doublebuffering yet.
+- *
+- * In current version (v3.3 controller), since EDU only have 1 register for EDU_ERR_STATUS,
+- * we can't really do double-buffering without losing the returned status of the previous read-op.
+- */
+-int
+-brcmnand_isr_submit_job(void)
+-{
+- uint32_t edu_pending;
+- eduIsrNode_t* req;
+- //struct list_head* node;
+- int numReq = 0;
+-
+-//printk("-->%s\n", __FUNCTION__);
+-//ISR_print_queue();
+-
+- list_for_each_entry(req, &gJobQ.jobQ, list) {
+- //req = container_of(node, eduIsrNode_t, list);
+- switch (req->opComplete) {
+- case ISR_OP_QUEUED:
+- edu_pending = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_STATUS);
+- if (!(BCHP_EDU_STATUS_Pending_MASK & edu_pending)) {
+- if (gJobQ.cmd == EDU_READ) {
+- EDU_submit_read(req);
+- }
+- else if (gJobQ.cmd == EDU_WRITE) {
+- EDU_submit_write(req);
+- }
+- else {
+- printk("%s: Invalid op\n", __FUNCTION__);
+- BUG();
+- }
+- numReq++;
+-#ifdef EDU_DOUBLE_BUFFER_READ
+- if (/*doubleBuffering &&*/ numReq < 2) {
+- continue;
+- }
+-#endif
+- }
+-PRINTK("<-- %s: numReq=%d\n", __FUNCTION__, numReq);
+- return numReq;
+-
+- case ISR_OP_COMPLETED:
+- case ISR_OP_SUBMITTED:
+- case ISR_OP_NEED_WAR:
+- case ISR_OP_TIMEDOUT:
+- /* next entry */
+- continue;
+- }
+- }
+-PRINTK("<-- %s: numReq=%d\n", __FUNCTION__, numReq);
+- return numReq;
+-}
+-
+-/*
+- * Queue the entire page, then wait for completion
+- */
+-static int
+-brcmnand_isr_read_page(struct mtd_info *mtd,
+- uint8_t *outp_buf, uint8_t* outp_oob, uint64_t page)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+- int eccstep;
+- int dataRead = 0;
+- int oobRead = 0;
+- int ret = 0;
+- uint64_t offset = ((uint64_t) page) << chip->page_shift;
+- uint32_t edu_pending;
+- int submitted = 0;
+- unsigned long flags;
+-
+-//if (1/* (int) offset <= 0x2000 /*gdebug > 3 */) {
+-//printk("-->%s, offset=%08x\n", __FUNCTION__, (uint32_t) offset);}
+-if (gdebug > 3 ) {
+-printk("-->%s, page=%0llx, buffer=%p\n", __FUNCTION__, page, outp_buf);}
+-
+-
+-#if 0 // No need to check, we are aligned on a page
+- if (unlikely(offset - sliceOffset)) {
+- printk(KERN_ERR "%s: offset %0llx is not cache aligned, sliceOffset=%0llx, CacheSize=%d\n",
+- __FUNCTION__, offset, sliceOffset, mtd->eccsize);
+- ret = -EINVAL;
+- goto out;
+- }
+-#endif
+-
+-
+- if (unlikely(!EDU_buffer_OK(outp_buf, EDU_READ)))
+- {
+-if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
+- /* EDU does not work on non-aligned buffers */
+- ret = brcmnand_read_page(mtd, outp_buf, outp_oob, page);
+- return (ret);
+- }
+-
+- chip->pagebuf = page;
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (!list_empty(&gJobQ.jobQ)) {
+- printk("%s: Start read page but job queue not empty\n", __FUNCTION__);
+-//ISR_print_queue();
+- BUG();
+- }
+- gJobQ.cmd = EDU_READ;
+- gJobQ.needWakeUp = 0;
+-
+- for (eccstep = 0; eccstep < chip->eccsteps && ret == 0; eccstep++) {
+- eduIsrNode_t* req;
+- /*
+- * Queue the 512B sector read, then read the EDU pending bit,
+- * and issue read command, if EDU is available for read.
+- */
+- req = ISR_queue_read_request(mtd, &outp_buf[dataRead],
+- outp_oob ? &outp_oob[oobRead] : NULL,
+- offset + dataRead);
+-
+- dataRead += chip->eccsize;
+- oobRead += chip->eccOobSize;
+- }
+- //BUG_ON(submitted != 1);
+-
+-
+-
+- /* Kick start it. The ISR will submit the next job */
+- if (!submitted) {
+- submitted = brcmnand_isr_submit_job();
+- }
+-
+- while (!list_empty(&gJobQ.jobQ)) {
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- ret = ISR_wait_for_queue_completion();
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return ret;
+-}
+-
+-
+-/*
+- * Queue several pages for small page SLC, then wait for completion,
+- * assuming that
+- * (1) offset is aligned on a 512B boundary
+- * (2) that outp_buf is aligned on a 32B boundary.
+- * (3) Not in raw mode
+- * This routine only works when ECC-size = Page-Size (Small SLC flashes), and relies on the fact
+- * that the internal buffer can hold several data+OOB buffers for several small pages at once.
+- *
+- * The OOB are read into chip->buffers->OOB.
+- * The Queue Size and chip->buffers->oob are chosen such that the OOB
+- * will all fit inside the buffers.
+- * After a batch of jobs is completed, the OOB is then copied to the output OOB parameter.
+- * To keep it simple stupid, this routine cannot handle Raw mode Read.
+- *
+- * Arguments:
+- * @mtd: MTD handle
+- * @outp_buf Data buffer, passed from file system driver
+- * @inoutpp_oob Address of OOB buffer, passed INOUT from file system driver
+- * @startPage page 0 of batch
+- * @numPages nbr of pages in batch
+- * @ops MTD ops from file system driver. We only look at the OOB mode (raw vs auto vs inplace)
+- */
+-static int
+-brcmnand_isr_read_pages(struct mtd_info *mtd,
+- uint8_t *outp_buf, uint8_t** inoutpp_oob, uint64_t startPage, int numPages,
+- struct mtd_oob_ops *ops)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+- int eccstep;
+- int dataRead = 0;
+- int oobRead = 0;
+- int ret = 0;
+- uint64_t offset = ((uint64_t) startPage) << chip->page_shift;
+- uint32_t edu_pending;
+- int submitted = 0;
+- unsigned long flags;
+- int page;
+- u_char* oob = inoutpp_oob ? *inoutpp_oob : NULL;
+- u_char* oobpoi = NULL;
+- u_char* buf = outp_buf;
+-
+-
+- /* Paranoia */
+- if (chip->pageSize != chip->eccsize) {
+- printk("%s: Can only be called on small page flash\n", __FUNCTION__);
+- BUG();
+- }
+-
+- if (ops->mode == MTD_OOB_RAW) {
+- printk("%s: Can only be called when not in RAW mode\n", __FUNCTION__);
+- BUG();
+- }
+-#ifdef DEBUG_ISR
+-printk("-->%s: mtd=%p, buf=%p, &oob=%p, oob=%p\n", __FUNCTION__,
+-mtd, outp_buf, inoutpp_oob, inoutpp_oob? *inoutpp_oob: NULL);
+-#endif
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (!list_empty(&gJobQ.jobQ)) {
+- printk("%s: Start read page but job queue not empty\n", __FUNCTION__);
+-//ISR_print_queue();
+- BUG();
+- }
+- gJobQ.cmd = EDU_READ;
+- gJobQ.needWakeUp = 0;
+-
+- if (inoutpp_oob && *inoutpp_oob) {
+- // In batch mode, read OOB into internal OOB buffer first.
+- // This pointer will be advanced because oob_transfer depends on it.
+- chip->oob_poi= BRCMNAND_OOBBUF(chip->buffers);
+- oobpoi = chip->oob_poi; // This pointer remains fixed
+- }
+-//gdebug=4;
+- for (page = 0; page < numPages && ret == 0; page++) {
+- eduIsrNode_t* req;
+-
+- req = ISR_queue_read_request(mtd, buf,
+- (inoutpp_oob && *inoutpp_oob) ? &oobpoi[oobRead] : NULL,
+- offset + dataRead);
+-
+- dataRead += chip->eccsize;
+- oobRead += chip->eccOobSize;
+- buf += chip->eccsize;
+- }
+-//gdebug=0;
+- //BUG_ON(submitted != 1);
+-
+- /* Kick start it. The ISR will submit the next job */
+- if (!submitted) {
+- submitted = brcmnand_isr_submit_job();
+- }
+-
+- while (!list_empty(&gJobQ.jobQ)) {
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- ret = ISR_wait_for_queue_completion();
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+-
+- if (ret) {
+- /* Abort, and return error to file system */
+- return ret;
+- }
+-
+-
+- /* Format OOB, from chip->OOB buffers */
+-
+- buf = outp_buf;
+- oob = (inoutpp_oob && *inoutpp_oob) ? *inoutpp_oob : NULL;
+- dataRead = 0;
+- oobRead = 0;
+-PRINTK("%s: B4 transfer OOB: buf=%08x, chip->buffers=%08x, offset=%08llx\n",
+-__FUNCTION__, (uint32_t) buf, chip->buffers, offset + dataRead);
+-
+- // Reset oob_poi to beginning of OOB buffer.
+- // This will get advanced, cuz brcmnand_transfer_oob depends on it.
+- chip->oob_poi = BRCMNAND_OOBBUF(chip->buffers);
+- // oobpoi pointer does not change in for loop
+- oobpoi = chip->oob_poi;
+-
+- for (page=0; page < numPages && ret == 0; page++) {
+- u_char* newoob = NULL;
+-
+-#ifdef EDU_DEBUG_4 /* Read verify */
+- ret = edu_read_verify(mtd, buf,
+- (inoutpp_oob && *inoutpp_oob) ? &oobpoi[oobRead] : NULL,
+- offset + dataRead);
+-
+- if (ret) BUG();
+-#endif
+-
+- if (unlikely(inoutpp_oob && *inoutpp_oob)) {
+- newoob = brcmnand_transfer_oob(chip, oob, ops);
+- chip->oob_poi += chip->eccOobSize;
+- oob = newoob;
+- // oobpoi stays the same
+- }
+-
+- dataRead += chip->eccsize;
+- oobRead += chip->eccOobSize;
+- buf += chip->eccsize;
+-
+- } /* for */
+-
+- if (unlikely(inoutpp_oob && *inoutpp_oob)) {
+- *inoutpp_oob = oob;
+- }
+-
+-PRINTK("<-- %s\n", __FUNCTION__);
+-
+- return 0;
+-}
+-
+-
+ /**
+- * brcmnand_isr_read_page_oob - {REPLACABLE] hardware ecc based page read function
+- * @mtd: mtd info structure
+- * @chip: nand chip info structure. The OOB buf is stored in the oob_poi ptr on return
+- *
+- * Not for syndrome calculating ecc controllers which need a special oob layout
+- */
+-static int
+-brcmnand_isr_read_page_oob(struct mtd_info *mtd,
+- uint8_t* outp_oob, uint64_t page)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+-
+- /*
+- * if BCH codes, use full page read to activate ECC on OOB area
+- */
+- if (chip->ecclevel != BRCMNAND_ECC_HAMMING && chip->ecclevel != BRCMNAND_ECC_DISABLE) {
+- return brcmnand_isr_read_page(mtd, chip->buffers->databuf, outp_oob, page);
+- }
+-
+- else {
+- return brcmnand_read_page_oob(mtd, outp_oob, page);
+- }
+-}
+-
+-
+-
+-
+-#endif
+-
+-
+-/**
+ * brcmnand_do_read_ops - [Internal] Read data with ECC
+ *
+ * @mtd: MTD device structure
+@@ -4390,13 +3419,17 @@
+ //int sndcmd = 1;
+ int ret = 0;
+ uint32_t readlen = ops->len;
+- uint32_t oobread = 0;
+ uint8_t *bufpoi, *oob, *buf;
+- int numPages;
+- int buffer_aligned = 0;
+-//int nonBatch = 0;
+
+
++if (gdebug > 3 )
++{
++printk("-->%s, buf=%p, oob=%p, offset=%0llx, len=%d, end=%0llx\n", __FUNCTION__,
++ ops->datbuf, ops->oobbuf, from, readlen, from+readlen);
++printk("chip->buffers=%p, chip->oob=%p\n",
++ chip->buffers, BRCMNAND_OOBBUF(chip->buffers));
++}
++
+ stats = mtd->ecc_stats;
+
+ // THT: BrcmNAND controller treats multiple chip as one logical chip.
+@@ -4407,7 +3440,6 @@
+ //page = realpage & chip->pagemask;
+
+ col = mtd64_ll_low(from & (mtd->writesize - 1));
+-
+ #ifndef EDU_DEBUG_1
+ /* Debugging 12/27/08 */
+ chip->oob_poi = BRCMNAND_OOBBUF(chip->buffers);
+@@ -4419,91 +3451,38 @@
+ buf = ops->datbuf;
+ oob = ops->oobbuf;
+
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+- /*
+- * Group several pages for submission for small page NAND
+- */
+- if (chip->pageSize == chip->eccsize && ops->mode != MTD_OOB_RAW) {
+- while(1) {
+-//nonBatch = 0;
+- bytes = min(mtd->writesize - col, readlen);
+- // (1) Writing partial or full page
+- aligned = (bytes == mtd->writesize);
++ while(1) {
++ bytes = min(mtd->writesize - col, readlen);
++ aligned = (bytes == mtd->writesize);
+
+- // If writing full page, use user buffer, otherwise, internal buffer
++ /* Is the current page in the buffer ? */
++ if ( 1 /* (int64_t) realpage != chip->pagebuf */ || oob) {
++#ifndef EDU_DEBUG_1
+ bufpoi = aligned ? buf : chip->buffers->databuf;
+-
+- // (2) Buffer satisfies 32B alignment required by EDU?
+- buffer_aligned = EDU_buffer_OK(bufpoi, EDU_READ);
+-
+- // (3) Batch mode if writing more than 1 pages.
+- numPages = min(MAX_JOB_QUEUE_SIZE, readlen>>chip->page_shift);
+-
+- // Only do Batch mode if all 3 conditions are satisfied.
+- if (!aligned || !buffer_aligned || numPages <= 1) {
+- /* Submit 1 page at a time */
+-
+- numPages = 1; // We count partial page read
+- ret = chip->read_page(mtd, bufpoi, chip->oob_poi, realpage);
+-
+- if (ret < 0)
+- break;
+-
+- /* Transfer not aligned data */
+- if (!aligned) {
+- chip->pagebuf = realpage;
+- memcpy(buf, &bufpoi[col], bytes);
+- }
+- buf += bytes;
+-
+- if (unlikely(oob)) {
+- /* if (ops->mode != MTD_OOB_RAW) */
+- oob = brcmnand_transfer_oob(chip, oob, ops);
+-
+- }
+-
+- }
+- else {
+- /*
+- * Batch job possible, all 3 conditions are met
+- * bufpoi = Data buffer from FS driver
+- * oob = OOB buffer from FS driver
+- */
+- bytes = numPages*mtd->writesize;
+-
+- ret = brcmnand_isr_read_pages(mtd, bufpoi, oob? &oob : NULL, realpage, numPages, ops);
+-
+- if (ret < 0)
+- break;
+-
+- buf += bytes; /* Advance Read pointer */
+-
+- }
+-
+-
+- readlen -= bytes;
+-
+- if (!readlen)
+- break;
+-
+- /* For subsequent reads align to page boundary. */
+- col = 0;
+- /* Increment page address */
+- realpage += numPages;
+- }
+- goto out;
+- }
+- else
++#else
++/* EDU Testing */
++ aligned=0;
++ bufpoi = &debug_dbuf.databuf;
++ // rely on size of buffer to be 4096
++ memcpy(&bufpoi[mtd->writesize], debug_sig, 1+strlen(debug_sig));
+ #endif
+- {
+- while(1) {
+- bytes = min(mtd->writesize - col, readlen);
+- aligned = (bytes == mtd->writesize);
+-
+- bufpoi = aligned ? buf : chip->buffers->databuf;
++if (gdebug > 3 )
++ printk("%s: aligned=%d, buf=%p, bufpoi=%p, oob_poi=%p, bytes=%d, readlen=%d\n",
++ __FUNCTION__, aligned, buf, bufpoi, chip->oob_poi, bytes, readlen);
+
++//gdebug=4;
+ ret = chip->read_page(mtd, bufpoi, chip->oob_poi, realpage);
++//gdebug=0;
++#ifdef EDU_DEBUG_1
++ if (0 != strcmp(&bufpoi[mtd->writesize], debug_sig)) {
++ printk("$$$$$$$$$$$$$$ Memory smash at end of buffer at %0llx, expect=%s\n",
++ from, debug_sig);
++ printk(".... found\n"); print_oobbuf(&bufpoi[mtd->writesize], 1+strlen(debug_sig));
++ }
++ if (buf) memcpy(buf, &bufpoi[col], bytes);
++ if (oob) memcpy(oob, chip->oob_poi, mtd->oobsize);
+
++#endif
+ if (ret < 0)
+ break;
+
+@@ -4524,25 +3503,45 @@
+ }
+ }
+
++#if 0
++ if (!(chip->options & NAND_NO_READRDY)) {
++ /*
++ * Apply delay or wait for ready/busy pin. Do
++ * this before the AUTOINCR check, so no
++ * problems arise if a chip which does auto
++ * increment is marked as NOAUTOINCR by the
++ * board driver.
++ */
++ if (!chip->dev_ready)
++ udelay(chip->chip_delay);
++ else
++ nand_wait_ready(mtd);
++ }
++#endif
++ } else {
++printk("%s: Should never get here\n", __FUNCTION__);
++BUG();
++ memcpy(buf, chip->buffers->databuf + col, bytes);
++ buf += bytes;
++ }
+
+- readlen -= bytes;
++ readlen -= bytes;
+
+- if (!readlen)
+- break;
++ if (!readlen)
++ break;
+
+- /* For subsequent reads align to page boundary. */
+- col = 0;
+- /* Increment page address */
+- realpage++;
++ /* For subsequent reads align to page boundary. */
++ col = 0;
++ /* Increment page address */
++ realpage++;
+
+- }
+ }
+-
+-out:
+-//gdebug=0;
+
+ ops->retlen = ops->len - (size_t) readlen;
+
++//#ifndef EDU_DEBUG_1
++if (gdebug > 3 ) printk("<-- %s, ret=%d\n", __FUNCTION__, ret);
++//#endif
+
+ if (ret)
+ return ret;
+@@ -4577,7 +3576,7 @@
+ DEBUG(MTD_DEBUG_LEVEL3, "%s: from=%0llx\n", __FUNCTION__, from);
+
+ if (gdebug > 3 ) {
+-printk("-->%s, offset=%0llx, len=%08x\n", __FUNCTION__, from, len);}
++printk("-->%s, offset=%0llx\n", __FUNCTION__, from);}
+
+
+ /* Do not allow reads past end of device */
+@@ -4610,20 +3609,11 @@
+ if (likely(chip->cet)) {
+ if (likely(chip->cet->flags != BRCMNAND_CET_DISABLED)) {
+ if (brcmnand_cet_update(mtd, from, &status) == 0) {
+-
+-/*
+- * PR57272: Provide workaround for BCH-n ECC HW bug when # error bits >= 4
+- * We will not mark a block bad when the a correctable error already happened on the same page
+- */
+-#if CONFIG_MTD_BRCMNAND_VERSION <= CONFIG_MTD_BRCMNAND_VERS_3_4
+- ret = 0;
+-#else
+ if (status) {
+ ret = -EUCLEAN;
+ } else {
+ ret = 0;
+ }
+-#endif
+ }
+ if (gdebug > 3) {
+ printk(KERN_INFO "DEBUG -> %s ret = %d, status = %d\n", __FUNCTION__, ret, status);
+@@ -4879,7 +3869,7 @@
+ //struct nand_oobinfo noauto_oobsel;
+
+ printk("Comparison Failed\n");
+- print_diagnostics(chip);
++ print_diagnostics();
+
+ //noauto_oobsel = *oobsel;
+ //noauto_oobsel.useecc = MTD_NANDECC_PLACEONLY;
+@@ -4917,7 +3907,7 @@
+ {
+ struct brcmnand_chip * chip = mtd->priv;
+
+- int ret = 0; // Matched
++ int ret = 0;
+ //int ooblen=0, datalen=0;
+ //int complen;
+ u_char* oobbuf = v_oob_buf;
+@@ -4929,12 +3919,7 @@
+
+ if (gdebug > 3) printk("-->%s: addr=%0llx\n", __FUNCTION__, addr);
+
+- /*
+- * Only do it for Hamming codes because
+- * (1) We can't do it for BCH until we can read the full OOB area for BCH-8
+- * (2) OOB area is included in ECC calculation for BCH, so no need to check it
+- * separately.
+- */
++ /* Only do it for Hamming codes */
+ if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+ return 0;
+ }
+@@ -4942,7 +3927,7 @@
+ #if 1
+ page = ((uint64_t) addr) >> chip->page_shift;
+ // Must read entire page
+- ret = chip->read_page(mtd, vbuf, oobbuf, page);
++ ret = brcmnand_read_page(mtd, vbuf, oobbuf, page);
+ if (ret) {
+ printk(KERN_ERR "%s: brcmnand_read_page at %08x failed ret=%d\n",
+ __FUNCTION__, (unsigned int) addr, ret);
+@@ -4967,28 +3952,12 @@
+ brcmnand_Hamming_ecc(&dbuf[pageOffset], sw_ecc);
+
+ if (sw_ecc[0] != oobp[6] || sw_ecc[1] != oobp[7] || sw_ecc[2] != oobp[8]) {
+- if (oobp[6] == 0xff && oobp[7] == 0xff && oobp[8] == 0xff
+- && sw_ecc[0] == 0 && sw_ecc[1] == 0 && sw_ecc[2] == 0)
+- ; // OK
+- else {
+- printk("%s: Verification failed at %0llx. HW ECC=%02x%02x%02x, SW ECC=%02x%02x%02x\n",
+- __FUNCTION__, addr,
+- oobp[6], oobp[7], oobp[8], sw_ecc[0], sw_ecc[1], sw_ecc[2]);
+- ret = 1;
+- break;
+- }
++ printk("%s: Verification failed at %0llx. HW ECC=%02x%02x%02x, SW ECC=%02x%02x%02x\n",
++ __FUNCTION__, addr,
++ oobp[6], oobp[7], oobp[8], sw_ecc[0], sw_ecc[1], sw_ecc[2]);
++ ret = 1;
++ break;
+ }
+-
+- // Verify the OOB if not NULL
+- if (inp_oob) {
+- if (memcmp(&inp_oob[oobOffset], oobp, 6) || memcmp(&inp_oob[oobOffset+9], &oobp[9],7)) {
+- printk("+++++++++++++++++++++++ %s: OOB comp Hamming failed\n", __FUNCTION__);
+- printk("In OOB:\n"); print_oobbuf(&inp_oob[oobOffset], 16);
+- printk("\nVerify OOB:\n"); print_oobbuf(oobp, 16);
+- ret = (-2);
+- break;
+- }
+- }
+ }
+
+ return ret;
+@@ -5062,8 +4031,7 @@
+ * @page: page number to write
+ * @cached: cached programming [removed]
+ */
+-static int
+-brcmnand_write_page(struct mtd_info *mtd,
++static int brcmnand_write_page(struct mtd_info *mtd,
+ const uint8_t *inp_buf, const uint8_t* inp_oob, uint64_t page)
+ {
+ struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+@@ -5094,206 +4062,17 @@
+ }
+
+ // TBD
+-#ifdef BRCMNAND_WRITE_VERIFY
+-if (0 == ret) {
+-int vret;
++if (0) {
++int save_debug = gdebug;
+ //gdebug = 0;
+- vret = brcmnand_verify_page(mtd, offset, inp_buf, mtd->writesize, inp_oob, chip->eccOobSize);
++ ret = brcmnand_verify_page(mtd, offset, inp_buf, mtd->writesize, inp_oob, chip->eccOobSize);
+ //gdebug=save_debug;
+- if (vret) BUG();
+ }
+-#endif
+-
+
+ return ret;
+ }
+
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+
+-/*
+- * Queue the entire page, then wait for completion
+- */
+-static int
+-brcmnand_isr_write_page(struct mtd_info *mtd,
+- const uint8_t *inp_buf, const uint8_t* inp_oob, uint64_t page)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+- int eccstep;
+- int dataWritten = 0;
+- int oobWritten = 0;
+- int ret = 0;
+- uint64_t offset = page << chip->page_shift;
+-
+- uint32_t edu_pending;
+- int submitted = 0;
+- unsigned long flags;
+-
+-if (gdebug > 3 ) {
+-printk("-->%s, page=%0llx\n", __FUNCTION__, page);}
+-
+-
+-#if 0 // No need to check, we are aligned on a page
+- if (unlikely(offset - sliceOffset)) {
+- printk(KERN_ERR "%s: offset %0llx is not cache aligned, sliceOffset=%0llx, CacheSize=%d\n",
+- __FUNCTION__, offset, sliceOffset, mtd->eccsize);
+- ret = -EINVAL;
+- goto out;
+- }
+-#endif
+-
+-
+- if (unlikely(!EDU_buffer_OK(inp_buf, EDU_WRITE)))
+- {
+-if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
+- /* EDU does not work on non-aligned buffers */
+- ret = brcmnand_write_page(mtd, inp_buf, inp_oob, page);
+- return (ret);
+- }
+-
+- chip->pagebuf = page;
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (!list_empty(&gJobQ.jobQ)) {
+- printk("%s: Start read page but job queue not empty\n", __FUNCTION__);
+- BUG();
+- }
+- gJobQ.cmd = EDU_WRITE;
+- gJobQ.needWakeUp = 0;
+-
+-
+- for (eccstep = 0; eccstep < chip->eccsteps && ret == 0; eccstep++) {
+- eduIsrNode_t* req;
+- /*
+- * Queue the 512B sector read, then read the EDU pending bit,
+- * and issue read command, if EDU is available for read.
+- */
+- req = ISR_queue_write_request(mtd, &inp_buf[dataWritten],
+- inp_oob ? &inp_oob[oobWritten] : NULL,
+- offset + dataWritten);
+-
+- dataWritten += chip->eccsize;
+- oobWritten += chip->eccOobSize;
+- }
+-
+-
+- /*
+- * Kick start it. The ISR will submit the next job
+- */
+- if (!submitted) {
+- submitted = brcmnand_isr_submit_job();
+- }
+-
+- while (!list_empty(&gJobQ.jobQ)) {
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- ret = ISR_wait_for_queue_completion();
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return ret;
+-
+-}
+-
+-/*
+- * Queue the several pages, then wait for completion
+- * For 512B page sizes only.
+- */
+-static int
+-brcmnand_isr_write_pages(struct mtd_info *mtd,
+- const uint8_t *inp_buf, const uint8_t* inp_oob, uint64_t startPage, int numPages)
+-{
+- struct brcmnand_chip *chip = (struct brcmnand_chip*) mtd->priv;
+- int eccstep;
+- int dataWritten = 0;
+- int oobWritten = 0;
+- int ret = 0;
+- uint64_t offset = startPage << chip->page_shift;
+- int page;
+-
+- uint32_t edu_pending;
+- int submitted = 0;
+- unsigned long flags;
+-
+-#if 0
+- /* Already checked by caller */
+- if (unlikely(!EDU_buffer_OK(inp_buf, EDU_WRITE)))
+- {
+-if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, trying non-EDU read\n", __FUNCTION__);
+- /* EDU does not work on non-aligned buffers */
+- ret = brcmnand_write_page(mtd, inp_buf, inp_oob, startPage);
+- return (ret);
+- }
+-#endif
+- /* Paranoia */
+- if (chip->pageSize != chip->eccsize) {
+- printk("%s: Can only be called on small page flash\n", __FUNCTION__);
+- BUG();
+- }
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (!list_empty(&gJobQ.jobQ)) {
+- printk("%s: Start read page but job queue not empty\n", __FUNCTION__);
+- BUG();
+- }
+- gJobQ.cmd = EDU_WRITE;
+- gJobQ.needWakeUp = 0;
+-
+-//gdebug=4;
+- for (page = 0; page < numPages && ret == 0; page++) {
+- eduIsrNode_t* req;
+- /*
+- * Queue the 512B sector read, then read the EDU pending bit,
+- * and issue read command, if EDU is available for read.
+- */
+-
+- req = ISR_queue_write_request(mtd, &inp_buf[dataWritten],
+- inp_oob ? &inp_oob[oobWritten] : NULL,
+- offset + dataWritten);
+-
+- dataWritten += chip->eccsize;
+- oobWritten += chip->eccOobSize;
+- }
+-//gdebug=0;
+-
+-
+- /*
+- * Kick start it. The ISR will submit the next job
+- * We do it here, in order to avoid having to obtain the queue lock
+- * inside the ISR, in preparation for an RCU implementation.
+- */
+- if (!submitted) {
+- submitted = brcmnand_isr_submit_job();
+- }
+-
+- while (!list_empty(&gJobQ.jobQ)) {
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- ret = ISR_wait_for_queue_completion();
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+-
+-
+-#ifdef EDU_DEBUG_5
+-/* Verify */
+- dataWritten = 0;
+- oobWritten = 0;
+- for (page = 0; page < numPages && ret == 0; page++) {
+- ret = edu_write_verify(mtd, &inp_buf[dataWritten],
+- inp_oob ? &inp_oob[oobWritten] : NULL,
+- offset + dataWritten);
+- if (ret) BUG();
+- dataWritten += chip->eccsize;
+- oobWritten += chip->eccOobSize;
+- }
+-#endif
+- return ret;
+-
+-}
+-
+-
+-#endif
+-
+-
+-
+ /**
+ * brcmnand_fill_oob - [Internal] Transfer client buffer to oob
+ * @chip: nand chip structure
+@@ -5307,7 +4086,6 @@
+ {
+ size_t len = ops->ooblen;
+
+-
+ switch(ops->mode) {
+
+ case MTD_OOB_PLACE:
+@@ -5320,8 +4098,6 @@
+ uint32_t boffs = 0, woffs = ops->ooboffs;
+ size_t bytes = 0;
+
+- memset(chip->oob_poi + ops->ooboffs, 0xff, chip->eccOobSize-ops->ooboffs);
+-
+ for(; free->length && len; free++, len -= bytes) {
+ /* Write request not from offset 0 ? */
+ if (unlikely(woffs)) {
+@@ -5370,8 +4146,6 @@
+ uint8_t *buf = ops->datbuf;
+ int bytes = mtd->writesize;
+ int ret = 0;
+- int numPages;
+- int buffer_aligned = 0;
+
+ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+
+@@ -5392,8 +4166,13 @@
+ chip->select_chip(mtd, chipnr);
+ */
+
++#if 0
++/* THT TBD */
++ /* Check, if it is write protected */
++ if (nand_check_wp(mtd))
++ return -EIO;
++#endif
+
+-
+ realpage = to >> chip->page_shift;
+ //page = realpage & chip->pagemask;
+ blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
+@@ -5414,70 +4193,15 @@
+ chip->oob_poi = NULL;
+ }
+
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+- /* Buffer must be aligned for EDU */
+- buffer_aligned = EDU_buffer_OK(buf, EDU_WRITE);
+-
+-#else /* Dont care */
+- buffer_aligned = 0;
+-#endif
+-
+ while(1) {
+-
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+- /*
+- * Group several pages for submission for small page NAND
+- */
+- numPages = min(MAX_JOB_QUEUE_SIZE, writelen>>chip->page_shift);
+-
+- // If Batch mode
+- if (buffer_aligned && numPages > 1 && chip->pageSize == chip->eccsize) {
+- int j;
+-
+- /* Submit min(queueSize, len/512B) at a time */
+- //numPages = min(MAX_JOB_QUEUE_SIZE, writelen>>chip->page_shift);
+- bytes = chip->eccsize*numPages;
+-
+- if (unlikely(oob)) {
+- //u_char* newoob;
+- for (j=0; j<numPages; j++) {
+- oob = brcmnand_fill_oob(chip, oob, ops);
+- /* THT: oob now points to where to read next,
+- * chip->oob_poi contains the OOB to be written
+- */
+- /* In batch mode, we advance the OOB pointer to the next OOB slot
+- * using chip->oob_poi
+- */
+- chip->oob_poi += chip->eccOobSize;
+- }
+- // Reset chip->oob_poi to beginning of OOB buffer for submission.
+- chip->oob_poi = BRCMNAND_OOBBUF(chip->buffers);
+- }
+-
+- ret = brcmnand_isr_write_pages(mtd, buf, chip->oob_poi, realpage, numPages);
+-
++ if (unlikely(oob)) {
++ oob = brcmnand_fill_oob(chip, oob, ops);
++ /* THT: oob now points to where to read next,
++ * chip->oob_poi contains the OOB to be written
++ */
+ }
+-
+- else /* Else submit one page at a time */
+
+-#endif
+- /* Submit one page at a time */
+- {
+- numPages = 1;
+- bytes = mtd->writesize;
+-
+- if (unlikely(oob)) {
+- chip->oob_poi = BRCMNAND_OOBBUF(chip->buffers);
+- oob = brcmnand_fill_oob(chip, oob, ops);
+- /* THT: oob now points to where to read next,
+- * chip->oob_poi contains the OOB to be written
+- */
+- }
+-
+- ret = chip->write_page(mtd, buf, chip->oob_poi, realpage);
+-
+- }
+-
++ ret = chip->write_page(mtd, buf, chip->oob_poi, realpage);
+ if (ret)
+ break;
+
+@@ -5486,9 +4210,21 @@
+ break;
+
+ buf += bytes;
+- realpage += numPages;
++ realpage++;
++
++#if 0
++ page = realpage & chip->pagemask;
++ /* Check, if we cross a chip boundary */
++ if (!page) {
++ chipnr++;
++ chip->select_chip(mtd, -1);
++ chip->select_chip(mtd, chipnr);
++ }
++#endif
+ }
+
++ if (unlikely(oob))
++ memset(chip->oob_poi, 0xff, mtd->oobsize);
+
+ ops->retlen = ops->len - writelen;
+ DEBUG(MTD_DEBUG_LEVEL3, "<-- %s\n", __FUNCTION__);
+@@ -6593,29 +5329,12 @@
+ */
+ static void brcmnand_adjust_timings(struct brcmnand_chip *this, brcmnand_chip_Id* chip)
+ {
+- unsigned long nand_timing1 = this->ctrl_read(BCHP_NAND_TIMING_1);
+- unsigned long nand_timing1_b4;
+- unsigned long nand_timing2 = this->ctrl_read(BCHP_NAND_TIMING_2);
+- unsigned long nand_timing2_b4;
+- extern uint32_t gNandTiming1;
+- extern uint32_t gNandTiming2;
+-
+- /*
+- * Override database values with kernel command line values
+- */
+- if (0 != gNandTiming1 || 0 != gNandTiming2) {
+- if (0 != gNandTiming1) {
+- chip->timing1 = gNandTiming1;
+- //this->ctrl_write(BCHP_NAND_TIMING_1, gNandTiming1);
+- }
+- if (0 != gNandTiming2) {
+- chip->timing2 = gNandTiming2;
+- //this->ctrl_write(BCHP_NAND_TIMING_2, gNandTiming2);
+- }
+- //return;
+- }
+-
+- // Adjust NAND timings from database or command line
++ unsigned long nand_timing1 = this->ctrl_read(BCHP_NAND_TIMING_1);
++ unsigned long nand_timing1_b4;
++ unsigned long nand_timing2 = this->ctrl_read(BCHP_NAND_TIMING_2);
++ unsigned long nand_timing2_b4;
++
++ // Adjust NAND timings:
+ if (chip->timing1) {
+ nand_timing1_b4 = nand_timing1;
+
+@@ -6688,61 +5407,20 @@
+ brcmnand_read_id(struct mtd_info *mtd, unsigned int chipSelect, unsigned long* dev_id)
+ {
+ struct brcmnand_chip * chip = mtd->priv;
+- uint32_t status;
+- uint32_t nandConfig = chip->ctrl_read(BCHP_NAND_CONFIG);
+- uint32_t csNandSelect = 0;
+- uint32_t nandSelect = 0;
+-
+- if (chipSelect > 0) { // Do not re-initialize when on CS0, Bootloader already done that
+-
+-#if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_0_1
+- nandSelect = chip->ctrl_read(BCHP_NAND_CS_NAND_SELECT);
+-
+-printk("B4: NandSelect=%08x, nandConfig=%08x, chipSelect=%d\n", nandSelect, nandConfig, chipSelect);
+-
+
+- #if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_1_0
+- /* Older version do not have EXT_ADDR registers */
+- chip->ctrl_write(BCHP_NAND_CMD_ADDRESS, 0);
+- chip->ctrl_write(BCHP_NAND_CMD_EXT_ADDRESS, chipSelect << BCHP_NAND_CMD_EXT_ADDRESS_CS_SEL_SHIFT);
+- #endif // Set EXT address if version >= 1.0
++#if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_1_0
++ /* Set correct chip Select */
++ chip->ctrl_write(BCHP_NAND_CMD_ADDRESS, BCHP_NAND_CMD_START_OPCODE_DEVICE_ID_READ);
++ chip->ctrl_write(BCHP_NAND_CMD_EXT_ADDRESS, chipSelect << 16);
++#endif
+
+- // Has CFE initialized the register?
+- if (0 == (nandSelect & BCHP_NAND_CS_NAND_SELECT_AUTO_DEVICE_ID_CONFIG_MASK)) {
+-
+- #if CONFIG_MTD_BRCMNAND_VERSION == CONFIG_MTD_BRCMNAND_VERS_0_1
+- csNandSelect = 1<<(BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_SEL_SHIFT + chipSelect);
++PRINTK("-->%s: this=%p, chip->ctrl_read=%p\n", __FUNCTION__, chip, chip->ctrl_read);
+
+- // v1.0 does not define it
+- #elif CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_2_0
+- csNandSelect = 1<<(BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT + chipSelect);
+-
+- #endif // If brcmNAND Version >= 1.0
+-
+- nandSelect = BCHP_NAND_CS_NAND_SELECT_AUTO_DEVICE_ID_CONFIG_MASK | csNandSelect;
+- chip->ctrl_write(BCHP_NAND_CS_NAND_SELECT, nandSelect);
+- }
+-
+- /* Send the command for reading device ID from controller */
+- chip->ctrl_write(BCHP_NAND_CMD_START, OP_DEVICE_ID_READ);
+-
+- /* Wait for CTRL_Ready */
+- brcmnand_wait(mtd, FL_READY, &status);
+-
+-#endif // if BrcmNAND Version >= 0.1
+- }
+-
++ /* Send the command for reading device ID from controller */
+ *dev_id = chip->ctrl_read(BCHP_NAND_FLASH_DEVICE_ID);
+
+ printk(KERN_INFO "brcmnand_probe: CS%1d: dev_id=%08x\n", chipSelect, (unsigned int) *dev_id);
+
+-#if CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_0_1
+- nandSelect = chip->ctrl_read(BCHP_NAND_CS_NAND_SELECT);
+-#endif
+-
+- nandConfig = chip->ctrl_read(BCHP_NAND_CONFIG);
+-
+-printk("After: NandSelect=%08x, nandConfig=%08x\n", nandSelect, nandConfig);
+ }
+
+
+@@ -6764,8 +5442,6 @@
+ int version_id;
+ //int density;
+ int i;
+-
+-//gdebug=4;
+
+ /* Read manufacturer and device IDs from Controller */
+ brcmnand_read_id(mtd, chipSelect, &chip->device_id);
+@@ -7169,10 +5845,9 @@
+ /* Version ID */
+ version_id = chip->ctrl_read(BCHP_NAND_REVISION);
+
+- printk(KERN_INFO "BrcmNAND version = 0x%04x %dMB @%08lx\n",
+- version_id, mtd64_ll_low(chip->chipSize>>20), chip->pbase);
++ printk(KERN_INFO "BrcmNAND version = 0x%04x %dMB @%p\n",
++ version_id, mtd64_ll_low(chip->chipSize>>20), chip->vbase);
+
+-//gdebug=0;
+
+ return 0;
+ }
+@@ -7615,92 +6290,51 @@
+ }
+
+ #elif CONFIG_MTD_BRCMNAND_VERSION >= CONFIG_MTD_BRCMNAND_VERS_2_0
+- {
+- int i;
+- uint32_t nand_xor;
++ /*
++ * Starting with version 2.0 (bcm7325 and later),
++ * we can use EBI_CS_USES_NAND Registers to find out where the NAND
++ * chips are (which CS)
++ */
++ if (gNumNand > 0) { /* Kernel argument nandcs=<comma-sep-list> override CFE settings */
++ if (brcmnand_sort_chipSelects(mtd, maxchips, gNandCS, chip->CS))
++ return (-EINVAL);
++ cs = chip->CS[chip->numchips - 1];
++PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
++ }
++ else {
+
+- /*
+- * Starting with version 2.0 (bcm7325 and later),
+- * we can use EBI_CS_USES_NAND Registers to find out where the NAND
+- * chips are (which CS)
+- */
++ /* Load the gNandCS_priv[] array from EBI_CS_USES_NAND values,
++ * same way that get_options() does, i.e. first entry is gNumNand
++ */
++ int nandCsShift, i;
++ int numNand = 0;
++ int nandCS[MAX_NAND_CS];
+
+-
+- if (gNumNand > 0) { /* Kernel argument nandcs=<comma-sep-list> override CFE settings */
+- if (brcmnand_sort_chipSelects(mtd, maxchips, gNandCS, chip->CS))
+- return (-EINVAL);
+- cs = chip->CS[chip->numchips - 1];
+- PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+- }
+- else {
+-
+- /* Load the gNandCS_priv[] array from EBI_CS_USES_NAND values,
+- * same way that get_options() does, i.e. first entry is gNumNand
+- */
+- int nandCsShift;
+- int numNand = 0; // Number of NAND chips
+- int nandCS[MAX_NAND_CS];
+-
+- for (i = 0; i< MAX_NAND_CS; i++) {
+- nandCS[i] = -1;
+- }
+-
+- nand_select = brcmnand_ctrl_read(BCHP_NAND_CS_NAND_SELECT);
+- // Be careful here, the last bound depends on chips. Some chips allow 8 CS'es (3548a0) some only 2 (3548b0)
+- // Here we rely on BCHP_NAND_CS_NAND_SELECT_reserved1_SHIFT being the next bit.
+- for (i=0, nandCsShift = BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT;
+- nandCsShift < BCHP_NAND_CS_NAND_SELECT_reserved1_SHIFT;
+- nandCsShift ++)
+- {
+- if (nand_select & (1 << nandCsShift)) {
+- nandCS[i] = nandCsShift - BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT;
+- PRINTK("Found NAND on CS%1d\n", nandCS[i]);
+- i++;
+- }
+- }
+- numNand = i;
+- if (brcmnand_sort_chipSelects(mtd, maxchips, nandCS, chip->CS))
+- return (-EINVAL);
+- cs = chip->CS[chip->numchips - 1];
+- PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+-
+-
+-
+-
+-
++ for (i = 0; i< MAX_NAND_CS; i++) {
++ nandCS[i] = -1;
+ }
+-
+- /*
+- * 2618-7.3: For v2.0 or later, set xor_disable according to NAND_CS_NAND_XOR:00 bit
+- */
+-
+- nand_xor = brcmnand_ctrl_read(BCHP_NAND_CS_NAND_XOR);
+- printk("NAND_CS_NAND_XOR=%08x\n", nand_xor);
+- //
+-#ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
+- /* Testing 1,2,3: Force XOR disable on CS0, if not done by CFE */
+- if (chip->CS[0] == 0) {
+- printk("Disabling XOR: Before: SEL=%08x, XOR=%08x\n", nand_select, nand_xor);
+-
+- nand_select &= ~BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_SEL_MASK;
+- nand_xor &= ~BCHP_NAND_CS_NAND_XOR_EBI_CS_0_ADDR_1FC0_XOR_MASK;
+-
+- brcmnand_ctrl_write(BCHP_NAND_CS_NAND_SELECT, nand_select);
+- brcmnand_ctrl_write(BCHP_NAND_CS_NAND_XOR, nand_xor);
+-
+- printk("Disabling XOR: After: SEL=%08x, XOR=%08x\n", nand_select, nand_xor);
+- }
+-#endif
+- /* Translate nand_xor into our internal flag, for brcmnand_writeAddr */
+- for (i=0; i<chip->numchips; i++) {
+-
+- /* Set xor_disable, 1 for each NAND chip */
+- if (!(nand_xor & (BCHP_NAND_CS_NAND_XOR_EBI_CS_0_ADDR_1FC0_XOR_MASK<<i))) {
+-printk("Disabling XOR on CS#%1d\n", chip->CS[i]);
+- chip->xor_disable[i] = 1;
++
++ nand_select = brcmnand_ctrl_read(BCHP_NAND_CS_NAND_SELECT);
++ // Be careful here, the last bound depends on chips. Some chips allow 8 CS'es (3548a0) some only 2 (3548b0)
++ // Here we rely on BCHP_NAND_CS_NAND_SELECT_reserved1_SHIFT being the next bit.
++ for (i=0, nandCsShift = BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT;
++ nandCsShift < BCHP_NAND_CS_NAND_SELECT_reserved1_SHIFT;
++ nandCsShift ++)
++ {
++ if (nand_select & (1 << nandCsShift)) {
++ nandCS[i] = nandCsShift - BCHP_NAND_CS_NAND_SELECT_EBI_CS_0_USES_NAND_SHIFT;
++ PRINTK("Found NAND on CS%1d\n", nandCS[i]);
++ i++;
+ }
+ }
++ numNand = i;
++ if (brcmnand_sort_chipSelects(mtd, maxchips, nandCS, chip->CS))
++ return (-EINVAL);
++ cs = chip->CS[chip->numchips - 1];
++PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ }
++
++
+ #else
+ #error "Unknown Broadcom NAND controller version"
+ #endif /* Versions >= 1.0 */
+@@ -7728,15 +6362,24 @@
+ volatile unsigned long acc_control;
+
+ chip->numchips = 1;
++ if (chip->chipSize >= (128 << 20)) {
++ chip->pbase = 0x11000000; /* Skip 16MB EBI Registers */
+
+- /* Set up base, based on flash size */
+- if (chip->chipSize >= (256 << 20)) {
+- chip->pbase = 0x12000000;
+- mtd->size = 0x20000000 - chip->pbase; // THT: This is different than chip->chipSize
+- } else {
+- /* We know that flash endAddr is 0x2000_0000 */
+- chip->pbase = 0x20000000 - chip->chipSize;
++ mtd->num_eraseblocks = (chip->chipSize - (16<<20)) >> chip->erase_shift; // Maximum size on a 128MB/256MB flash
++ chip->mtdSize = device_size(mtd);
++ }
++/*
++ else if (chip->chipSize == (256 << 20)) {
++ chip->pbase = 0x11000000; // Skip 16MB EBI Registers
++ mtd->size = 240<<20; // Maximum size on a 256MB flash, provided CS0/NOR is disabled
++ }
++ */
++ else {
++ chip->pbase = 0x18000000 - chip->chipSize;
+ mtd->size = chip->chipSize;
++ chip->mtdSize = mtd->size;
++
++ //mtd->size_hi = 0;
+ }
+
+ printk("Found NAND chip on Chip Select %d, chipSize=%dMB, usable size=%dMB, base=%08x\n",
+@@ -7926,7 +6569,7 @@
+ printk("ACC: %d OOB bytes per 512B ECC step; from ID probe: %d\n", eccOobSize, chip->eccOobSize);
+ // We have recorded chip->eccOobSize during probe, let's compare it against value from ACC
+ if (chip->eccOobSize < eccOobSize) {
+- printk("Flash says it has %d OOB bytes, but ECC level %lu need %d bytes\n",
++ printk("Flash says it has %d OOB bytes, but ECC level %d need %d bytes\n",
+ chip->eccOobSize, eccLevel, eccOobSize);
+ printk(KERN_INFO "Please fix your board straps. Aborting to avoid file system damage\n");
+ BUG();
+@@ -7941,7 +6584,7 @@
+ break;
+
+ default:
+- printk(KERN_ERR "Unsupported ECC level %lu\n", eccLevel);
++ printk(KERN_ERR "Unsupported ECC level %d\n", eccLevel);
+ BUG();
+
+ }
+@@ -7963,11 +6606,11 @@
+ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc_control );
+ printk("Corrected PARTIAL_PAGE_EN: ACC_CONTROL = %08lx\n", acc_control);
+ }
+-#ifdef CONFIG_MIPS_BCM3548
+- /* THT PR50928: Disable WR_PREEMPT for 3548L and 3556 */
+- acc_control &= ~(BCHP_NAND_ACC_CONTROL_WR_PREEMPT_EN_MASK);
++#if 1
++ /* THT Disable Optimization for 2K page */
++ acc_control &= ~(BCHP_NAND_ACC_CONTROL_WR_PREEMPT_EN_MASK|BCHP_NAND_ACC_CONTROL_PAGE_HIT_EN_MASK);
+ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc_control );
+- printk("Disable WR_PREEMPT: ACC_CONTROL = %08lx\n", acc_control);
++ printk("Disable WR_PREEMPT and PAGE_HIT_EN: ACC_CONTROL = %08lx\n", acc_control);
+ #endif
+ printk("ACC_CONTROL for MLC NAND: %08lx\n", acc_control);
+ }
+@@ -8010,58 +6653,7 @@
+ printk("SLC flash: Corrected ACC_CONTROL = %08lx from %08lx\n", acc_control, org_acc_control);
+ }
+ }
+-
+-
+-#if CONFIG_MTD_BRCMNAND_VERSION <= CONFIG_MTD_BRCMNAND_VERS_3_4
+- /*
+- * PR57272: Workaround for BCH-n error,
+- * reporting correctable errors with 4 or more bits as uncorrectable:
+- */
+- if (chip->ecclevel != 0 && chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- int corr_threshold;
+-
+- if ( chip->ecclevel >= BRCMNAND_ECC_BCH_4) {
+- corr_threshold = 2;
+- }
+- else {
+- corr_threshold = 1; // 1 , default for Hamming
+- }
+-
+- printk(KERN_INFO "%s: CORR ERR threshold set to %d bits\n", __FUNCTION__, corr_threshold);
+- corr_threshold <<= BCHP_NAND_CORR_STAT_THRESHOLD_CORR_STAT_THRESHOLD_SHIFT;
+- brcmnand_ctrl_write(BCHP_NAND_CORR_STAT_THRESHOLD, corr_threshold);
+- }
+-
+-#else
+- /*
+- * If ECC level is BCH, set CORR Threshold according to # bits corrected
+- */
+- if (chip->ecclevel != 0 && chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- int corr_threshold;
+-
+- if (chip->ecclevel >= BRCMNAND_ECC_BCH_8) {
+- corr_threshold = 6; // 6 out of 8
+- }
+- else if ( chip->ecclevel >= BRCMNAND_ECC_BCH_4) {
+- corr_threshold = 3; // 3 out of 4
+- }
+- else {
+- corr_threshold = 1; // 1 , default for Hamming
+- }
+- printk(KERN_INFO "%s: CORR ERR threshold set to %d bits\n", __FUNCTION__, corr_threshold);
+- corr_threshold <<= BCHP_NAND_CORR_STAT_THRESHOLD_CORR_STAT_THRESHOLD_SHIFT;
+- brcmnand_ctrl_write(BCHP_NAND_CORR_STAT_THRESHOLD, corr_threshold);
+- }
+-#endif
+-
+ }
+-
+-#else
+- /* Version 2.x, Hamming codes only */
+- /* If chip Select is not zero, the CFE may not have initialized the NAND flash */
+- if (chip->CS[0]) {
+- /* Nothing for now */
+- }
+ #endif // Version 3.0+
+ #endif // Version 1.0+
+
+@@ -8112,17 +6704,12 @@
+ #ifdef EDU_DEBUG_3
+ printk("++++++++++++ EDU_DEBUG_3 enabled\n");
+ #endif
+-#if defined( EDU_DEBUG_4 ) || defined( EDU_DEBUG_5 )
+-init_edu_buf();
+-
+- #ifdef EDU_DEBUG_4
+- printk("++++++++++++ EDU_DEBUG_4 (read verify) enabled\n");
+- #endif
+-
+- #ifdef EDU_DEBUG_5
+- printk("++++++++++++ EDU_DEBUG_5 (write verify) enabled\n");
+- #endif
++#ifdef EDU_DEBUG_4
++printk("++++++++++++ EDU_DEBUG_4 (read verify) enabled\n");
+ #endif
++#ifdef EDU_DEBUG_5
++printk("++++++++++++ EDU_DEBUG_5 (write verify) enabled\n");
++#endif
+
+ PRINTK("%s 30\n", __FUNCTION__);
+ /*
+@@ -8200,22 +6787,8 @@
+ }
+ }
+ else {
+- switch (mtd->writesize) {
+- case 4096:
+- if (chip->ecclevel == BRCMNAND_ECC_HAMMING) {
+- printk(KERN_WARNING "This SLC-4K-page flash may not be suitable for Hamming codes\n");
+- chip->ecclayout = &brcmnand_oob_128;
+- }
+- else {
+- chip->ecclayout = &brcmnand_oob_bch4_4k;
+- }
+- break;
+-
+- default:
+- printk(KERN_ERR "Unsupported page size of %d\n", mtd->writesize);
+- BUG();
+- break;
+- }
++ printk(KERN_ERR "Unsupported SLC NAND with page size of %d\n", mtd->writesize);
++ BUG();
+ }
+ break;
+
+@@ -8239,18 +6812,7 @@
+ //chip->eccOobSize = (mtd->oobsize*512) /mtd->writesize;
+ printk(KERN_INFO "mtd->oobsize=%d, mtd->eccOobSize=%d\n", mtd->oobsize, chip->eccOobSize);
+
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+ if (!chip->read_page)
+- chip->read_page = brcmnand_isr_read_page;
+- if (!chip->write_page)
+- chip->write_page = brcmnand_isr_write_page;
+- if (!chip->read_page_oob)
+- chip->read_page_oob = brcmnand_isr_read_page_oob;
+- /* There is no brcmnand_isr_write_page_oob */
+- if (!chip->write_page_oob)
+- chip->write_page_oob = brcmnand_write_page_oob;
+-#else
+- if (!chip->read_page)
+ chip->read_page = brcmnand_read_page;
+ if (!chip->write_page)
+ chip->write_page = brcmnand_write_page;
+@@ -8258,7 +6820,6 @@
+ chip->read_page_oob = brcmnand_read_page_oob;
+ if (!chip->write_page_oob)
+ chip->write_page_oob = brcmnand_write_page_oob;
+-#endif
+ if (!chip->read_oob)
+ chip->read_oob = brcmnand_do_read_ops;
+ if (!chip->write_oob)
+@@ -8387,17 +6948,21 @@
+ EDU_init();
+ #endif
+
++gdebug=0;
++if (0) {
++ char oob[128];
++
++ printk("------------------> Dry-run\n");
++ brcmnand_posted_read_oob(mtd, oob, device_size(mtd) - mtd->erasesize, 1);
++ print_oobbuf(oob, 16);
++ printk("<------------------ End Dry-run\n");
++}
+
++if (gdebug > 3) printk("%s 60 Calling scan_bbt\n", __FUNCTION__);
+
+-#ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
+-gdebug=4;
+- printk("-----------------------------------------------------\n");
+- print_nand_ctrl_regs();
+- printk("-----------------------------------------------------\n");
+-#endif
+-
+-
+ err = chip->scan_bbt(mtd);
++if (gdebug > 3) printk("%s 80 Done scan_bbt\n", __FUNCTION__);
++//gdebug=0;
+
+
+ #ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+@@ -8411,9 +6976,9 @@
+ }
+ #endif
+
+-//gdebug=0;
+ PRINTK("%s 99\n", __FUNCTION__);
+
++if (gdebug) print_diagnostics();
+ return err;
+
+ }
+Index: drivers/mtd/brcmnand/brcmnand_cet.c
+===================================================================
+--- drivers/mtd/brcmnand/brcmnand_cet.c (revision 1)
++++ drivers/mtd/brcmnand/brcmnand_cet.c (working copy)
+@@ -72,20 +72,12 @@
+
+ #define CET_SYNC_FREQ (10*60*HZ)
+
+-
+ static char cet_pattern[] = {'C', 'E', 'T', 0};
+ static struct brcmnand_cet_descr cet_descr = {
+ .offs = 9,
+ .len = 4,
+ .pattern = cet_pattern
+ };
+-
+-/*
+- * This also applies to Large Page SLC flashes with BCH-4 ECC.
+- * We don't support BCH-4 on Small Page SLCs because there are not
+- * enough free bytes for the OOB, but we don't enforce it,
+- * in order to allow page aggregation like in YAFFS2 on small page SLCs.
+- */
+ static struct brcmnand_cet_descr cet_descr_mlc = {
+ .offs = 1,
+ .len = 4,
+@@ -685,18 +677,10 @@
+ if (unlikely(gdebug)) {
+ printk(KERN_INFO "brcmnandCET: Creating correctable error table ...\n");
+ }
+-
+- if (NAND_IS_MLC(this) || /* MLC flashes */
+- /* SLC w/ BCH-n; We don't check for pageSize, and let it be */
+- (this->ecclevel >= BRCMNAND_ECC_BCH_1 && this->ecclevel <= BRCMNAND_ECC_BCH_12))
+- {
++ if (NAND_IS_MLC(this)) {
+ this->cet = cet = &cet_descr_mlc;
+-if (gdebug) printk("%s: CET = cet_desc_mlc\n", __FUNCTION__);
+- }
+-
+- else {
++ } else {
+ this->cet = cet = &cet_descr;
+-if (gdebug) printk("%s: CET = cet_descr\n", __FUNCTION__);
+ }
+ cet->flags = 0x00;
+ /* Check that BBT table and mirror exist */
+Index: drivers/mtd/brcmnand/brcmnand_isr.c
+===================================================================
+--- drivers/mtd/brcmnand/brcmnand_isr.c (revision 1)
++++ drivers/mtd/brcmnand/brcmnand_isr.c (working copy)
+@@ -22,705 +22,189 @@
+ * 20090318 tht Original coding
+ */
+
+-//#define ISR_DEBUG_SMP
+-#undef ISR_DEBUG_SMP
+
+-#ifdef ISR_DEBUG_SMP
+-#include <asm/atomic.h>
+-#endif
+-
+-
+ #include "brcmnand_priv.h"
+ #include "edu.h"
+
+-#include <linux/dma-mapping.h>
+-
+ #define PRINTK(...)
+-//#define PRINTK printk
+-
+-#ifdef ISR_DEBUG_SMP
+-static atomic_t v = ATOMIC_INIT(1);
+-#define PRINTK1(...) if (!atomic_dec_and_test(&v)) printk("<")
+-#define PRINTK2(...) atomic_inc(&v) //, printk(">"))
+-#define PRINTK5(...) if (!atomic_dec_and_test(&v)) printk("+");
+-#define PRINTK6(...) atomic_inc(&v) // printk("-");
+-#define PRINTK3(...) if (!atomic_dec_and_test(&v)) printk("[");
+-#define PRINTK4(...) atomic_inc(&v) // printk("]");
+-
+-#else
+-#define PRINTK1(...)
+-#define PRINTK2(...)
+-#define PRINTK3(...)
+-#define PRINTK4(...)
+-#define PRINTK5(...)
+-#define PRINTK6(...)
+-#endif
++//define PRINTK printk
+
+
+ // Wakes up the sleeping calling thread.
+ static DECLARE_WAIT_QUEUE_HEAD(gEduWaitQ);
+
+-//eduIsrNode_t gEduIsrData;
+-eduIsrNode_t gEduIsrPool[MAX_JOB_QUEUE_SIZE+2]; /* ReadOp Pool, add 2 for Pushed WAR jobs */
++eduIsrData_t gEduIsrData;
+
+-isrJobQ_t gJobQ; /* Job Queue */
+-
+-extern int gdebug;
+-
+-
+-/*
+- * Queue next sector for read/write, assuming caller holds queue lock
+- */
+-eduIsrNode_t*
+-ISR_queue_read_request(struct mtd_info *mtd,
+- void* buffer, u_char* oobarea, loff_t offset)
++static irqreturn_t ISR_isr(int irq, void *devid, struct pt_regs *regs)
+ {
+- eduIsrNode_t* entry;
+- struct list_head* node;
+-
+- // Grab one request from avail list
+- if (list_empty(&gJobQ.availList)) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- node = gJobQ.availList.next;
+- if (!node) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- entry = list_entry(node, eduIsrNode_t, list);
+- list_del(node);
+-
+- // Queue entry
+- list_add_tail(node, &gJobQ.jobQ);
+- spin_lock_init(&entry->lock);
+- entry->mtd = mtd;
+- entry->buffer = buffer;
+- entry->oobarea = oobarea;
+- entry->offset = offset;
+- entry->ret = -1;
+- entry->refCount = 1;
+- entry->opComplete = ISR_OP_QUEUED;
+-
+- return entry;
+-}
+-
+-eduIsrNode_t*
+-ISR_queue_write_request(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset)
+-{
+- eduIsrNode_t* entry;
+- struct list_head* node;
+-
+- // Grab one request from avail list
+- if (list_empty(&gJobQ.availList)) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- node = gJobQ.availList.next;
+- if (!node) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- entry = list_entry(node, eduIsrNode_t, list);
+- list_del(node);
+-
+- // Queue entry
+- list_add_tail(node, &gJobQ.jobQ);
+- spin_lock_init(&entry->lock);
+- entry->mtd = mtd;
+- entry->buffer = buffer;
+- entry->oobarea = oobarea;
+- entry->offset = offset;
+- entry->ret = -1;
+- entry->refCount = 1;
+- entry->opComplete = ISR_OP_QUEUED;
+-
+- return entry;
+-}
+-
+-
+-/*
+- * Push next sector for dummy read to head of queue, assuming caller holds queue lock
+- * Job will be next to be executed
+- */
+-eduIsrNode_t*
+-ISR_push_request(struct mtd_info *mtd,
+- void* buffer, u_char* oobarea, loff_t offset)
+-{
+- eduIsrNode_t* entry;
+- struct list_head* node;
+-
+- // Grab one request from avail list
+- if (list_empty(&gJobQ.availList)) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- node = gJobQ.availList.next;
+- if (!node) {
+- printk("%s: Empty avail list\n", __FUNCTION__);
+- BUG();
+- }
+- entry = list_entry(node, eduIsrNode_t, list);
+- list_del(node);
+-
+- // Push to head of queue
+- list_add(node, &gJobQ.jobQ);
+- spin_lock_init(&entry->lock);
+- entry->mtd = mtd;
+- entry->buffer = buffer;
+- entry->oobarea = oobarea;
+- entry->offset = offset;
+- entry->ret = -1;
+- entry->refCount = 1;
+- entry->opComplete = ISR_OP_QUEUED;
+-
+- return entry;
+-}
+-
+-
+-/*
+- * Called with ReqdQ Read lock held
+- * Returns pointer to node that satisfies opStatus,
+- * with spin lock held (spin_lock()'ed assuming queue lock has been held))
+- */
+-eduIsrNode_t*
+-ISR_find_request( isrOpStatus_t opStatus)
+-{
+- eduIsrNode_t* req;
+-
+- list_for_each_entry(req, &gJobQ.jobQ, list) {
+-
+- // We called this with spin_lock_irqsave on queue lock, so no need for the irq variant
+- spin_lock(&req->lock);
+- if (req->opComplete == opStatus) {
+- return req;
+- }
+- spin_unlock(&req->lock);
+- }
+- return (eduIsrNode_t*) 0;;
+-}
+-
+-#if 0
+-static void
+-ISR_print_queue(void)
+-{
+- eduIsrNode_t* req;
+- int i=0;
+-
+- list_for_each_entry(req, &gJobQ.jobQ, list) {
+-
+- // We called this with spin_lock_irqsave on queue lock, so no need for the irq variant
+- printk("I=%d req=%p, offset=%0llx, opComp=%d, list=%p, next=%p, prev=%p\n",
+- i, req, req->offset, req->opComplete, &req->list, req->list.next, req->list.prev);
+- i++;
+- }
+- return (eduIsrNode_t*) 0;;
+-}
+-#endif
+-
+-
+-/*
+- * We've got interrupted, and verified that job is complete.
+- * Job lock has been held by caller.
+- * Do Read completion routines
+- * runs in interrupt context.
+- * Return returned value of read-op.
+- */
+-
+-
+-
+-#if 0 //def EDU_DOUBLE_BUFFER_READ
+-
+-/* Save this to be revived when we are sure that EDU's double buffering works */
+-static int
+-ISR_read_completion(eduIsrNode_t* req)
+-{
+- /* Make sure that the current request does not cause an UNC ERR, as
+- * that would require a read from the LKGS to reset EDU
+- */
+- if (req->status & HIF_INTR2_EDU_ERR) {
+- uint32_t edu_err_status;
+-
+- edu_err_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_ERR_STATUS);
+- if (edu_err_status && edu_err_status != EDU_ERR_STATUS_NandECCcor) {
+-
+- /* If error, we must stop the on-going EDU op, because it will be dropped by EDU.
+- * This is VLSI PR2389
+- */
+- edu_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_STATUS);
+- if (edu_status & BCHP_EDU_STATUS_Active_MASK) {
+- uint32_t edu_done = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_DONE);
+-
+-
+- // Abort current command
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_STOP, BCHP_EDU_STOP_Stop_MASK);
+-
+- // Wait for Done to increment
+- while (edu_done == EDU_volatileRead(EDU_BASE_ADDRESS + EDU_DONE))
+- udelay(10);
+- // Wait for Pending and Active to Clear
+- while (0 != (edu_status = EDU_volatileRead(EDU_BASE_ADDRESS + EDU_STATUS)))
+- udelay(10);
+- // Reset Stop
+- EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_STOP, 0);
+- // Let the process context thread handle the WAR,
+- // But we need to requeue the current op (req2)
+- req2 = req->list.next;
+- down(&req2->lock);
+- if (req2 && req2->opComplete == ISR_OP_SUBMITTED) {
+- req2->opComplete = ISR_OP_QUEUED;
+- }
+- up(&req2->lock);
+- }
+- }
+-
+- }
+- // ReadOp completes with no errors, queue next requests until Pending is set
+-
+-
+-}
+-
+-#endif
+-
+-/*
+- * The requests are queued, some with ISR_OP_SUBMITTED status, some with ISR_OP_QUEUED
+- * When an interrupt comes in, we just look for the one that are in submitted status, and mark them
+- * as ISR_OP_COMPLETE, and wake up the wait queue.
+- * However, if (1) there is an error that requires a workaround, or (2) that the operation is not yet completed,
+- * we need to take appropriate action depending on the case.
+- * In (1), we have a false uncorrectable error, that need a read from the last known good sector,
+- * so if double buffering is in effect, we need to abort the current EDU job, in order to do the workaround.
+- * In (2) we just update the current job, and let the HW interrupt us again.
+- *
+- * Runs in interrupt context.
+- */
+-static irqreturn_t
+-ISR_isr(int irq, void *devid, struct pt_regs *regs)
+-{
+ uint32_t status, rd_data;
+ uint32_t intrMask;
+- eduIsrNode_t* req;
+- //struct list_head* node;
+- uint32_t flashAddr;
+ unsigned long flags;
+
+ /*
+ * Not mine
+ */
+- if (devid != (void*) &gJobQ) {
++ if (devid != (void*) &gEduIsrData) {
+ return IRQ_NONE;
+ }
+
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- /* TBD: How to tell Read Request from Write Request */
+- if (list_empty(&gJobQ.jobQ)) {
+- printk("%s: Impossible no job to process\n", __FUNCTION__);
+- //BUG();
+- // CLear interrupt and return
+- intrMask = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
+- ISR_disable_irq(intrMask);
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return IRQ_HANDLED;
+- }
+-
+- flashAddr = EDU_volatileRead(EDU_BASE_ADDRESS+EDU_EXT_ADDR) - (EDU_LENGTH_VALUE-1);
+-
+- flashAddr &= ~(EDU_LENGTH_VALUE-1);
+-
+- req = ISR_find_request(ISR_OP_SUBMITTED);
+-
+- // Paranoia
+- if (!req) {
+- printk("%s: Impossible failed to find queued job\n", __FUNCTION__);
+- BUG();
+- }
+-
+- // req->lock held here.
+-
+- /*
+- * Remember the status, as there can be several L1 interrupts before completion.
+- * Grab the lock first, we don't want any race condition.
+- */
+- // spin_lock(&req->lock); Already locked by ISR_find_request
+ intrMask = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
+ rd_data = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
+
+-PRINTK("==> %s: Awaken rd_data=%08x, intrMask=%08x, cmd=%d, flashAddr=%08x\n", __FUNCTION__,
+- rd_data, intrMask, gJobQ.cmd, req->edu_ldw);
++PRINTK("%s: Awaken rd_data=%08x, intrMask=%08x, cmd=%d, flashAddr=%08x\n", __FUNCTION__,
++ rd_data, intrMask, gEduIsrData.cmd, gEduIsrData.flashAddr);
+
+- req->status |= rd_data;
+- status = req->status & req->mask;
+-
+ /*
+- * Evaluate exit/completion condition.
++ * Remember the status, as there can be several L1 interrupts before completion
+ */
+- switch (gJobQ.cmd) {
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
++ gEduIsrData.status |= rd_data;
++ status = gEduIsrData.status & gEduIsrData.mask;
++
++ // Evaluate exit/completion condition
++ switch (gEduIsrData.cmd) {
+ case EDU_READ:
+ case NAND_CTRL_READY:
+- if ((req->expect == (req->status & req->expect)) ||
+- (req->status & req->error))
+- {
+- req->opComplete = ISR_OP_COMPLETED;
+- }
++ gEduIsrData.opComplete = ((gEduIsrData.expect == (gEduIsrData.status & gEduIsrData.expect)) ||
++ (gEduIsrData.status & gEduIsrData.error));
+ break;
+
+ case EDU_WRITE:
+ /*
+ * We wait for both DONE|ERR +CTRL_READY
+ */
+- if ((req->expect == (req->status & req->expect) ||
+- (req->status & req->error))
++ gEduIsrData.opComplete = ((gEduIsrData.expect == (gEduIsrData.status & gEduIsrData.expect) ||
++ (gEduIsrData.status & gEduIsrData.error))
+ &&
+- (req->status & HIF_INTR2_CTRL_READY))
+- {
+- req->opComplete = ISR_OP_COMPLETED;
+- (void) dma_unmap_single(NULL, req->physAddr, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
+- }
+- break;
+-
+- default:
+- printk("%s: Invalid command %08x\n", __FUNCTION__, gJobQ.cmd);
+- BUG();
++ (gEduIsrData.status & HIF_INTR2_CTRL_READY));
++ break;
+ }
+- if (ISR_OP_COMPLETED == req->opComplete) {
+- int submitted;
+-
+- /* ACK interrupt */
+- ISR_disable_irq(req->intr);
+-
+- // Do we need to do WAR for EDU, since EDU stop dead in its track regardless of the kind of errors. Bummer!
+- if (req->status & HIF_INTR2_EDU_ERR) {
+- uint32_t edu_err_status;
+-
+- /*
+- * We need to do WAR for EDU, which just stops dead on its tracks if there is any error, correctable or not.
+- * Problem is, the WAR needs to be done in process context,
+- * so we wake up the process context thread, and handle the WAR there.
+- */
+-PRINTK("%s: Awaken process context thread for EDU WAR, flashAddr=%08x, status=%08x, hif_intr2=%08x\n",
+-__FUNCTION__, req->edu_ldw, req->status, HIF_INTR2_EDU_ERR);
+- gJobQ.needWakeUp= 1;
+- req->opComplete = ISR_OP_NEED_WAR;
+- wake_up(&gEduWaitQ);
+- spin_unlock(&req->lock);
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return IRQ_HANDLED;
+- }
+-
+- /*
+- * Get here only if there are no errors, call job completion routine.
+- */
+- switch (gJobQ.cmd) {
+- case EDU_READ:
+- /* All is left to do is to handle the OOB read */
+- req->ret = brcmnand_edu_read_comp_intr(req->mtd, req->buffer, req->oobarea, req->offset,
+- req->status);
+- break;
+-
+- case EDU_WRITE:
+- {
+- /*
+- * Even if there are no HIF_INTR2_ERR, we still need to check
+- * the flash status. If it is set, we need to update the BBT
+- * which requires process context WAR
+- */
+- struct brcmnand_chip *chip = req->mtd->priv;
+- uint32_t flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+-
+- req->needBBT=0;
+- /* Just to be dead sure */
+- if (!(flashStatus & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK)) {
+- printk("%s: Impossible, CTRL-READY already asserted\n", __FUNCTION__);
+- BUG();
+- }
+- /* Check for flash write error, in which case tell process context thread to handle it */
+- if (flashStatus & 0x1) {
+- req->needBBT = 1;
+- gJobQ.needWakeUp= 1;
+- req->opComplete = ISR_OP_NEED_WAR;
+- wake_up(&gEduWaitQ);
+- spin_unlock(&req->lock);
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- return IRQ_HANDLED;
+- }
+- /* Nothing to be done when everything is OK
+- *else
+- * req->ret = brcmnand_edu_write_completion(req->mtd, req->buffer, req->oobarea, req->offset,
+- * req->status, req->physAddr, rq->needBBT);
+- */
+- }
+- break;
+- }
+-
+- // Jop completes with no errors, queue next requests until Pending is set
+- list_del(&req->list);
+-
+- list_add_tail(&req->list, &gJobQ.availList);
+- spin_unlock(&req->lock);
+-
+- submitted = brcmnand_isr_submit_job();
+-
+- if (!submitted) { /* No more job to submit, we are done, wake up process context thread */
+- wake_up(&gEduWaitQ);
+- }
+-
++ if (gEduIsrData.opComplete) {
++ ISR_disable_irq(gEduIsrData.intr);
++ wake_up_interruptible(&gEduWaitQ);
+ }
+-
+ else {
+ /* Ack only the ones that show */
+- uint32_t ack = req->status & req->intr;
++ uint32_t ack = gEduIsrData.status & gEduIsrData.intr;
+
+-PRINTK("%s: opComp=0, intr=%08x, mask=%08x, expect=%08x, err=%08x, status=%08x, rd_data=%08x, intrMask=%08x, flashAddr=%08x, DRAM=%08x\n", __FUNCTION__,
+-req->intr, req->mask, req->expect, req->error, req->status, rd_data, intrMask, req->flashAddr, req->dramAddr);
++printk("%s: opComp=0, intr=%08x, mask=%08x, expect=%08x, err=%08x, status=%08x, rd_data=%08x, intrMask=%08x, flashAddr=%08x, DRAM=%08x\n", __FUNCTION__,
++gEduIsrData.intr, gEduIsrData.mask, gEduIsrData.expect, gEduIsrData.error, gEduIsrData.status, rd_data, intrMask, gEduIsrData.flashAddr, gEduIsrData.dramAddr);
+
+ // Just disable the ones that are triggered
+ ISR_disable_irq(ack);
+- req->intr &= ~ack;
++ gEduIsrData.intr &= ~ack;
+
+- if (req->intr) {
++ if (gEduIsrData.intr) {
+ // Re-arm
+- ISR_enable_irq(req);
++ ISR_enable_irq();
+ }
+ else {
+ printk(KERN_ERR "%s: Lost interrupt\n", __FUNCTION__);
+ BUG();
+ }
+- spin_unlock(&req->lock);
+ }
+-
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+-
+-PRINTK2("<== %s: \n", __FUNCTION__);
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
+ return IRQ_HANDLED;
+ }
+
+-
+-
+-/*
+- * Called with no lock
+- * Wait until the Read Queue is empty
+- * Run in process context.
+- * Return 0 if all jobs complete successfully
+- * Return error codes and abort if any job returned un-correctable errors.
+- */
+-int
+-ISR_wait_for_queue_completion(void)
++uint32_t ISR_wait_for_completion(void)
+ {
+ //uint32_t rd_data;
+-//volatile unsigned int c = 0xfedeadad;
+- int ret = -ERESTARTSYS;
+- int waitret;
++ int ret;
+ unsigned long to_jiffies = 3*HZ; /* 3 secs */
+- //unsigned long cur_jiffies = jiffies;
+- unsigned long expired = jiffies + to_jiffies;
+ int cmd;
+- eduIsrNode_t* req;
+- eduIsrNode_t saveReq;
+- int submitted;
+ unsigned long flags;
+
+- /* Loop is for wait_event_interruptible_timeout */
+- do {
+- waitret = wait_event_timeout(gEduWaitQ, list_empty(&gJobQ.jobQ) || gJobQ.needWakeUp, to_jiffies);
+- if (waitret == 0) { /* TimeOut */
+- ret = BRCMNAND_TIMED_OUT;
+- break;
+- }
+- spin_lock_irqsave(&gJobQ.lock, flags);
+- if (gJobQ.needWakeUp) { /* Need to do process context WAR */
+- req = ISR_find_request(ISR_OP_NEED_WAR);
++ ret = wait_event_interruptible_timeout(gEduWaitQ, gEduIsrData.opComplete, to_jiffies);
+
+- if (!req) {
+- printk("%s: Cannot find job that need WAR\n", __FUNCTION__);
+- BUG();
+- }
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
+
+- // Make a copy
+- saveReq = *req;
++ cmd = gEduIsrData.cmd;
++ gEduIsrData.cmd = -1;
+
+- /* Mark the job as complete and free it */
+- req->opComplete = ISR_OP_COMPLETED;
+- gJobQ.needWakeUp = 0;
+-
+- // Job, with error, is now complete, remove it from queue, and submit next request
+- list_del(&req->list);
+-
+- list_add_tail(&req->list, &gJobQ.availList);
+-
+- spin_unlock(&req->lock);
+-
+- // req lock held inside ISR_find_request
+- switch (gJobQ.cmd) {
+- case EDU_READ:
+- ret = brcmnand_edu_read_completion(
+- saveReq.mtd, saveReq.buffer, saveReq.oobarea, saveReq.offset,
+- saveReq.status);
+- break;
+- case EDU_WRITE:
+- ret = brcmnand_edu_write_war(
+- saveReq.mtd, saveReq.buffer, saveReq.oobarea, saveReq.offset,
+- saveReq.status, saveReq.needBBT);
+- break;
+- default:
+- printk("%s: Unknown command %d\n", __FUNCTION__, gJobQ.cmd);
+- BUG();
+- }
+- if (ret == 0) { /* WAR worked */
+- // Submit next job (which is our dummy job in WAR)
+- submitted = brcmnand_isr_submit_job();
+- }
+- else {
+- eduIsrNode_t* tmp;
+-
+- // Abort queue, TBD
+- list_for_each_entry_safe(req, tmp, &gJobQ.jobQ, list) {
+- list_del(&req->list);
+-
+- list_add_tail(&req->list, &gJobQ.availList);
+- }
+- }
++ if (!gEduIsrData.opComplete && ret <= 0) {
++ ISR_disable_irq(gEduIsrData.intr);
++ if (ret == -ERESTARTSYS) {
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
++ return (uint32_t) (ERESTARTSYS); // Retry on Read
++ }
++ else if (ret == 0) {
++ //gEduIsrData.opComplete = 1;
++ printk("%s: DMA timedout\n", __FUNCTION__);
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
++ return 0; // Timed Out
+ }
+- else { // List is empty
+- ret = 0; // Loop exit condition
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+- } while ((ret == -ERESTARTSYS) && time_before(jiffies, expired));
+- return ret;
++
++ // DMA completes on Done or Error.
++ //rd_data = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
++
++ printk("%s: EDU completes but Status is %08x\n", __FUNCTION__, gEduIsrData.status);
++ //rd_data = 0; // Treat as a timeout
++ }
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
++ return gEduIsrData.status;
+ }
+
+
+-#if 0 //ndef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+-
+-/*
+- * Wait for completion when not using queue
+- */
+-uint32_t ISR_wait_for_completion(void)
++uint32_t ISR_cache_is_valid(uint32_t clearMask)
+ {
+- //uint32_t rd_data;
+-//volatile unsigned int c = 0xfedeadad;
+- int ret = -ERESTARTSYS;
+- unsigned long to_jiffies = 3*HZ; /* 3 secs */
+- //unsigned long cur_jiffies = jiffies;
+- unsigned long expired = jiffies + to_jiffies;
+- int cmd;
+- int retries = 2;
+- //unsigned long flags;
+-//volatile unsigned int counter = 0xAABBCCDD;
+-//static int erestartsys = 0;
++ uint32_t rd_data = ISR_volatileRead(BCM_BASE_ADDRESS+BCHP_HIF_INTR2_CPU_STATUS);
++ unsigned long flags;
+
+-
+- while (ret == -ERESTARTSYS ) {
+-//printk("%s: jiffies=%08lx, expired=%08lx\n", __FUNCTION__, jiffies, expired);
+- if (((retries--) < 0) || time_after(jiffies, expired)) {
+- ret = 0; // Timed out
+- return ERESTARTSYS;
+- }
+- else {
+- // Recalculate TO, for retries
+- to_jiffies = expired - jiffies;
+- //ret = wait_event_interruptible_timeout(gEduWaitQ, gEduIsrData.opComplete, to_jiffies);
+- ret = wait_event_timeout(gEduWaitQ, gEduIsrData.opComplete, to_jiffies);
+- }
++ /*
++ * Already there, no need to wait
++ */
++ if (rd_data & HIF_INTR2_CTRL_READY)
++ return rd_data;
+
+-PRINTK3("==>%s\n", __FUNCTION__);
+- down(&gEduIsrData.lock);
+-
+- cmd = gEduIsrData.cmd;
+- gEduIsrData.cmd = -1;
+-
+- if (!gEduIsrData.opComplete && ret <= 0) {
+- ISR_disable_irq(gEduIsrData.intr);
+-
+- if (ret == -ERESTARTSYS) {
+- up(&gEduIsrData.lock);
+-
+-//if (5 >= erestartsys++)
+-//printk("Pending signals: %08lx-%08lx-%08lx-%08lx\n",
+-//current->pending.signal.sig[0], current->pending.signal.sig[1],current->pending.signal.sig[2], current->pending.signal.sig[3]);
+- continue;
+- }
+- else if (ret == 0) {
+- //gEduIsrData.opComplete = 1;
+- PRINTK("%s: DMA timedout\n", __FUNCTION__);
+-
+- up(&gEduIsrData.lock);
+-//printk("<==%s, ret=0 TimeOut\n", __FUNCTION__);
+-PRINTK4("<==%s, ret=0 TimeOut\n", __FUNCTION__);
+-
+- return 0; // Timed Out
+- }
+-
+-
+-
+- // DMA completes on Done or Error.
+- //rd_data = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS);
++ // Clear existing interrupt
++ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_SET, clearMask);
++
++ do {
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
++ gEduIsrData.flashAddr = 0;
++ gEduIsrData.dramAddr = 0;
+
+-PRINTK("%s: EDU completes but Status is %08x\n", __FUNCTION__, gEduIsrData.status);
+- //rd_data = 0; // Treat as a timeout
+- }
++ /*
++ * Enable L2 Interrupt
++ */
++ gEduIsrData.cmd = NAND_CTRL_READY;
++ gEduIsrData.opComplete = 0;
++ gEduIsrData.status = 0;
++
++ gEduIsrData.mask = HIF_INTR2_CTRL_READY;
++ gEduIsrData.expect = HIF_INTR2_CTRL_READY;
++ gEduIsrData.error = 0;
++ gEduIsrData.intr = HIF_INTR2_CTRL_READY;
+
+- up(&gEduIsrData.lock);
+- }
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
+
+- return gEduIsrData.status;
+-}
+-#endif
++ ISR_enable_irq();
++
++ rd_data = ISR_wait_for_completion();
++ } while (rd_data != 0 && !(rd_data & HIF_INTR2_CTRL_READY));
++ return rd_data;
+
+-/*
+- * Since we cannot use the interrupt, or call schedule, we will have to busy-wait for controller ready.
+- * Executes in interrupt context
+- */
+-int
+-ISR_cache_is_valid(void)
+-{
+- uint32_t rd_data;
+- unsigned long expired = jiffies + HZ/10000; /* 100 usec, enough for any flash op to complete */
+-
+- do {
+- rd_data = ISR_volatileRead(BCM_BASE_ADDRESS+BCHP_HIF_INTR2_CPU_STATUS);
+-
+- } while (!(rd_data & HIF_INTR2_CTRL_READY) && time_before(jiffies, expired));
+- return (0 != (rd_data & HIF_INTR2_CTRL_READY)) ;
+ }
+
+ void ISR_init(void)
+ {
+- int i, ret;
++ int ret;
+ uint32_t intrMask;
+- unsigned long flags;
+
+- //init_MUTEX(&gEduIsrData.lock); // Write lock
+- spin_lock_init(&gJobQ.lock); // Read queue lock
++ spin_lock_init(&gEduIsrData.lock);
+
+- INIT_LIST_HEAD(&gJobQ.jobQ);
+- INIT_LIST_HEAD(&gJobQ.availList);
+- /* Add all nodes from pool to avail list */
+-
+- spin_lock_irqsave(&gJobQ.lock, flags);
+-PRINTK("%s: B4\n", __FUNCTION__);
+-ISR_print_avail_list();
+- for (i=0; i<MAX_JOB_QUEUE_SIZE;i++) {
+- eduIsrNode_t* e = &gEduIsrPool[i];
+-
+- //init_MUTEX(&e->lock);
+- list_add_tail(&e->list, &gJobQ.availList);
+- }
+- spin_unlock_irqrestore(&gJobQ.lock, flags);
+-PRINTK("%s: After\n", __FUNCTION__);
+-ISR_print_avail_list();
+-//BUG();
+-
+ // Mask all L2 interrupts
+ intrMask = ISR_volatileRead(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
+ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_SET, ~intrMask);
+ BARRIER;
+
+- ret = request_irq(BCM_LINUX_CPU_INTR1_IRQ, ISR_isr, SA_SHIRQ, "brcmnand EDU", &gJobQ);
++ ret = request_irq(BCM_LINUX_CPU_INTR1_IRQ, ISR_isr, SA_SHIRQ, "brcmnand EDU", &gEduIsrData);
+ if (ret) {
+ printk(KERN_INFO "%s: request_irq(BCM_LINUX_CPU_INTR1_IRQ) failed ret=%d. Someone not sharing?\n",
+ __FUNCTION__, ret);
+ }
++
+ }
+
+
+Index: drivers/mtd/brcmnand/eduproto.h
+===================================================================
+--- drivers/mtd/brcmnand/eduproto.h (revision 1)
++++ drivers/mtd/brcmnand/eduproto.h (working copy)
+@@ -77,7 +77,7 @@
+
+
+ extern void EDU_init(void);
+-extern int EDU_write(volatile const void*, uint32_t, uint32_t*);
++extern int EDU_write(volatile const void*, uint32_t);
+ extern int EDU_read(volatile void*, uint32_t);
+
+ extern uint32_t EDU_get_error_status_register(void);
+Index: drivers/mtd/brcmnand/brcmnand_priv.h
+===================================================================
+--- drivers/mtd/brcmnand/brcmnand_priv.h (revision 1)
++++ drivers/mtd/brcmnand/brcmnand_priv.h (working copy)
+@@ -38,27 +38,13 @@
+ #include <linux/wait.h>
+ #include <linux/spinlock.h>
+ #include <linux/interrupt.h>
+-#include <linux/list.h>
+
+ //#include "edu.h"
+ #endif
+
+-#define BRCMNAND_CORRECTABLE_ECC_ERROR (1)
+-#define BRCMNAND_SUCCESS (0)
+-#define BRCMNAND_UNCORRECTABLE_ECC_ERROR (-1)
+-#define BRCMNAND_FLASH_STATUS_ERROR (-2)
+-#define BRCMNAND_TIMED_OUT (-3)
+-
+-#ifdef CONFIG_MTD_BRCMNAND_EDU
+-#define BRCMEDU_CORRECTABLE_ECC_ERROR (4)
+-#define BRCMEDU_UNCORRECTABLE_ECC_ERROR (-4)
+-
+-#define BRCMEDU_MEM_BUS_ERROR (-5)
+-
+-
++#if defined( CONFIG_MTD_BRCMNAND_EDU )
+ #define BRCMNAND_malloc(size) kmalloc(size, GFP_DMA)
+ #define BRCMNAND_free(addr) kfree(addr)
+-
+ #else
+ #define BRCMNAND_malloc(size) vmalloc(size)
+ #define BRCMNAND_free(addr) vfree(addr)
+@@ -77,125 +63,31 @@
+ "nop; nop; nop; nop; nop; nop;\n\t" \
+ ".set reorder\n\t")
+
+-/*
+- * Right now we submit a full page Read for queueing, so with a 8KB page,
+- * and an ECC step of 512B, the queue depth is 16. Add 2 for dummy elements
+- * during EDU WAR
+- */
+-#if CONFIG_MTD_BRCMNAND_VERSION <= CONFIG_MTD_BRCMNAND_VERS_3_3
+-#define MAX_NAND_PAGE_SIZE (4<<10)
+
+-#else
+-#define MAX_NAND_PAGE_SIZE (8<<10)
+-#endif
++typedef struct eduIsrData {
++ spinlock_t lock; // For SMP and future double buffering on Read.
++ int cmd; // 1 == Read, 0 == Write
+
+-/* Max queue size is (PageSize/512B_ECCSize)+2 spare for WAR */
+-#define MAX_JOB_QUEUE_SIZE ((MAX_NAND_PAGE_SIZE>>9))
+-
+-typedef enum {
+- ISR_OP_QUEUED = 0,
+- ISR_OP_SUBMITTED = 1,
+- ISR_OP_NEED_WAR = 2,
+- ISR_OP_COMPLETED = 3,
+- ISR_OP_TIMEDOUT = 4
+-} isrOpStatus_t;
+-
+-typedef struct eduIsrNode {
+- struct list_head list;
+- spinlock_t lock; // per Node update lock
+- // int cmd; // 1 == Read, 0 == Write
+-
+- // ISR stuffs
+ uint32_t mask; /* Clear status mask */
+ uint32_t expect; /* Status on success */
+ uint32_t error; /* Status on error */
+ uint32_t intr; /* Interrupt bits */
+ uint32_t status; /* Status read during ISR. There may be several interrupts before completion */
+- isrOpStatus_t opComplete; /* Completion status */
++ int opComplete; /* Completion criterium */
+
+- /* Controller Level params (for queueing) */
+- struct mtd_info* mtd;
+- void* buffer;
+- u_char* oobarea;
+- loff_t offset;
+- int ret;
+- int needBBT;
++ /* For debugging only */
++ uint32_t flashAddr;
++ uint32_t dramAddr;
++} eduIsrData_t;
+
+- /* EDU level params (for ISR) */
+- uint32_t edu_ldw;
+- uint32_t physAddr;
+- uint32_t hif_intr2;
+- uint32_t edu_status;
++extern eduIsrData_t gEduIsrData;
+
+- int refCount; /* Marked for re-use when refCount=0 */
+- unsigned long expired; /* Time stamp for expiration, 3 secs from submission */
+-} eduIsrNode_t;
+-
+-/*
+- * Read/Write Job Q.
+- * Process one page at a time, and queue 512B sector Read or Write EDU jobs.
+- * ISR will wake up the process context thread iff
+- * 1-EDU reports an error, in which case the process context thread need to be awaken
+- * in order to do WAR
+- * 2-Q is empty, in which case the page read/write op is complete.
+- */
+-typedef struct jobQ_t {
+- struct list_head jobQ; /* Nodes queued for EDU jobs */
+- struct list_head availList; /* Free Nodes */
+- spinlock_t lock; /* Queues guarding spin lock */
+- int needWakeUp; /* Wake up Process context thread to do EDU WAR */
+- int cmd; /* 1 == Read, 0 == Write */
+-} isrJobQ_t;
+-
+-extern isrJobQ_t gJobQ;
+-
+ void ISR_init(void);
+
+-/*
+- * Submit the first entry that is in queued state,
+- * assuming queue lock has been held by caller.
+- *
+- * @doubleBuffering indicates whether we need to submit just 1 job or until EDU is full (double buffering)
+- * Return the number of job submitted for read.
+- *
+- * In current version (v3.3 controller), since EDU only have 1 register for EDU_ERR_STATUS,
+- * we can't really do double-buffering without losing the returned status of the previous read-op.
+- */
+-#undef EDU_DOUBLE_BUFFER_READ
+-
+-int brcmnand_isr_submit_job(void);
+-
+-eduIsrNode_t* ISR_queue_read_request(struct mtd_info *mtd,
+- void* buffer, u_char* oobarea, loff_t offset);
+-eduIsrNode_t* ISR_queue_write_request(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset);
+-eduIsrNode_t* ISR_push_request(struct mtd_info *mtd,
+- void* buffer, u_char* oobarea, loff_t offset);
+-
+-
+-int brcmnand_edu_read_completion(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset, uint32_t intr_status);
+-
+-int brcmnand_edu_read_comp_intr(struct mtd_info* mtd,
+- void* buffer, u_char* oobarea, loff_t offset, uint32_t intr_status);
+-
+-#ifdef CONFIG_MTD_BRCMNAND_ISR_QUEUE
+-int brcmnand_edu_write_completion(struct mtd_info *mtd,
+- const void* buffer, const u_char* oobarea, loff_t offset, uint32_t intr_status,
+- int needBBT);
+-#endif
+-eduIsrNode_t* ISR_find_request( isrOpStatus_t opStatus);
+-
+ uint32_t ISR_wait_for_completion(void);
++uint32_t ISR_cache_is_valid(uint32_t clearMask);
+
+-/*
+- * wait for completion with read/write Queue
+- */
+-int ISR_wait_for_queue_completion(void);
+-
+-int ISR_cache_is_valid(void);
+-
+-static __inline__ uint32_t ISR_volatileRead(uint32_t addr)
++static inline uint32_t ISR_volatileRead(uint32_t addr)
+ {
+ volatile uint32_t* pAddr;
+
+@@ -204,7 +96,7 @@
+ return *(uint32_t *)pAddr;
+ }
+
+-static __inline__ void ISR_volatileWrite(uint32_t addr, uint32_t data)
++static inline void ISR_volatileWrite(uint32_t addr, uint32_t data)
+ {
+ volatile uint32_t* pAddr;
+
+@@ -212,7 +104,7 @@
+ *pAddr = (volatile uint32_t)data;
+ }
+
+-static __inline__ void ISR_enable_irq(eduIsrNode_t* req)
++static inline void ISR_enable_irq(void)
+ {
+ uint32_t intrMask;
+ //unsigned long flags;
+@@ -220,68 +112,42 @@
+ //spin_lock_irqsave(&gEduIsrData.lock, flags);
+
+ // Clear status bits
+- ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, req->mask);
++ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, gEduIsrData.mask);
+
++#if 0
++ // Disable everything that may screw us up
++ intrMask = EDU_volatileRead(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
++ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_SET, ~intrMask);
++PRINTK("%s-1: intrMask=%08x\n", __FUNCTION__, intrMask);
++
++ BARRIER;
++#endif
++
+ // Enable interrupt
+- ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_CLEAR, req->intr);
++ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_CLEAR, gEduIsrData.intr);
+
++#if 0
++intrMask = EDU_volatileRead(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_STATUS);
++PRINTK("%s-2: intrMask=%08x\n", __FUNCTION__, intrMask);
++#endif
+ //spin_unlock_irqrestore(&gEduIsrData.lock, flags);
+ }
+
+-static __inline__ void ISR_disable_irq(uint32_t mask)
++static inline void ISR_disable_irq(uint32_t mask)
+ {
+
+ /* Disable L2 interrupts */
+ ISR_volatileWrite(BCM_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_MASK_SET, mask);
+
++ /* Clear L2 interrupts */
++ //EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, mask);
+ }
+
++#endif
+
+-/*
+- * For debugging
+- */
+
+-#ifdef DEBUG_ISR
+
+-static void __inline__
+-ISR_print_queue(void)
+-{
+- eduIsrNode_t* req;
+- //struct list_head* node;
+- int i = 0;
+
+- list_for_each_entry(req, &gJobQ.jobQ, list) {
+-
+- printk("i=%d, cmd=%d, offset=%08llx, flashAddr=%08x, opComp=%d, status=%08x\n",
+- i, gJobQ.cmd, req->offset, req->edu_ldw,req->opComplete, req->status);
+- i++;
+- }
+-}
+-
+-static void __inline__
+-ISR_print_avail_list(void)
+-{
+- eduIsrNode_t* req;
+- //struct list_head* node;
+- int i = 0;
+-
+- printk("AvailList=%p, next=%p\n", &gJobQ.availList, gJobQ.availList.next);
+- list_for_each_entry(req, &gJobQ.availList, list) {
+- printk("i=%d, req=%p, list=%p\n", i, req, &req->list);
+- i++;
+- }
+-}
+-#else
+-#define IS_print_queue()
+-#define ISR_print_avail_list()
+-#endif // DEBUG_ISR
+-
+-
+-#endif // CONFIG_MTD_BRCMNAND_USE_ISR
+-
+-
+-
+-
+ /**
+ * brcmnand_scan - [BrcmNAND Interface] Scan for the BrcmNAND device
+ * @param mtd MTD device structure
+Index: drivers/mtd/brcmnand/edu.c
+===================================================================
+--- drivers/mtd/brcmnand/edu.c (revision 1)
++++ drivers/mtd/brcmnand/edu.c (working copy)
+@@ -37,7 +37,6 @@
+
+
+ #include <linux/mm.h>
+-#include <linux/dma-mapping.h>
+ #include <asm/page.h>
+
+
+@@ -134,11 +133,11 @@
+ * Returns 1 if OK
+ * 0 otherwise
+ */
+-int EDU_buffer_OK(volatile void* vaddr, int command)
++int EDU_buffer_OK(volatile void* vaddr)
+ {
+ unsigned long addr = (unsigned long) vaddr;
+
+-#if !defined(CONFIG_MIPS_BCM7440) && !defined(CONFIG_MIPS_BCM7601) && !defined(CONFIG_MIPS_BCM7635)
++#if !defined(CONFIG_MIPS_BCM7440) && !defined(CONFIG_MIPS_BCM7601)
+ // Requires 32byte alignment only of platforms other than 7440 and 7601 (and Dune)
+ if (addr & 0x1f) {
+ // Must be 32-byte-aligned
+@@ -155,14 +154,11 @@
+ return 0;
+ }
+ #endif
+-
+ else if (!(addr & KSEG0)) {
+ // User Space
+ return 0;
+ }
+
+-
+-
+ // TBD: Since we only enable block for MEM0, we should make sure that the physical
+ // address falls in MEM0.
+
+@@ -170,13 +166,6 @@
+ // VM Address
+ return 0;
+ }
+-
+-#if 0 //def CONFIG_MIPS_BCM7420
+- else if (command == EDU_WRITE && (addr & 0xff)) { // Write must be aligned on 256B
+-printk("Write must be aligned on 128B (addr=%08x)\n", addr);
+- return 0;
+- }
+-#endif
+ return 1;
+ }
+
+@@ -518,10 +507,6 @@
+ * Read data on success or error.
+ */
+
+-extern void
+-dump_nand_regs(struct brcmnand_chip* chip, loff_t offset, uint32_t pa, int which);
+-#define MAX_DUMPS 10
+-extern int numDumps;
+
+ uint32_t EDU_poll(uint32_t address, uint32_t expect, uint32_t error, uint32_t mask)
+ {
+@@ -535,11 +520,6 @@
+ address, expect, mask, error);
+ __sync();
+ rd_data = EDU_volatileRead(address);
+-if (numDumps < MAX_DUMPS)
+- {
+- dump_nand_regs(NULL, 0, 0, numDumps++);
+- }
+-
+ //edu_debug = 0;
+
+ timeout = jiffies + msecs_to_jiffies(1000); // 3 sec timeout for now (testing)
+@@ -548,23 +528,18 @@
+ // while ((rd_data & mask) != (expect & mask)) /* && (i<cnt) */
+ while (((rd_data & mask) != (expect & mask)) && !((rd_data & mask) & error))
+ {
+-
+ if ( 0 /*(i %1000000) == 1 */)
+ {PRINTK("Polling addr=%08x, expect=%08x, mask=%08x!\n", address, expect, mask);
+ PRINTK("EDU_poll read: %08x\n", rd_data);}
+
+ //__sync(); //PLATFORM_IOFLUSH_WAR();
+ rd_data = EDU_volatileRead(address);
+-
+- // JR+ 2008-02-01 Allow other tasks to run while waiting
++
++ // JR+ 2008-02-01 Allow other tasks to run while waiting
+ //cond_resched();
+ cond_resched();
+ // JR- 2008-02-01 Allow other tasks to run while waiting
+-if (numDumps < MAX_DUMPS)
+- {
+- dump_nand_regs(NULL, 0, 0, numDumps++);
+- }
+-
++
+ i++;
+ if(!time_before(jiffies, timeout))
+ {
+@@ -662,7 +637,7 @@
+ // SUN_GISB_ARB_TIMER = 0x10000
+ EDU_volatileWrite(0xb040600c, 0x00010000);
+
+-#elif defined( CONFIG_MIPS_BCM7601 ) || defined( CONFIG_MIPS_BCM7635 )
++#elif defined( CONFIG_MIPS_BCM7601 )
+ {
+ #define ENABLE_256MB_GISB_WINDOW 0x1
+ volatile unsigned long* PCI_GEN_GISB_WINDOW_SIZE =
+@@ -691,7 +666,7 @@
+ }
+
+ #elif defined( CONFIG_MIPS_BCM7420 )
+- // Make sure that RTS grants some cycle to EDU, or we have to steal some from RR
++ // Make sure that RTS grant some cycle to EDU, or we have to steal some
+ {
+ #define BLOCKED_OUT 0x001fff00
+ #define RR_ENABLED 0x80 /* Bit 7 */
+@@ -708,29 +683,6 @@
+ volatile unsigned long* PCI_GEN_PCI_CTRL =
+ (volatile unsigned long*) KSEG1ADDR(0x10440104);
+ volatile unsigned long pci_gen_pci_ctrl;
+-
+-#if 0 // Block out MoCA
+- volatile unsigned long* MEMC_0_1_CLIENT_INFO_59=
+- (volatile unsigned long*) KSEG1ADDR(0x103b10f0);
+- volatile unsigned long memc_client_59;
+- volatile unsigned long* MEMC_0_1_CLIENT_INFO_62=
+- (volatile unsigned long*) KSEG1ADDR(0x103b10fc);
+- volatile unsigned long memc_client_62;
+-
+- /* Bits 08-20 are all 1 == Blocked */
+- memc_client_59 = *MEMC_0_1_CLIENT_INFO_59;
+- printk("MEMC_0_1_CLIENT_INFO_59 Before=%08lx\n", memc_client_59);
+- *MEMC_0_1_CLIENT_INFO_59 = memc_client_59|0x001fff00;
+- *MEMC_0_1_CLIENT_INFO_59 &= ~RR_ENABLED;
+- printk("MEMC_0_1_CLIENT_INFO_59 After blocked out=%08lx\n", *MEMC_0_1_CLIENT_INFO_59);
+-
+- memc_client_62 = *MEMC_0_1_CLIENT_INFO_62;
+- printk("MEMC_0_1_CLIENT_INFO_62 Before=%08lx\n", memc_client_62);
+- *MEMC_0_1_CLIENT_INFO_62 = memc_client_62|0x001fff00;
+- *MEMC_0_1_CLIENT_INFO_62 &= ~RR_ENABLED;
+- printk("MEMC_0_1_CLIENT_INFO_62 After blocked out=%08lx\n", *MEMC_0_1_CLIENT_INFO_62);
+-
+-#endif
+
+ /* Bits 08-20 are all 1 == Blocked */
+ memc_client_17 = *MEMC_0_1_CLIENT_INFO_17;
+@@ -753,7 +705,6 @@
+ pci_gen_pci_ctrl = *PCI_GEN_PCI_CTRL;
+ pci_gen_pci_ctrl &= ~PARK_ON_MASK;
+ pci_gen_pci_ctrl |= PARK_ON_EBI;
+- EDU_volatileWrite(PCI_GEN_PCI_CTRL, pci_gen_pci_ctrl);
+ }
+ #endif
+
+@@ -771,50 +722,37 @@
+ //edu_debug = 0;
+ }
+
+-#ifndef CONFIG_MTD_BRCMNAND_ISR_QUEUE // batch mode
+-
+ /*
+ * THT: 07/31/08: This does not work. One has to write the 512B Array from the NAND controller into
+ * the EXT registers for it to work. Will fix it when I come back.
+ */
+-int EDU_write(volatile const void* virtual_addr_buffer,
+- uint32_t external_physical_device_address,
+- uint32_t* physAddr)
++int EDU_write(volatile const void* virtual_addr_buffer, uint32_t external_physical_device_address)
+ {
+- //uint32_t phys_mem;
++ uint32_t phys_mem;
+ // uint32_t rd_data;
+- //unsigned long flags;
++ unsigned long flags;
+
+ edu_debug = gdebug;
+-
+-#if 0
+ phys_mem = EDU_virt_to_phys((void *)virtual_addr_buffer);
+-
+-#else
+- // EDU is not a PCI device
+- // THT: TBD: Need to adjust for cache line size here, especially on 7420.
+- *physAddr = dma_map_single(NULL, virtual_addr_buffer, EDU_LENGTH_VALUE, DMA_TO_DEVICE);
+-#endif
+-
+- if (!(*physAddr)) {
++ if (!phys_mem) {
+ return (-1);
+ }
+
+ //edu_debug = 4;
+
+-//printk("EDU_write: vBuff: %p physDev: %08x, PA=%08x\n",
+-// virtual_addr_buffer, external_physical_device_address, phys_mem);
++//PRINTK("EDU_write: vBuff: %p physDev: %08x, PA=%08x\n",
++//virtual_addr_buffer, external_physical_device_address, phys_mem);
+
+ #ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+- down(&gEduIsrData.lock);
+- gEduIsrData.edu_ldw = external_physical_device_address;
+- gEduIsrData.physAddr = *physAddr;
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
++ gEduIsrData.flashAddr = external_physical_device_address;
++ gEduIsrData.dramAddr = phys_mem;
+
+ /*
+ * Enable L2 Interrupt
+ */
+ gEduIsrData.cmd = EDU_WRITE;
+- gEduIsrData.opComplete = ISR_OP_SUBMITTED;
++ gEduIsrData.opComplete = 0;
+ gEduIsrData.status = 0;
+
+ /* On write we wait for both DMA done|error and Flash Status */
+@@ -823,8 +761,8 @@
+ gEduIsrData.error = HIF_INTR2_EDU_ERR;
+ gEduIsrData.intr = HIF_INTR2_EDU_DONE_MASK|HIF_INTR2_CTRL_READY;
+
+- up(&gEduIsrData.lock);
+- ISR_enable_irq(&gEduIsrData);
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
++ ISR_enable_irq();
+
+ #else
+ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EDU_CLEAR_MASK);
+@@ -838,17 +776,15 @@
+
+ //EDU_waitForNoPendingAndActiveBit();
+
+-// Already covered by dma_map_single()
+-// dma_cache_wback((unsigned long) virtual_addr_buffer, EDU_LENGTH_VALUE);
+
+- EDU_issue_command(*physAddr, external_physical_device_address, EDU_WRITE); /* 1: Is a Read, 0 Is a Write */
++ dma_cache_wback((unsigned long) virtual_addr_buffer, 512);
+
++ EDU_issue_command(phys_mem, external_physical_device_address, EDU_WRITE); /* 1: Is a Read, 0 Is a Write */
++
+ // rd_data = EDU_poll(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_STATUS, HIF_INTR2_EDU_DONE, HIF_INTR2_EDU_DONE);
+ // EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+
+ //edu_debug = 0;
+-//printk("<-- %s\n", __FUNCTION__);
+-
+ return 0;
+ }
+
+@@ -863,7 +799,7 @@
+ // uint32_t rd_data;
+ int ret;
+ int retries = 4;
+- //unsigned long flags;
++ unsigned long flags;
+
+
+ static int toggle;
+@@ -877,31 +813,33 @@
+ #endif
+
+ //PRINTK("--> %s: vAddr=%p, ext=%08x\n", __FUNCTION__, virtual_addr_buffer, external_physical_device_address);
+-#if 0
+ phys_mem = EDU_virt_to_phys((void *)virtual_addr_buffer);
+ if (!phys_mem) {
+ return (-1);
+ }
+-#else
+- // THT: TBD: Need to adjust for cache line size here, especially on 7420.
+- phys_mem = dma_map_single(NULL, virtual_addr_buffer, EDU_LENGTH_VALUE, DMA_FROM_DEVICE);
+-#endif
+
+ if (edu_debug) PRINTK("EDU_read: vBuff: %p physDev: %08x, PA=%08x\n",
+ virtual_addr_buffer, external_physical_device_address, phys_mem);
+
+ #ifdef CONFIG_MTD_BRCMNAND_USE_ISR
+- down(&gEduIsrData.lock);
+- gEduIsrData.edu_ldw = external_physical_device_address;
+- gEduIsrData.physAddr = phys_mem;
++ spin_lock_irqsave(&gEduIsrData.lock, flags);
++ gEduIsrData.flashAddr = external_physical_device_address;
++ gEduIsrData.dramAddr = phys_mem;
+
+ /*
+ * Enable L2 Interrupt
+ */
+ gEduIsrData.cmd = EDU_READ;
+- gEduIsrData.opComplete = ISR_OP_SUBMITTED;
++ gEduIsrData.opComplete = 0;
+ gEduIsrData.status = 0;
+
++#if 0
++ /* On Read we only wait for DMA completion or Error */
++ gEduIsrData.mask = HIF_INTR2_EDU_CLEAR_MASK|HIF_INTR2_CTRL_READY;
++ gEduIsrData.expect = HIF_INTR2_EDU_DONE;
++ gEduIsrData.error = HIF_INTR2_EDU_ERR;
++ gEduIsrData.intr = HIF_INTR2_EDU_DONE_MASK;
++#endif
+
+ // We must also wait for Ctlr_Ready, otherwise the OOB is not correct, since we read the OOB bytes off the controller
+
+@@ -910,9 +848,9 @@
+ // On error we also want Ctrlr-Ready because for COR ERR, the Hamming WAR depends on the OOB bytes.
+ gEduIsrData.error = HIF_INTR2_EDU_ERR;
+ gEduIsrData.intr = HIF_INTR2_EDU_DONE_MASK;
+- up(&gEduIsrData.lock);
++ spin_unlock_irqrestore(&gEduIsrData.lock, flags);
+
+- ISR_enable_irq(&gEduIsrData);
++ ISR_enable_irq();
+ #else
+
+ EDU_volatileWrite(EDU_BASE_ADDRESS + BCHP_HIF_INTR2_CPU_CLEAR, HIF_INTR2_EDU_CLEAR_MASK);
+@@ -928,7 +866,29 @@
+ //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+ EDU_reset_done();
+
++#if 0
++ if( (EDU_volatileRead(EDU_BASE_ADDRESS + EDU_DONE) && 0x00000003) != 0)
++ {
++ PRINTK("EDU_DONE != 0!!!\n");
++ }
++#endif
+ EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_ERR_STATUS, 0x00000000);
++#if 0
++ if( EDU_volatileRead(EDU_BASE_ADDRESS + EDU_ERR_STATUS) != 0)
++ {
++ PRINTK("EDU_ERR_STATUS != 0!!!\n");
++ }
++
++#endif
++#if 1 //ndef CONFIG_BMIPS4380
++ dma_cache_inv((unsigned long) virtual_addr_buffer, EDU_LENGTH_VALUE);
++#else
++ {
++ extern void (*flush_cache_all)(void);
++
++ flush_cache_all();
++ }
++#endif
+
+ EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_LENGTH, EDU_LENGTH_VALUE);
+
+@@ -956,13 +916,8 @@
+ HIF_INTR2_EDU_DONE_MASK);
+ #endif
+
+- (void) dma_unmap_single(NULL, phys_mem, EDU_LENGTH_VALUE, DMA_FROM_DEVICE);
+-
+ if (edu_debug) PRINTK("<-- %s ret=%08x\n", __FUNCTION__, ret);
+ //edu_debug = 0;
+ if (edu_debug > 3 && ret) {show_stack(current,NULL);dump_stack();}
+ return ret;
+ }
+-
+-#endif // Batch mode
+-
--- /dev/null
+Index: drivers/mtd/brcmnand/bcm7xxx-nand.c
+===================================================================
+--- drivers/mtd/brcmnand/bcm7xxx-nand.c (revision 1)
++++ drivers/mtd/brcmnand/bcm7xxx-nand.c (working copy)
+@@ -149,20 +149,33 @@
+
+ static struct mtd_partition bcm7XXX_no_xor_partition[] =
+ {
+- /* XOR disabled: Everything is shifted down 4MB */
+- { name: N_ROOTFS, offset: 0x00400000, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) }, // Less 1MB for BBT
+- { name: N_ALL, offset: 0, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) },
+- { name: N_KERNEL, offset: 0x00b00000, size: 4<<20 },
+- /* BBT0 1MB not mountable by anyone */
+-
+- /* Following partitions only present on flash with size > 512MB */
+- { name: N_DATA, offset: 0x20000000, size: 0 },
+- /* BBT1 4MB not mountable by anyone */
+- {name: NULL, offset: 0, size: 0} /* End marker */
++ { name: N_ROOTFS, offset: 0, size: DEFAULT_ROOTFS_SIZE },
++#ifdef CONFIG_MTD_ECM_PARTITION
++ { name: N_AVAIL1, offset: DEFAULT_ROOTFS_SIZE, size: DEFAULT_AVAIL1_SIZE },
++ { name: N_OCAP, offset: DEFAULT_ROOTFS_SIZE+DEFAULT_AVAIL1_SIZE, size: DEFAULT_OCAP_SIZE },
++#endif
++#ifdef USE_SPLASH
++ { name: N_KERNEL, offset: 0x00200000, size: 4<<20 },
++ { name: "boot", offset: 0x00600000, size: 4<<20 },
++ { name: "bootimg", offset: 0x00A00000, size: 2<<20 },
++#else
++ { name: N_KERNEL, offset: 0x00400000, size: 4<<20 },
++ { name: "boot", offset: 0x07800000, size: 4<<20 },
++#endif
++ { name: N_CFE, offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: N_NVM, offset: 0x07E00000, size: 1<<20 },
++ /* BBT 1MB not mountable by anyone */
++ { name: N_DATA, offset: 0x20000000, size: 0 },
++/* Add 1 extra place-holder partition for splash, and a safety guard element */
++ {name: NULL, offset: 0, size: 0},
++ {name: NULL, offset: 0, size: 0}
+ };
+
+ static struct mtd_partition bcm7XXX_new_partition[] =
+ {
++
+ { name: N_ROOTFS, offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ { name: N_ALL, offset: 0x0, size: DEFAULT_ROOTFS_SIZE - (DEFAULT_BBT0_SIZE_MB <<20) },
+ { name: N_KERNEL, offset: 0x00800000, size: 4<<20 },
+@@ -267,7 +280,8 @@
+ if (device_size(mtd) <= (512ULL <<20)) {
+ bcm7XXX_nand_parts[ALL_PART].size =
+ device_size(mtd) - (uint64_t) (DEFAULT_BBT0_SIZE_MB<<20);
+- *numParts = 3;
++// *numParts = 3;
++ *numParts = 7;
+ }
+ else {
+ bcm7XXX_nand_parts[ALL_PART].size = ((512-DEFAULT_BBT1_SIZE_MB)<<20);
--- /dev/null
+Index: include/linux/resource.h
+===================================================================
+--- include/linux/resource.h (revision 1)
++++ include/linux/resource.h (working copy)
+@@ -62,7 +62,8 @@
+ * THT: 8MB is unreasonably high for embedded systems,
+ * for which, by default, only 32MB is allocated to the kernel
+ */
+-#define _STK_LIM (1<<20)
++/* #define _STK_LIM (1<<20) */
++#define _STK_LIM (4<<20)
+
+ #else
+ #define _STK_LIM (8*1024*1024)
--- /dev/null
+Index: arch/mips/Kconfig
+===================================================================
+--- arch/mips/Kconfig (revision 1)
++++ arch/mips/Kconfig (working copy)
+@@ -429,7 +429,6 @@
+ select BRCM_SCM_L2
+ select MTD_BRCMNAND
+ select MTD_BRCMNAND_VERIFY_WRITE
+- select MTD_BLOCK_ROMBLOCK
+
+ config MIPS_BCM7440BX
+ bool "Support for BCM97440Bx with NOR flash"
--- /dev/null
+Index: include/asm-mips/serial.h
+===================================================================
+--- include/asm-mips/serial.h (revision 1)
++++ include/asm-mips/serial.h (working copy)
+@@ -130,8 +130,10 @@
+ #elif defined(CONFIG_MIPS_BCM7440A0) || defined(CONFIG_MIPS_BCM7325)
+ // 7440A0 uses UARTB as default UART. Hopefully this will be fixed in a later revision.
+ #define BRCM_UART_PORT_DEFNS \
+- _BRCM_16550_INIT(BRCM_SERIAL1_IRQ, BRCM_SERIAL1_BASE), \
+- _BRCM_16550_INIT(BRCM_SERIAL2_IRQ, BRCM_SERIAL2_BASE),
++ _BRCM_16550_INIT(BRCM_SERIAL1_IRQ, BRCM_SERIAL1_BASE),
++
++// _BRCM_16550_INIT(BRCM_SERIAL1_IRQ, BRCM_SERIAL1_BASE), \
++// _BRCM_16550_INIT(BRCM_SERIAL2_IRQ, BRCM_SERIAL2_BASE),
+
+ #elif defined(CONFIG_MIPS_BCM7401B0) || defined(CONFIG_MIPS_BCM7402) || \
+ defined(CONFIG_MIPS_BCM7401C0) || defined(CONFIG_MIPS_BCM7403A0)
--- /dev/null
+Index: arch/mips/Makefile
+===================================================================
+--- arch/mips/Makefile (revision 1)
++++ arch/mips/Makefile (working copy)
+@@ -18,15 +18,15 @@
+ # Select the object file format to substitute into the linker script.
+ #
+ ifdef CONFIG_CPU_LITTLE_ENDIAN
+-32bit-tool-prefix = mipsel-linux-
+-64bit-tool-prefix = mips64el-linux-
++32bit-tool-prefix = mipsel-oe-linux-
++64bit-tool-prefix = mips64el-oe-linux-
+ 32bit-bfd = elf32-tradlittlemips
+ 64bit-bfd = elf64-tradlittlemips
+ 32bit-emul = elf32ltsmip
+ 64bit-emul = elf64ltsmip
+ else
+-32bit-tool-prefix = mips-linux-
+-64bit-tool-prefix = mips64-linux-
++32bit-tool-prefix = mips-oe-linux-
++64bit-tool-prefix = mips64-oe-linux-
+ 32bit-bfd = elf32-tradbigmips
+ 64bit-bfd = elf64-tradbigmips
+ 32bit-emul = elf32btsmip
--- /dev/null
+--- stblinux-2.6.18.org/Makefile 2008-10-03 06:15:18.000000000 +0900
++++ stblinux-2.6.18/Makefile 2009-03-06 20:34:04.000000000 +0900
+@@ -867,7 +867,8 @@
+ endef
+
+ define filechk_version.h
+- (echo \#define LINUX_VERSION_CODE $(shell \
++ (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \
++ echo \#define LINUX_VERSION_CODE $(shell \
+ expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
+ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
+ endef
--- /dev/null
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18-6.6
+# Mon Mar 23 16:50:00 2009
+#
+CONFIG_MIPS=y
+
+#
+# Machine selection
+#
+# CONFIG_MIPS_BCM3548BX_SPI is not set
+# CONFIG_MIPS_BCM3548BX_NAND is not set
+# CONFIG_MIPS_BCM3563CX is not set
+# CONFIG_MIPS_BCM3563CX_DDR1 is not set
+# CONFIG_MIPS_BCM3563CX_NAND is not set
+# CONFIG_MIPS_BCM7038CX is not set
+# CONFIG_MIPS_BCM7118AX is not set
+# CONFIG_MIPS_BCM7118AX_NAND is not set
+# CONFIG_MIPS_BCM7118CX is not set
+# CONFIG_MIPS_BCM7118CX_NAND is not set
+# CONFIG_MIPS_BCM7405BX is not set
+# CONFIG_MIPS_BCM7405DX is not set
+# CONFIG_MIPS_BCM97459BX is not set
+# CONFIG_MIPS_BCM7405BX_NAND is not set
+# CONFIG_MIPS_BCM7405DX_NAND is not set
+# CONFIG_MIPS_BCM97459BX_NAND is not set
+# CONFIG_MIPS_BCM7335BX is not set
+# CONFIG_MIPS_BCM7336AX is not set
+# CONFIG_MIPS_BCM7420AX is not set
+# CONFIG_MIPS_BCM97456DX is not set
+# CONFIG_MIPS_BCM7400DX is not set
+# CONFIG_MIPS_BCM7400DX_NAND is not set
+# CONFIG_MIPS_BCM97456DX_NAND is not set
+# CONFIG_MIPS_BCM97455CX is not set
+# CONFIG_MIPS_BCM97455CX_NAND is not set
+# CONFIG_MIPS_BCM7401CX is not set
+# CONFIG_MIPS_BCM7401CX_NAND is not set
+# CONFIG_MIPS_BCM97401CX_SW is not set
+# CONFIG_MIPS_BCM97458AX is not set
+# CONFIG_MIPS_BCM97458AX_NAND is not set
+# CONFIG_MIPS_BCM7402CX is not set
+# CONFIG_MIPS_BCM7402CX_NAND is not set
+# CONFIG_MIPS_BCM7454 is not set
+# CONFIG_MIPS_BCM7403AX is not set
+# CONFIG_MIPS_BCM7403AX_NAND is not set
+# CONFIG_MIPS_BCM7325BX is not set
+CONFIG_MIPS_BCM7325BX_NAND=y
+# CONFIG_MIPS_BCM7440BX is not set
+# CONFIG_MIPS_BCM7440BX_NAND is not set
+# CONFIG_MIPS_BCM7443AX is not set
+# CONFIG_MIPS_BCM7601BX_NAND is not set
+# CONFIG_MIPS_MTX1 is not set
+# CONFIG_MIPS_BOSPORUS is not set
+# CONFIG_MIPS_PB1000 is not set
+# CONFIG_MIPS_PB1100 is not set
+# CONFIG_MIPS_PB1500 is not set
+# CONFIG_MIPS_PB1550 is not set
+# CONFIG_MIPS_PB1200 is not set
+# CONFIG_MIPS_DB1000 is not set
+# CONFIG_MIPS_DB1100 is not set
+# CONFIG_MIPS_DB1500 is not set
+# CONFIG_MIPS_DB1550 is not set
+# CONFIG_MIPS_DB1200 is not set
+# CONFIG_MIPS_MIRAGE is not set
+# CONFIG_BASLER_EXCITE is not set
+# CONFIG_MIPS_COBALT is not set
+# CONFIG_MACH_DECSTATION is not set
+# CONFIG_MIPS_EV64120 is not set
+# CONFIG_MIPS_EV96100 is not set
+# CONFIG_MIPS_IVR is not set
+# CONFIG_MIPS_ITE8172 is not set
+# CONFIG_MACH_JAZZ is not set
+# CONFIG_LASAT is not set
+# CONFIG_MIPS_ATLAS is not set
+# CONFIG_MIPS_MALTA is not set
+# CONFIG_MIPS_SEAD is not set
+# CONFIG_WR_PPMC is not set
+# CONFIG_MIPS_SIM is not set
+# CONFIG_MOMENCO_JAGUAR_ATX is not set
+# CONFIG_MOMENCO_OCELOT is not set
+# CONFIG_MOMENCO_OCELOT_3 is not set
+# CONFIG_MOMENCO_OCELOT_C is not set
+# CONFIG_MOMENCO_OCELOT_G is not set
+# CONFIG_MIPS_XXS1500 is not set
+# CONFIG_PNX8550_V2PCI is not set
+# CONFIG_PNX8550_JBS is not set
+# CONFIG_DDB5477 is not set
+# CONFIG_MACH_VR41XX is not set
+# CONFIG_PMC_YOSEMITE is not set
+# CONFIG_QEMU is not set
+# CONFIG_MARKEINS is not set
+# CONFIG_SGI_IP22 is not set
+# CONFIG_SGI_IP27 is not set
+# CONFIG_SGI_IP32 is not set
+# CONFIG_SIBYTE_BIGSUR is not set
+# CONFIG_SIBYTE_SWARM is not set
+# CONFIG_SIBYTE_SENTOSA is not set
+# CONFIG_SIBYTE_RHONE is not set
+# CONFIG_SIBYTE_CARMEL is not set
+# CONFIG_SIBYTE_PTSWARM is not set
+# CONFIG_SIBYTE_LITTLESUR is not set
+# CONFIG_SIBYTE_CRHINE is not set
+# CONFIG_SIBYTE_CRHONE is not set
+# CONFIG_SNI_RM200_PCI is not set
+# CONFIG_TOSHIBA_JMR3927 is not set
+# CONFIG_TOSHIBA_RBTX4927 is not set
+# CONFIG_TOSHIBA_RBTX4938 is not set
+CONFIG_BRCM_BUILD_TARGET="unknown"
+CONFIG_LONG_LONG_SUPPORT=y
+CONFIG_BRCM_COMMON_PCI=y
+# CONFIG_MIPS_BCM_NDVD is not set
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_DMA_NONCOHERENT=y
+CONFIG_DMA_NEED_PCI_MAP_STATE=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
+CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
+CONFIG_IRQ_CPU=y
+CONFIG_MIPS_BRCM97XXX=y
+# CONFIG_BMIPS3300 is not set
+# CONFIG_BMIPS4380 is not set
+# CONFIG_BMIPS5000 is not set
+# CONFIG_MTI_R5K is not set
+# CONFIG_MTI_R24K is not set
+CONFIG_MTI_R34K=y
+CONFIG_BRCM_SCM_L2=y
+CONFIG_MIPS_BCM7325B0=y
+CONFIG_MIPS_BCM7325=y
+CONFIG_MIPS_BRCM=y
+# CONFIG_BRCM_7XXX_SERIAL is not set
+CONFIG_SERIAL=y
+CONFIG_BRCM_SKIP_CHECK_BOOTROM=y
+CONFIG_MIPS_L1_CACHE_SHIFT=7
+CONFIG_SYS_SUPPORTS_PM=y
+
+#
+# Power management
+#
+CONFIG_BRCM_PM=y
+
+#
+# CPU selection
+#
+# CONFIG_CPU_MIPS32_R1 is not set
+CONFIG_CPU_MIPS32_R2=y
+# CONFIG_CPU_MIPS64_R1 is not set
+# CONFIG_CPU_MIPS64_R2 is not set
+# CONFIG_CPU_R3000 is not set
+# CONFIG_CPU_TX39XX is not set
+# CONFIG_CPU_VR41XX is not set
+# CONFIG_CPU_R4300 is not set
+# CONFIG_CPU_R4X00 is not set
+# CONFIG_CPU_TX49XX is not set
+# CONFIG_CPU_R5000 is not set
+# CONFIG_CPU_R5432 is not set
+# CONFIG_CPU_R6000 is not set
+# CONFIG_CPU_NEVADA is not set
+# CONFIG_CPU_R8000 is not set
+# CONFIG_CPU_R10000 is not set
+# CONFIG_CPU_RM7000 is not set
+# CONFIG_CPU_RM9000 is not set
+# CONFIG_CPU_SB1 is not set
+CONFIG_SYS_HAS_CPU_MIPS32_R2=y
+CONFIG_CPU_MIPS32=y
+CONFIG_CPU_MIPSR2=y
+CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
+CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
+
+#
+# Kernel type
+#
+CONFIG_32BIT=y
+# CONFIG_64BIT is not set
+CONFIG_PAGE_SIZE_4KB=y
+# CONFIG_PAGE_SIZE_8KB is not set
+# CONFIG_PAGE_SIZE_16KB is not set
+# CONFIG_PAGE_SIZE_64KB is not set
+CONFIG_BOARD_SCACHE=y
+CONFIG_MIPS_CPU_SCACHE=y
+CONFIG_CPU_HAS_PREFETCH=y
+CONFIG_MIPS_MT_DISABLED=y
+# CONFIG_MIPS_MT_SMTC is not set
+# CONFIG_MIPS_MT_SMP is not set
+# CONFIG_MIPS_VPE_LOADER is not set
+CONFIG_SYS_SUPPORTS_MULTITHREADING=y
+# CONFIG_64BIT_PHYS_ADDR is not set
+CONFIG_CPU_HAS_LLSC=y
+CONFIG_CPU_HAS_SYNC=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_CPU_SUPPORTS_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_HZ_48 is not set
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_128 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_256 is not set
+CONFIG_HZ_1000=y
+# CONFIG_HZ_1024 is not set
+CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
+CONFIG_HZ=1000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_KLOB is not set
+# CONFIG_VMALLOC_NOGUARD is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Bus options (PCI, PCMCIA, EISA, ISA, TC)
+#
+CONFIG_HW_HAS_PCI=y
+CONFIG_PCI=y
+CONFIG_MMU=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_TRAD_SIGNALS=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+
+#CONFIG_IP_PNP=y
+#CONFIG_IP_PNP_DHCP=y
+#CONFIG_IP_PNP_BOOTP=y
+#CONFIG_IP_PNP_RARP=y
+#
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_MTD_BLOCK_ROMBLOCK is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+CONFIG_MTD_BRCMNAND=y
+CONFIG_MTD_BRCMNAND_VERIFY_WRITE=y
+CONFIG_MTD_BRCMNAND_VERSION=3
+CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING=y
+#CONFIG_MTD_BRCMNAND_USE_ISR=y
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=m
+# CONFIG_SATA_FORCE_SPINUP is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+#
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_NETIF_DMA=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_BCMINTEMAC_7038=y
+CONFIG_BCMINTEMAC_NETLINK=y
+CONFIG_BCMINTEMAC_7038_STREAMING=y
+# CONFIG_BCMINTEMAC_7038_EXTMII is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_DM9000 is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_PCI is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=m
+
+#
+## Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=m
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+# CONFIG_SERIAL_8250_PCI is not set
+CONFIG_SERIAL_8250_NR_UARTS=0
+CONFIG_SERIAL_8250_RUNTIME_UARTS=0
+# CONFIG_SERIAL_8250_EXTENDED is not set
+#
+#
+#
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+#
+
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+CONFIG_USB_BRCM=y
+# CONFIG_USB_BRCM_PWR_CTL is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+CONFIG_USB_PEGASUS=y
+CONFIG_USB_RTL8150=y
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=y
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=y
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=y
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# # CONFIG_REISERFS_PROC_INFO is not set
+# # CONFIG_REISERFS_FS_XATTR is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_XFS_FS=m
+CONFIG_XFS_EXPORT=y
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+#
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+#
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SOFTIRQS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_YAFFS_FS=y
+CONFIG_YAFFS_YAFFS1=y
+# CONFIG_YAFFS_DOES_ECC is not set
+CONFIG_YAFFS_YAFFS2=y
+CONFIG_YAFFS_AUTO_YAFFS2=y
+# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
+CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10
+# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
+# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
+CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=y
+CONFIG_SQUASHFS=y
+CONFIG_SQUASHFS_EMBEDDED=y
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+CONFIG_SQUASHFS_VMALLOC=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_DEBUG2 is not set
+#
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_FS is not set
+# CONFIG_WANT_EXTRA_DEBUG_INFORMATION is not set
+CONFIG_CROSSCOMPILE=y
+CONFIG_CMDLINE="rw console=ttyS0,115200n8"
+CONFIG_SYS_SUPPORTS_KGDB=y
+# CONFIG_MIPS_BRCM_SIM is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
rm -R ${D}/etc/profile.d
}
+do_install_append_vuplus() {
+ rm -R ${D}/etc/profile.d
+}
+
python populate_packages_prepend () {
mcdir = bb.data.expand('${datadir}/mc', d)
do_split_packages(d, mcdir, '^mc\.[hm][ile][npn].*\.(.*)$',
done
}
+
mtd_utils = " docfdisk \
doc_loadbios \
flashcp \
ubi-utils/new-utils/ubirmvol \
ubi-utils/new-utils/ubiupdatevol"
+mtd_utils_vuplus = " docfdisk \
+ doc_loadbios \
+ flashcp \
+ flash_erase \
+ flash_eraseall \
+ flash_info \
+ flash_lock \
+ flash_otp_dump \
+ flash_otp_info \
+ flash_unlock \
+ ftl_check \
+ ftl_format \
+ jffs2dump \
+ mkfs.jffs2 \
+ mtd_debug \
+ nanddump \
+ nandtest \
+ nandwrite \
+ nftldump \
+ nftl_format \
+ recv_image \
+ rfddump \
+ rfdformat \
+ serve_image \
+ sumtool "
+
PACKAGES =+ "mkfs-jffs mkfs-jffs2 mkfs-ubifs"
FILES_mkfs-jffs = "${bindir}/mkfs.jffs"
FILES_mkfs-jffs2 = "${bindir}/mkfs.jffs2"
--- /dev/null
+diff --git a/Makefile b/Makefile
+index bdf3e48..1c5fe0e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -7,7 +7,7 @@ ifeq ($(WITHOUT_XATTR), 1)
+ CPPFLAGS += -DWITHOUT_XATTR
+ endif
+
+-SUBDIRS = mkfs.ubifs ubi-utils
++#SUBDIRS = mkfs.ubifs ubi-utils
+
+ TARGETS = ftl_format flash_erase flash_eraseall nanddump doc_loadbios \
+ ftl_check mkfs.jffs2 flash_lock flash_unlock flash_info \
file://fix-ignoreerrors-git.patch;patch=1 \
file://lzo_1x-git.patch;patch=1"
+SRC_URI_vuplus = "git://git.infradead.org/mtd-utils.git;protocol=git;tag=${TAG} \
+ file://add-exclusion-to-mkfs-jffs2-git-2.patch;patch=1 \
+ file://fix-ignoreerrors-git.patch;patch=1 \
+ file://makefile.patch;patch=1 \
+ file://lzo_1x-git.patch;patch=1"
+
S = "${WORKDIR}/git/"
do_configure_prepend() {
--- /dev/null
+#!/bin/sh
+#
+# manage network interfaces and configure some networking options
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+if ! [ -x /sbin/ifup ]; then
+ exit 0
+fi
+
+spoofprotect_rp_filter () {
+ # This is the best method: turn on Source Address Verification and get
+ # spoof protection on all current and future interfaces.
+
+ if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
+ for f in /proc/sys/net/ipv4/conf/*; do
+ [ -e $f/rp_filter ] && echo 1 > $f/rp_filter
+ done
+ return 0
+ else
+ return 1
+ fi
+}
+
+spoofprotect () {
+ echo -n "Setting up IP spoofing protection: "
+ if spoofprotect_rp_filter; then
+ echo "rp_filter."
+ else
+ echo "FAILED."
+ fi
+}
+
+ip_forward () {
+ if [ -e /proc/sys/net/ipv4/ip_forward ]; then
+ echo -n "Enabling packet forwarding... "
+ echo 1 > /proc/sys/net/ipv4/ip_forward
+ echo "done."
+ fi
+}
+
+syncookies () {
+ if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
+ echo -n "Enabling TCP/IP SYN cookies... "
+ echo 1 > /proc/sys/net/ipv4/tcp_syncookies
+ echo "done."
+ fi
+}
+
+wpa_supplicantcheck () {
+ if [ -e /var/run/wpa_supplicant ]; then
+ echo -n "disabling wpa_supplicant "
+ start-stop-daemon -K -x /usr/sbin/wpa_supplicant
+ # HACK: wpa_supplicant sometimes doesn't quit properly on SIGTERM.
+ if [ -e /var/run/wpa_supplicant ]; then
+ echo -n "wpa_supplicant still running, force kill now.. "
+ killall -9 /usr/sbin/wpa_supplicant
+ rm -rf /var/run/wpa_supplicant
+ echo "done."
+ fi
+ echo "done."
+ fi
+}
+
+doopt () {
+ optname=$1
+ default=$2
+ opt=`grep "^$optname=" /etc/network/options`
+ if [ -z "$opt" ]; then
+ opt="$optname=$default"
+ fi
+ optval=${opt#$optname=}
+ if [ "$optval" = "yes" ]; then
+ eval $optname
+ fi
+}
+
+case "$1" in
+ start)
+ doopt spoofprotect yes
+ doopt syncookies no
+ doopt ip_forward no
+
+ echo -n "Configuring network interfaces... "
+ wpa_supplicantcheck
+ ifup -a
+ echo "done."
+ ;;
+ stop)
+ if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts |
+ grep -q "^/ nfs$"; then
+ echo "NOT deconfiguring network interfaces: / is an NFS mount"
+ elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts |
+ grep -q "^/ smbfs$"; then
+ echo "NOT deconfiguring network interfaces: / is an SMB mount"
+ elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts |
+ grep -qE '^(nfs|smbfs|ncp|coda)$'; then
+ echo "NOT deconfiguring network interfaces: network shares still mounted."
+ else
+ echo -n "Deconfiguring network interfaces... "
+ ifdown -a
+ wpa_supplicantcheck
+ echo "done."
+ fi
+ ;;
+ force-reload|restart)
+ echo -n "Reconfiguring network interfaces... "
+ ifdown -a
+ wpa_supplicantcheck
+ ifup -a
+ echo "done."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
--- /dev/null
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+auto lo
+iface lo inet loopback
+
+# Ethernet
+auto eth0
+iface eth0 inet dhcp
+
--- /dev/null
+#!/bin/sh
+#
+# manage network interfaces and configure some networking options
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+if ! [ -x /sbin/ifup ]; then
+ exit 0
+fi
+
+spoofprotect_rp_filter () {
+ # This is the best method: turn on Source Address Verification and get
+ # spoof protection on all current and future interfaces.
+
+ if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
+ for f in /proc/sys/net/ipv4/conf/*; do
+ [ -e $f/rp_filter ] && echo 1 > $f/rp_filter
+ done
+ return 0
+ else
+ return 1
+ fi
+}
+
+spoofprotect () {
+ echo -n "Setting up IP spoofing protection: "
+ if spoofprotect_rp_filter; then
+ echo "rp_filter."
+ else
+ echo "FAILED."
+ fi
+}
+
+ip_forward () {
+ if [ -e /proc/sys/net/ipv4/ip_forward ]; then
+ echo -n "Enabling packet forwarding... "
+ echo 1 > /proc/sys/net/ipv4/ip_forward
+ echo "done."
+ fi
+}
+
+syncookies () {
+ if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
+ echo -n "Enabling TCP/IP SYN cookies... "
+ echo 1 > /proc/sys/net/ipv4/tcp_syncookies
+ echo "done."
+ fi
+}
+
+wpa_supplicantcheck () {
+ if [ -e /var/run/wpa_supplicant ]; then
+ echo -n "disabling wpa_supplicant "
+ start-stop-daemon -K -x /usr/sbin/wpa_supplicant
+ # HACK: wpa_supplicant sometimes doesn't quit properly on SIGTERM.
+ if [ -e /var/run/wpa_supplicant ]; then
+ echo -n "wpa_supplicant still running, force kill now.. "
+ killall -9 /usr/sbin/wpa_supplicant
+ rm -rf /var/run/wpa_supplicant
+ echo "done."
+ fi
+ echo "done."
+ fi
+}
+
+doopt () {
+ optname=$1
+ default=$2
+ opt=`grep "^$optname=" /etc/network/options`
+ if [ -z "$opt" ]; then
+ opt="$optname=$default"
+ fi
+ optval=${opt#$optname=}
+ if [ "$optval" = "yes" ]; then
+ eval $optname
+ fi
+}
+
+case "$1" in
+ start)
+ doopt spoofprotect yes
+ doopt syncookies no
+ doopt ip_forward no
+
+ echo -n "Configuring network interfaces... "
+ wpa_supplicantcheck
+ ifup -a
+ echo "done."
+ ;;
+ stop)
+ if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts |
+ grep -q "^/ nfs$"; then
+ echo "NOT deconfiguring network interfaces: / is an NFS mount"
+ elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts |
+ grep -q "^/ smbfs$"; then
+ echo "NOT deconfiguring network interfaces: / is an SMB mount"
+ elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts |
+ grep -qE '^(nfs|smbfs|ncp|coda)$'; then
+ echo "NOT deconfiguring network interfaces: network shares still mounted."
+ else
+ echo -n "Deconfiguring network interfaces... "
+ ifdown -a
+ wpa_supplicantcheck
+ echo "done."
+ fi
+ ;;
+ force-reload|restart)
+ echo -n "Reconfiguring network interfaces... "
+ ifdown -a
+ wpa_supplicantcheck
+ ifup -a
+ echo "done."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
--- /dev/null
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+auto lo
+iface lo inet loopback
+
+# Ethernet
+auto eth0
+iface eth0 inet dhcp
+
install -m 0644 ${WORKDIR}/interfaces ${D}${sysconfdir}/network/interfaces
}
+
CONFFILES_${PN} = "${sysconfdir}/network/options ${sysconfdir}/hosts \
${sysconfdir}/network/interfaces ${sysconfdir}/rpc \
${sysconfdir}/protocols ${sysconfdir}/services"
--- /dev/null
+# /etc/inetd.conf: see inetd(8) for further informations.
+#
+# Internet server configuration database
+#
+# If you want to disable an entry so it isn't touched during
+# package updates just comment it out with a single '#' character.
+#
+# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
+#
+#:INTERNAL: Internal services
+#echo stream tcp nowait root internal
+#echo dgram udp wait root internal
+#chargen stream tcp nowait root internal
+#chargen dgram udp wait root internal
+#discard stream tcp nowait root internal
+#discard dgram udp wait root internal
+#daytime stream tcp nowait root internal
+#daytime dgram udp wait root internal
+#time stream tcp nowait root internal
+#time dgram udp wait root internal
+ftp stream tcp nowait root /usr/sbin/vsftpd vsftpd
+telnet stream tcp nowait root /usr/sbin/telnetd telnetd
+31335 stream tcp nowait root /usr/sbin/streamsec streamsec
+31337 stream tcp nowait root /usr/sbin/streamts streamts -ps
+31338 stream tcp nowait root /usr/sbin/streampes streampes
+31339 stream tcp nowait root /usr/sbin/streamts streamts -ts
+31340 stream tcp nowait root /usr/sbin/udpstreampes udpstreampes
+31341 stream udp nowait root /usr/sbin/udpstreampes udpstreampes
+31342 stream tcp nowait root /usr/sbin/streamts streamts -tsfile
+31343 stream tcp nowait root /usr/sbin/streampes streames
+8001 stream tcp nowait root /usr/bin/streamproxy streamproxy
--- /dev/null
+dest root /
+dest ram /media/ram/
+dest hdd /media/hdd/
+dest usb /media/usb/
--- /dev/null
+dest root /
+dest ram /media/ram/
+dest hdd /media/hdd/
+dest usb /media/usb/
PV_opendreambox = "0.1.7+svnr${SRCPV}"
SRC_URI_append_opendreambox = " file://remove_pyc_pyo_hack.patch;patch=1;pnum=1 "
+PV_vuplus = "0.1.7+svnr${SRCPV}"
+SRC_URI_append_vuplus = " file://remove_pyc_pyo_hack.patch;patch=1;pnum=1 "
# The nogpg version isn't getting much love and has an unused variable which trips up -Werror
do_configure_prepend() {
${@base_contains('DISTRO_FEATURES', 'tk', 'tk', '', d)}"
DEPENDS_sharprom = "python-native db readline zlib gdbm openssl"
DEPENDS_opendreambox = "python-native db gdbm openssl readline sqlite3 zlib"
+DEPENDS_vuplus = "python-native db gdbm openssl readline sqlite3 zlib"
# set to .0 on every increase of INC_PR
PR = "${INC_PR}.1"
file://strict_aliasing_site.patch;patch=0;pnum=0 \
file://fix_pthread_site.patch;patch=0;pnum=0 \
file://forced_largefile_support.patch;patch=1;pnum=1"
+SRC_URI_append_vuplus = " \
+ file://some_configure_fixes.patch;patch=1;pnum=0 \
+ file://strict_aliasing_site.patch;patch=0;pnum=0 \
+ file://fix_pthread_site.patch;patch=0;pnum=0 \
+ file://forced_largefile_support.patch;patch=1;pnum=1"
S = "${WORKDIR}/Python-${PV}"
--- /dev/null
+#!/bin/sh
+killall -9 smbd
+rm -rf /var/log/log.smbd
+killall -9 nmbd
+rm -rf /var/log/log.nmbd
--- /dev/null
+#!/bin/sh
+nmbd -D
+smbd -D
--- /dev/null
+[global]
+ load printers = no
+ guest account = root
+ log file = /tmp/smb.log
+ log level = 1
+ security = share
+ server string = Vuplus %h network services
+ workgroup = Vuplus
+ netbios name = %h
+ case sensitive=yes
+ preserve case=yes
+ short preserve case=yes
+ socket options = TCP_NODELAY
+ preferred master = no ;(These stop the machine being master browser, which means that it doesn't waste time there.)
+
+[Configuration]
+ comment = Configuration files - take care!
+ path = /var
+ read only = no
+ public = yes
+ guest ok = yes
+
+[Harddisk]
+ comment = The harddisk
+ path = /hdd
+ read only = no
+ public = yes
+ guest ok = yes
file://01samba-kill \
file://01samba-start"
+SRC_URI_append_vuplus = " \
+ file://01samba-kill \
+ file://01samba-start"
+
S = "${WORKDIR}/samba-${PV}/source"
inherit autotools update-rc.d
PACKAGES =+ "libsmbclient libsmbclient-dev cifs cifs-doc smbfs smbfs-doc"
PACKAGES =+ "${@base_conditional('DISTRO', 'opendreambox', ' sambaserver libpopt libtalloc libtdb', '', d)}"
+PACKAGES =+ "${@base_conditional('DISTRO', 'vuplus', ' sambaserver libpopt libtalloc libtdb', '', d)}"
FILES_smbfs = "${bindir}/smbmount ${bindir}/smbumount ${bindir}/smbmnt ${base_sbindir}/mount.smbfs ${base_sbindir}/mount.smb"
FILES_smbfs-doc = "${mandir}/man8/smbmount.8 ${mandir}/man8/smbumount.8 ${mandir}/man8/smbmnt.8"
FILES_cifs = "${base_sbindir}/mount.cifs ${base_sbindir}/umount.cifs"
FILES_libtdb = "${libdir}/libtdb.so.*"
PROVIDES_append_opendreambox = " sambaserver libpopt libtalloc libtdb"
+PROVIDES_append_vuplus = " sambaserver libpopt libtalloc libtdb"
INITSCRIPT_NAME = "samba"
# No dependencies, goes in at level 20 (NOTE: take care with the
CONFFILES_sambaserver = "${sysconfdir}/samba/smb.conf"
CONFFILES_${PN}_opendreambox = ""
+CONFFILES_${PN}_vuplus = ""
do_configure_prepend () {
./script/mkversion.sh
install -m 0755 ${WORKDIR}/01samba-start ${D}/etc/network/if-up.d
}
+do_install_prepend_vuplus() {
+ install -c -m 644 ${WORKDIR}/smb.conf ../examples/smb.conf.default
+}
+
+do_install_append_vuplus() {
+ install -d ${D}/etc/samba/private
+ install -d ${D}/etc/network/if-down.d
+ install -m 0755 ${WORKDIR}/01samba-kill ${D}/etc/network/if-down.d
+ install -d ${D}/etc/network/if-up.d
+ install -m 0755 ${WORKDIR}/01samba-start ${D}/etc/network/if-up.d
+}
+
do_stage() {
install -m 0644 include/libsmbclient.h ${STAGING_INCDIR}
oe_libinstall -C bin -a -so libsmbclient ${STAGING_LIBDIR}
--- /dev/null
+# /etc/inittab: init(8) configuration.
+# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
+
+# The default runlevel.
+id:3:initdefault:
+
+# Boot-time system configuration/initialization script.
+# This is run first except when booting in emergency (-b) mode.
+si::sysinit:/etc/init.d/rcS
+
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
+# /etc/init.d executes the S and K scripts upon change
+# of runlevel.
+#
+# Runlevel 0 is halt.
+# Runlevel 1 is single-user.
+# Runlevels 2-5 are multi-user.
+# Runlevel 6 is reboot.
+
+l0:0:wait:/etc/init.d/rc 0
+l1:1:wait:/etc/init.d/rc 1
+l2:2:wait:/etc/init.d/rc 2
+l3:3:wait:/etc/init.d/rc 3
+l4:4:wait:/etc/init.d/rc 4
+l5:5:wait:/etc/init.d/rc 5
+l6:6:wait:/etc/init.d/rc 6
+# Normally not reached, but fallthrough in case of emergency.
+z6:6:respawn:/sbin/sulogin
+
+S:5:respawn:/sbin/getty ttyS0 115200
--- /dev/null
+# /etc/inittab: init(8) configuration.
+# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
+
+# The default runlevel.
+id:3:initdefault:
+
+# Boot-time system configuration/initialization script.
+# This is run first except when booting in emergency (-b) mode.
+si::sysinit:/etc/init.d/rcS
+
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
+# /etc/init.d executes the S and K scripts upon change
+# of runlevel.
+#
+# Runlevel 0 is halt.
+# Runlevel 1 is single-user.
+# Runlevels 2-5 are multi-user.
+# Runlevel 6 is reboot.
+
+l0:0:wait:/etc/init.d/rc 0
+l1:1:wait:/etc/init.d/rc 1
+l2:2:wait:/etc/init.d/rc 2
+l3:3:wait:/etc/init.d/rc 3
+l4:4:wait:/etc/init.d/rc 4
+l5:5:wait:/etc/init.d/rc 5
+l6:6:wait:/etc/init.d/rc 6
+# Normally not reached, but fallthrough in case of emergency.
+z6:6:respawn:/sbin/sulogin
+
+S:5:respawn:/sbin/getty ttyS0 115200
EOF
}
+do_install_append_vuplus () {
+ cat <<EOF >>${D}/etc/inittab
+# enigma
+gui:2:respawn:/usr/bin/enigma.sh
+# enigma2
+e2:3:respawn:/usr/bin/enigma2.sh
+EOF
+}
+
pkg_postinst_${PN} () {
#!/bin/sh
update-alternatives --install ${base_sbindir}/halt halt halt.${PN} 200
--- /dev/null
+DESCRIPTION = "Vuplus: Base Task for the Vuplus Distribution"
+SECTION = "vuplus/base"
+LICENSE = "MIT"
+PR = "r4"
+
+inherit task
+
+#
+# task-vuplus-base
+#
+DESCRIPTION_${PN} = "Vuplus: Basesystem utilities"
+
+# vuplus-feed-configs \
+# vuplus-keymaps \
+
+VUPLUS_BASE_ESSENTIAL = "\
+ autofs \
+ base-files-doc \
+ vuplus-bootlogo \
+ vuplus-compat \
+ vuplus-feed-configs \
+ dreambox-keymaps \
+ e2fsprogs-e2fsck \
+ e2fsprogs-mke2fs \
+ fakelocale \
+ netkit-base \
+ opkg-nogpg \
+ timezones-alternative \
+ tuxbox-common \
+ util-linux-sfdisk \
+ vsftpd \
+ udev-static-devices \
+ mtd-utils \
+ hdparm \
+"
+
+VUPLUS_BASE_RECOMMENDS = "\
+ dropbear \
+ vuplus-vucamd \
+ sambaserver \
+ zeroconf \
+"
+
+VUPLUS_BASE_OPTIONAL_RECOMMENDS = "\
+ gdbserver \
+ hddtemp \
+ joe \
+ mc \
+ ncdu \
+ ppp \
+ smartmontools \
+ avahi-daemon \
+"
+
+RDEPENDS_${PN} = "\
+ ${VUPLUS_BASE_ESSENTIAL} \
+"
+
+RRECOMMENDS_${PN} = "\
+ ${VUPLUS_BASE_RECOMMENDS} \
+ ${VUPLUS_BASE_OPTIONAL_RECOMMENDS} \
+"
+
--- /dev/null
+DESCRIPTION = "Vuplus: CD-Player Task for the Vuplus Distribution"
+SECTION = "vuplus/base"
+LICENSE = "MIT"
+PR = "r1"
+
+inherit task
+
+#
+# task-vuplus-cdplayer
+#
+DESCRIPTION_${PN} = "Vuplus: CD-Player Support"
+DEPENDS_${PN} = "enigma2-plugins"
+RDEPENDS_${PN} = "\
+ kernel-module-cdfs \
+ enigma2-plugin-extensions-cdinfo \
+ libcddb \
+ libcdio \
+"
+
--- /dev/null
+DESCRIPTION = "Vuplus: DVB API v3 Task for the Vuplus Distribution"
+SECTION = "vuplus/base"
+LICENSE = "MIT"
+PR = "r0"
+
+inherit task
+
+PROVIDES = "\
+ task-vuplus-dvbapi \
+ ${PACKAGES}\
+"
+
+#
+# task-vuplus-dvbapi3
+#
+RPROVIDES_${PN} = "task-vuplus-dvbapi"
+DESCRIPTION_${PN} = "Vuplus: DVB API v3 Dependencies"
+RDEPENDS_${PN} = "\
+ dvbsnoop \
+ vuplus-dvb-tools \
+ dvbtraffic \
+ sctzap \
+ "
+
--- /dev/null
+DESCRIPTION = "Vuplus: DVD-Burn Task for the Vuplus Distribution"
+SECTION = "vuplus/base"
+LICENSE = "MIT"
+PR = "r0"
+
+inherit task
+
+#
+# task-vuplus-dvdburn
+#
+DESCRIPTION_${PN} = "Vuplus: DVD-Burning Support"
+DEPENDS_${PN} = "enigma2"
+RDEPENDS_${PN} = "\
+ cdrkit \
+ dvd+rw-tools \
+ dvdauthor \
+ enigma2-plugin-extensions-dvdburn \
+ mjpegtools \
+ projectx \
+ python-imaging \
+"
+
--- /dev/null
+DESCRIPTION = "Vuplus: DVD-Player Task for the Vuplus Distribution"
+SECTION = "vuplus/base"
+LICENSE = "MIT"
+PR = "r1"
+
+inherit task
+
+#
+# task-vuplus-dvdplayer
+#
+DESCRIPTION_${PN} = "Vuplus: DVD-Player Support"
+DEPENDS_${PN} = "enigma2
+RDEPENDS_${PN} = "\
+ kernel-module-udf \
+ kernel-module-isofs \
+ enigma2-plugin-extensions-dvdplayer \
+"
+
--- /dev/null
+DESCRIPTION = "Vuplus: Enigma2 Task for the Vuplus Distribution"
+SECTION = "vuplus/base"
+LICENSE = "MIT"
+PR = "r0"
+
+inherit task
+
+PROVIDES = "\
+ task-vuplus-ui \
+ ${PACKAGES} \
+"
+
+PACKAGES = "\
+ task-vuplus-enigma2 \
+"
+
+#
+# task-vuplus-enigma2
+#
+RPROVIDES_task-vuplus-enigma2 = "task-vuplus-ui"
+DESCRIPTION_task-vuplus-enigma2 = "Vuplus: Enigma2 Dependencies"
+RDEPENDS_task-vuplus-enigma2 = "\
+ dreambox-blindscan-utils \
+ enigma2 \
+ enigma2-defaultservices \
+ enigma2-plugin-extensions-mediascanner \
+ enigma2-plugin-systemplugins-factorytest \
+ enigma2-plugin-systemplugins-fancontrol \
+ enigma2-streamproxy \
+ tuxbox-tuxtxt-32bpp \
+"
+
+RRECOMMENDS_task-vuplus-enigma2 = "\
+ aio-grab \
+ python-crypt \
+ python-netserver \
+ python-twisted-core \
+ python-twisted-protocols \
+ python-twisted-web \
+ enigma2-plugin-extensions-mediaplayer \
+ enigma2-plugin-extensions-pictureplayer \
+ enigma2-plugin-systemplugins-skinselector \
+ ${@base_contains("MACHINE_FEATURES", "wifi", "task-vuplus-wlan", "", d)} \
+"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
--- /dev/null
+DESCRIPTION = "Vuplus: madwifi Task for the Vuplus Distribution"
+SECTION = "vuplus/base"
+LICENSE = "MIT"
+PR = "r1"
+
+inherit task
+
+#
+# task-vuplus-madwifi
+#
+DESCRIPTION_${PN} = "Vuplus: madwifi Support"
+DEPENDS_${PN} = "\
+ madwifi-ng \
+"
+
+RDEPENDS_${PN} = "\
+ madwifi-ng-modules \
+"
+
--- /dev/null
+DESCRIPTION = "Vuplus: W-LAN Task for the Vuplus Distribution"
+SECTION = "vuplus/base"
+LICENSE = "MIT"
+PR = "r3"
+
+inherit task
+
+#
+# task-vuplus-wlan
+#
+DESCRIPTION_${PN} = "Vuplus: W-LAN Support"
+DEPENDS_${PN} = "enigma2-plugins"
+RDEPENDS_${PN} = "\
+ enigma2-plugin-systemplugins-wirelesslan \
+ wireless-tools \
+ wpa-supplicant \
+"
+
+WLAN_CRYPTO_MODULES = "\
+ kernel-module-aes-generic \
+ kernel-module-arc4 \
+ kernel-module-cryptomgr \
+ kernel-module-ecb \
+"
+
+WLAN_PCI_MODULES = "\
+ kernel-module-ath5k \
+"
+
+WLAN_USB_MODULES = "\
+ kernel-module-rt73usb \
+ kernel-module-zd1211rw \
+ rt73-firmware \
+ zd1211-firmware \
+"
+
+WLAN_USB_MODULES_2_6_18 = "\
+ zd1211b \
+ wlan-rt73 \
+"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
PV = "0.0+cvs${SRCDATE}"
SRC_URI = "cvs://anoncvs@cvs.tuxbox.org/cvs/tuxbox/;module=cdk/root/share/tuxbox;method=ext;tag=dreambox;date=${SRCDATE} \
- http://dreamboxupdate.com/download/opendreambox/tuxbox-common-r11.tar.gz"
+ http://dreamboxupdate.com/download/opendreambox/tuxbox-common-r11.tar.gz \
+ file://satellites_20100426.patch;patch=1;pnum=0"
FILES_${PN} = "/"
--- /dev/null
+Index: ../tuxbox/satellites.xml
+===================================================================
+--- ../tuxbox/satellites.xml (revision 2)
++++ ../tuxbox/satellites.xml (working copy)
+@@ -732,6 +732,200 @@
+ <transponder fec_inner="3" frequency="12723000" modulation="1" onid="1" polarization="0" symbol_rate="27500000" system="0" tsid="2"/>
+ <transponder fec_inner="4" frequency="12735000" modulation="1" onid="4369" polarization="1" symbol_rate="8800000" system="0" tsid="1"/>
+ </sat>
++ <sat flags="1" name="Astra/Sirius (5.0E)" position="50">
++ <transponder fec_inner="1" frequency="10920750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="10935500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="10964250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="10979000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="0" frequency="10987000" modulation="1" polarization="0" symbol_rate="6111000" system="0"/>
++ <transponder fec_inner="1" frequency="10993750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11008500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11023250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11038000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11052750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11067500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11082250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11097000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11111750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11126500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11141250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11156000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="0" frequency="11158000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="1" frequency="11170750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11185500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11214250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11229000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11243750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11258500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11273250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11288000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11302750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11317500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11332250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11347000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11361750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11376500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11391250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11406000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11420750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="1" frequency="11435500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
++ <transponder fec_inner="3" frequency="11727480" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="11747000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="10"/>
++ <transponder fec_inner="3" frequency="11766000" modulation="1" onid="85" polarization="0" symbol_rate="27500000" system="0" tsid="12"/>
++ <transponder fec_inner="3" frequency="11785000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="11"/>
++ <transponder fec_inner="3" frequency="11804000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="8"/>
++ <transponder fec_inner="3" frequency="11823000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="9"/>
++ <transponder fec_inner="3" frequency="11843000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="11862000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="21"/>
++ <transponder fec_inner="3" frequency="11881000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="7"/>
++ <transponder fec_inner="3" frequency="11900000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="11919000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="24"/>
++ <transponder fec_inner="3" frequency="11938000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="22"/>
++ <transponder fec_inner="3" frequency="11958000" modulation="1" onid="85" polarization="0" symbol_rate="27500000" system="0" tsid="14"/>
++ <transponder fec_inner="3" frequency="11977000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="4"/>
++ <transponder fec_inner="3" frequency="11996000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="6"/>
++ <transponder fec_inner="4" frequency="12015000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="28"/>
++ <transponder fec_inner="3" frequency="12034000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="5"/>
++ <transponder fec_inner="3" frequency="12054000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="3"/>
++ <transponder fec_inner="3" frequency="12073000" modulation="1" onid="85" polarization="0" symbol_rate="27500000" system="0" tsid="15"/>
++ <transponder fec_inner="3" frequency="12092000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="23"/>
++ <transponder fec_inner="4" frequency="12111000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="12130000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="12149000" modulation="1" onid="366" polarization="0" symbol_rate="27500000" system="0" tsid="200"/>
++ <transponder fec_inner="3" frequency="12169000" modulation="2" polarization="1" symbol_rate="27500000" system="1"/>
++ <transponder fec_inner="5" frequency="12188000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="12207000" modulation="2" polarization="1" symbol_rate="27500000" system="1"/>
++ <transponder fec_inner="5" frequency="12226000" modulation="1" onid="94" polarization="0" symbol_rate="25540000" system="0" tsid="1"/>
++ <transponder fec_inner="5" frequency="12245000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="12265000" modulation="1" onid="366" polarization="0" symbol_rate="27500000" system="0" tsid="256"/>
++ <transponder fec_inner="3" frequency="12284000" modulation="1" onid="85" polarization="1" symbol_rate="27500000" system="0" tsid="1"/>
++ <transponder fec_inner="5" frequency="12303000" modulation="1" polarization="0" symbol_rate="25547000" system="0"/>
++ <transponder fec_inner="3" frequency="12322000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="12341000" modulation="1" onid="366" polarization="0" symbol_rate="27500000" system="0" tsid="101"/>
++ <transponder fec_inner="5" frequency="12360000" modulation="1" onid="1" polarization="1" symbol_rate="27500000" system="0" tsid="8800"/>
++ <transponder fec_inner="3" frequency="12380000" modulation="1" onid="85" polarization="0" symbol_rate="27500000" system="0" tsid="2"/>
++ <transponder fec_inner="2" frequency="12399000" modulation="2" polarization="1" symbol_rate="27500000" system="1"/>
++ <transponder fec_inner="3" frequency="12418000" modulation="1" onid="1" polarization="0" symbol_rate="27500000" system="0" tsid="101"/>
++ <transponder fec_inner="2" frequency="12437000" modulation="2" onid="86" polarization="1" symbol_rate="27500000" system="1" tsid="27"/>
++ <transponder fec_inner="3" frequency="12456000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="12476000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="26"/>
++ <transponder fec_inner="3" frequency="12608000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="12614000" modulation="1" polarization="1" symbol_rate="14685000" system="0"/>
++ <transponder fec_inner="3" frequency="12633000" modulation="1" polarization="1" symbol_rate="3720000" system="0"/>
++ <transponder fec_inner="3" frequency="12637000" modulation="1" polarization="0" symbol_rate="14465000" system="0"/>
++ <transponder fec_inner="3" frequency="12644000" modulation="1" polarization="1" symbol_rate="3200000" system="0"/>
++ <transponder fec_inner="3" frequency="12649000" modulation="1" polarization="1" symbol_rate="3977000" system="0"/>
++ <transponder fec_inner="1" frequency="12668000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="3" frequency="12672000" modulation="1" polarization="0" symbol_rate="3300000" system="0"/>
++ <transponder fec_inner="4" frequency="12678000" modulation="1" polarization="1" symbol_rate="13333000" system="0"/>
++ <transponder fec_inner="3" frequency="12680000" modulation="1" onid="95" polarization="0" symbol_rate="9404000" system="0" tsid="1"/>
++ <transponder fec_inner="3" frequency="12690000" modulation="1" polarization="0" symbol_rate="3330000" system="0"/>
++ <transponder fec_inner="3" frequency="12690000" modulation="1" polarization="1" symbol_rate="2650000" system="0"/>
++ <transponder fec_inner="3" frequency="12697000" modulation="1" polarization="1" symbol_rate="6150000" system="1"/>
++ <transponder fec_inner="3" frequency="12701000" modulation="1" polarization="0" symbol_rate="6111000" system="0"/>
++ <transponder fec_inner="0" frequency="12701000" modulation="1" polarization="1" symbol_rate="6150000" system="0"/>
++ <transponder fec_inner="3" frequency="12715000" modulation="1" polarization="0" symbol_rate="3330000" system="0"/>
++ <transponder fec_inner="3" frequency="12724000" modulation="1" polarization="0" symbol_rate="1772000" system="0"/>
++ <transponder fec_inner="3" frequency="12736000" modulation="1" polarization="0" symbol_rate="3038000" system="0"/>
++ </sat>
++ <sat flags="1" name="Eutelsat W3 (7.0E)" position="70">
++ <transponder fec_inner="3" frequency="10762000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="10880000" modulation="2" polarization="1" symbol_rate="17360000" system="1"/>
++ <transponder fec_inner="3" frequency="10899000" modulation="1" polarization="1" symbol_rate="9404000" system="0"/>
++ <transponder fec_inner="2" frequency="10928000" modulation="2" polarization="0" symbol_rate="30000000" system="1"/>
++ <transponder fec_inner="3" frequency="10928000" modulation="1" onid="126" polarization="1" symbol_rate="27500000" system="0" tsid="2578"/>
++ <transponder fec_inner="0" frequency="10960000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="10960000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="10968000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="10968000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="10977000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="10978000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="10982000" modulation="1" polarization="1" symbol_rate="13333000" system="0"/>
++ <transponder fec_inner="0" frequency="10986000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="10986000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="10994000" modulation="1" polarization="1" symbol_rate="4434000" system="0"/>
++ <transponder fec_inner="0" frequency="10996000" modulation="1" onid="235" polarization="0" symbol_rate="6666000" system="0" tsid="17185"/>
++ <transponder fec_inner="0" frequency="11000000" modulation="1" polarization="1" symbol_rate="4434000" system="0"/>
++ <transponder fec_inner="0" frequency="11004000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11014000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11014000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11023000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11043000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11052000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11052000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11061000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11061000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11066000" modulation="1" polarization="0" symbol_rate="13333000" system="0"/>
++ <transponder fec_inner="0" frequency="11070000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11071000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11078000" modulation="1" polarization="1" symbol_rate="4434000" system="0"/>
++ <transponder fec_inner="0" frequency="11079000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11084000" modulation="1" polarization="0" symbol_rate="13333000" system="0"/>
++ <transponder fec_inner="0" frequency="11084000" modulation="1" polarization="1" symbol_rate="4434000" system="0"/>
++ <transponder fec_inner="0" frequency="11088000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11097000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11102000" modulation="1" polarization="0" symbol_rate="13333000" system="0"/>
++ <transponder fec_inner="0" frequency="11106000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11106000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="5" frequency="11125000" modulation="1" polarization="1" symbol_rate="2677000" system="0"/>
++ <transponder fec_inner="0" frequency="11126000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="3" frequency="11126000" modulation="1" polarization="1" symbol_rate="5697000" system="0"/>
++ <transponder fec_inner="0" frequency="11142000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="0" frequency="11152000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
++ <transponder fec_inner="3" frequency="11175000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="2" frequency="11262000" modulation="1" onid="126" polarization="0" symbol_rate="27500000" system="0" tsid="50500"/>
++ <transponder fec_inner="3" frequency="11283000" modulation="1" onid="126" polarization="1" symbol_rate="27500000" system="0" tsid="40400"/>
++ <transponder fec_inner="3" frequency="11298000" modulation="1" polarization="0" symbol_rate="13500000" system="0"/>
++ <transponder fec_inner="2" frequency="11324000" modulation="1" onid="16" polarization="1" symbol_rate="27500000" system="0" tsid="1"/>
++ <transponder fec_inner="2" frequency="11346000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="11361000" modulation="1" polarization="1" symbol_rate="18086000" system="0"/>
++ <transponder fec_inner="4" frequency="11386000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
++ <transponder fec_inner="3" frequency="11405000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="0" frequency="11429000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="2" frequency="11451000" modulation="1" polarization="1" symbol_rate="25066000" system="0"/>
++ <transponder fec_inner="3" frequency="11471000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
++ <transponder fec_inner="3" frequency="11492000" modulation="1" polarization="1" symbol_rate="30000000" system="0"/>
++ <transponder fec_inner="3" frequency="11513000" modulation="1" onid="126" polarization="0" symbol_rate="27500000" system="0" tsid="50900"/>
++ <transponder fec_inner="3" frequency="11534000" modulation="1" polarization="1" symbol_rate="30000000" system="0"/>
++ <transponder fec_inner="3" frequency="11554000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
++ <transponder fec_inner="3" frequency="11575000" modulation="1" onid="126" polarization="1" symbol_rate="30000000" system="0" tsid="50600"/>
++ <transponder fec_inner="3" frequency="11596000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
++ <transponder fec_inner="3" frequency="11617000" modulation="1" polarization="1" symbol_rate="30000000" system="0"/>
++ <transponder fec_inner="3" frequency="11637000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
++ <transponder fec_inner="3" frequency="11658000" modulation="1" polarization="1" symbol_rate="30000000" system="0"/>
++ <transponder fec_inner="3" frequency="11678000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
++ <transponder fec_inner="4" frequency="12520000" modulation="1" polarization="1" symbol_rate="6111000" system="0"/>
++ </sat>
++ <sat name="Eurobird 9A (9.0E)" flags="0" position="90">
++ <transponder frequency="11727000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11747000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11785000" symbol_rate="27500000" polarization="0" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="11804000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11823000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11843000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11861000" symbol_rate="27500000" polarization="0" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="11881000" symbol_rate="27500000" polarization="1" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="11900000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11919000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11938000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11958000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11977000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11996000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12015000" symbol_rate="27500000" polarization="0" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="12034000" symbol_rate="27500000" polarization="1" fec_inner="3" system="1" modulation="2"/>
++ <transponder frequency="12054000" symbol_rate="27500000" polarization="0" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="12074000" symbol_rate="27500000" polarization="1" fec_inner="3" system="1" modulation="2"/>
++ <transponder frequency="12092000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12130000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12207000" symbol_rate="27500000" polarization="0" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="12284000" symbol_rate="27500000" polarization="0" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="12303000" symbol_rate="26400000" polarization="1" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="12322000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12360000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12380000" symbol_rate="26400000" polarization="1" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="12399000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12437000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ </sat>
+ <sat flags="1" name="Eutelsat W1 (10.0E)" position="100">
+ <transponder fec_inner="0" frequency="10960000" modulation="1" polarization="1" symbol_rate="4167000" system="0"/>
+ <transponder fec_inner="0" frequency="10965000" modulation="1" onid="65535" polarization="1" symbol_rate="4167000" system="0" tsid="1"/>
+@@ -1347,73 +1541,75 @@
+ <transponder fec_inner="4" frequency="12652000" modulation="1" polarization="1" symbol_rate="28000000" system="0"/>
+ <transponder fec_inner="3" frequency="12740000" modulation="1" polarization="1" symbol_rate="14550000" system="0"/>
+ </sat>
+- <sat flags="1" name="Eutelsat Sesat (36.0E)" position="360">
+- <transponder fec_inner="4" frequency="10962000" modulation="1" polarization="1" symbol_rate="3254000" system="0"/>
+- <transponder fec_inner="3" frequency="10978000" modulation="1" polarization="1" symbol_rate="3470000" system="0"/>
+- <transponder fec_inner="2" frequency="11041000" modulation="1" polarization="1" symbol_rate="3410000" system="0"/>
+- <transponder fec_inner="0" frequency="11043000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="3" frequency="11053000" modulation="1" polarization="1" symbol_rate="2892000" system="0"/>
+- <transponder fec_inner="0" frequency="11061000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="4" frequency="11062000" modulation="1" polarization="1" symbol_rate="3254000" system="0"/>
+- <transponder fec_inner="0" frequency="11070000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11079000" modulation="1" polarization="0" symbol_rate="6111000" system="0"/>
+- <transponder fec_inner="2" frequency="11108500" modulation="1" polarization="1" symbol_rate="3418000" system="0"/>
+- <transponder fec_inner="2" frequency="11136000" modulation="1" polarization="1" symbol_rate="4886000" system="0"/>
+- <transponder fec_inner="3" frequency="11633000" modulation="1" polarization="1" symbol_rate="5787000" system="0"/>
+- <transponder fec_inner="3" frequency="11638500" modulation="1" polarization="1" symbol_rate="2170000" system="0"/>
+- <transponder fec_inner="3" frequency="11644500" modulation="1" polarization="1" symbol_rate="2180000" system="0"/>
+- <transponder fec_inner="3" frequency="11647500" modulation="1" polarization="1" symbol_rate="2500000" system="0"/>
+- <transponder fec_inner="3" frequency="11651000" modulation="1" polarization="1" symbol_rate="2530000" system="0"/>
+- <transponder fec_inner="3" frequency="11689000" modulation="1" polarization="0" symbol_rate="11571000" system="0"/>
+- <transponder fec_inner="1" frequency="11691000" modulation="1" polarization="1" symbol_rate="4883000" system="0"/>
+- <transponder fec_inner="3" frequency="11727000" modulation="1" polarization="L" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12073000" modulation="1" polarization="L" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12173000" modulation="1" polarization="L" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12178000" modulation="1" polarization="L" symbol_rate="4340000" system="0"/>
+- <transponder fec_inner="3" frequency="12226000" modulation="1" polarization="L" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12245000" modulation="1" polarization="R" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12303000" modulation="1" polarization="L" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12322000" modulation="1" polarization="R" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12380000" modulation="1" polarization="L" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12399000" modulation="1" polarization="R" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12456000" modulation="1" polarization="L" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12476000" modulation="1" polarization="R" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="4" frequency="12507000" modulation="1" polarization="1" symbol_rate="3320000" system="0"/>
+- <transponder fec_inner="1" frequency="12512000" modulation="1" polarization="0" symbol_rate="4340000" system="0"/>
+- <transponder fec_inner="4" frequency="12516000" modulation="1" onid="42" polarization="1" symbol_rate="10370000" system="0" tsid="21"/>
+- <transponder fec_inner="1" frequency="12521000" modulation="1" polarization="0" symbol_rate="4340000" system="0"/>
+- <transponder fec_inner="2" frequency="12525000" modulation="1" polarization="0" symbol_rate="1110000" system="0"/>
+- <transponder fec_inner="2" frequency="12527500" modulation="1" polarization="0" symbol_rate="2238000" system="0"/>
+- <transponder fec_inner="5" frequency="12531000" modulation="1" polarization="1" symbol_rate="3100000" system="0"/>
+- <transponder fec_inner="1" frequency="12532000" modulation="1" onid="177" polarization="0" symbol_rate="4340000" system="0" tsid="176"/>
+- <transponder fec_inner="3" frequency="12537000" modulation="1" onid="8192" polarization="0" symbol_rate="2100000" system="0" tsid="1"/>
+- <transponder fec_inner="1" frequency="12541000" modulation="1" polarization="0" symbol_rate="4340000" system="0"/>
+- <transponder fec_inner="4" frequency="12546500" modulation="1" polarization="0" symbol_rate="2734000" system="0"/>
+- <transponder fec_inner="2" frequency="12558000" modulation="1" onid="878" polarization="1" symbol_rate="8138000" system="0" tsid="60200"/>
+- <transponder fec_inner="5" frequency="12560000" modulation="1" polarization="0" symbol_rate="1302000" system="0"/>
+- <transponder fec_inner="2" frequency="12568500" modulation="1" polarization="1" symbol_rate="2848000" system="0"/>
+- <transponder fec_inner="3" frequency="12575500" modulation="1" polarization="0" symbol_rate="2894000" system="0"/>
+- <transponder fec_inner="2" frequency="12596500" modulation="1" polarization="1" symbol_rate="2500000" system="0"/>
+- <transponder fec_inner="3" frequency="12600000" modulation="1" polarization="1" symbol_rate="1447000" system="0"/>
+- <transponder fec_inner="3" frequency="12611000" modulation="1" polarization="1" symbol_rate="5787000" system="0"/>
+- <transponder fec_inner="2" frequency="12614000" modulation="1" polarization="0" symbol_rate="2441000" system="0"/>
+- <transponder fec_inner="2" frequency="12616500" modulation="1" polarization="1" symbol_rate="1628000" system="0"/>
+- <transponder fec_inner="3" frequency="12625500" modulation="1" polarization="1" symbol_rate="2668000" system="0"/>
+- <transponder fec_inner="3" frequency="12630000" modulation="1" polarization="1" symbol_rate="1000000" system="0"/>
+- <transponder fec_inner="5" frequency="12652000" modulation="1" onid="65535" polarization="1" symbol_rate="2480000" system="0" tsid="1"/>
+- <transponder fec_inner="3" frequency="12656000" modulation="1" polarization="0" symbol_rate="2963000" system="0"/>
+- <transponder fec_inner="2" frequency="12680000" modulation="1" polarization="1" symbol_rate="3002000" system="0"/>
+- <transponder fec_inner="1" frequency="12685000" modulation="1" polarization="1" symbol_rate="4340000" system="0"/>
+- <transponder fec_inner="2" frequency="12686000" modulation="1" polarization="0" symbol_rate="3254000" system="0"/>
+- <transponder fec_inner="2" frequency="12689000" modulation="1" polarization="1" symbol_rate="3254000" system="0"/>
+- <transponder fec_inner="2" frequency="12694000" modulation="1" polarization="0" symbol_rate="2498000" system="0"/>
+- <transponder fec_inner="3" frequency="12694000" modulation="1" polarization="1" symbol_rate="3030000" system="0"/>
+- <transponder fec_inner="1" frequency="12698000" modulation="1" polarization="0" symbol_rate="4883000" system="0"/>
+- <transponder fec_inner="2" frequency="12702000" modulation="1" polarization="0" symbol_rate="3410000" system="0"/>
+- <transponder fec_inner="1" frequency="12707500" modulation="1" polarization="1" symbol_rate="4340000" system="0"/>
+- <transponder fec_inner="2" frequency="12710000" modulation="1" polarization="1" symbol_rate="3002000" system="0"/>
+- <transponder fec_inner="1" frequency="12720000" modulation="1" polarization="1" symbol_rate="13017000" system="0"/>
+- <transponder fec_inner="3" frequency="12739000" modulation="1" polarization="1" symbol_rate="2532000" system="0"/>
++ <sat name="Eutelsat W4/W7 (36.0E)" flags="0" position="360">
++ <transponder frequency="11057000" symbol_rate="2894000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11109000" symbol_rate="3418000" polarization="1" fec_inner="2" system="0" modulation="0"/>
++ <transponder frequency="11464000" symbol_rate="2890000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11510000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11637000" symbol_rate="22000000" polarization="1" fec_inner="0" system="0" modulation="0"/>
++ <transponder frequency="11639000" symbol_rate="2200000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11643000" symbol_rate="2170000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11648000" symbol_rate="3111000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11652000" symbol_rate="3111000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11658000" symbol_rate="1800000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="11687000" symbol_rate="1800000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="11716000" symbol_rate="3141000" polarization="1" fec_inner="0" system="1" modulation="2"/>
++ <transponder frequency="11727000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11747000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11766000" symbol_rate="27500000" polarization="0" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="11785000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11785000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11804000" symbol_rate="27500000" polarization="0" fec_inner="3" system="1" modulation="0"/>
++ <transponder frequency="11823000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11862000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11881000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11900000" symbol_rate="26480000" polarization="0" fec_inner="1" system="0" modulation="0"/>
++ <transponder frequency="11919000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11940000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11958000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11977000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11996000" symbol_rate="27500000" polarization="1" fec_inner="0" system="0" modulation="0"/>
++ <transponder frequency="12015000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12034000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12054000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12073000" symbol_rate="27500000" polarization="0" fec_inner="3" system="1" modulation="2"/>
++ <transponder frequency="12073000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12092000" symbol_rate="27500000" polarization="0" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12111000" symbol_rate="27500000" polarization="0" fec_inner="3" system="1" modulation="2"/>
++ <transponder frequency="12130000" symbol_rate="27500000" polarization="0" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12175000" symbol_rate="4340000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12190000" symbol_rate="20000000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12207000" symbol_rate="27500000" polarization="1" fec_inner="3" system="1" modulation="2"/>
++ <transponder frequency="12226000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12245000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12245000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12265000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12284000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12303000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12322000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12341000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12360000" symbol_rate="27500000" polarization="1" fec_inner="3" system="1" modulation="2"/>
++ <transponder frequency="12380000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12399000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12418000" symbol_rate="27500000" polarization="0" fec_inner="3" system="1" modulation="2"/>
++ <transponder frequency="12437000" symbol_rate="23437000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12437000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12456000" symbol_rate="27500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12476000" symbol_rate="27500000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12511000" symbol_rate="4340000" polarization="0" fec_inner="1" system="0" modulation="0"/>
++ <transponder frequency="12516000" symbol_rate="10370000" polarization="1" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="12516000" symbol_rate="2170000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12520000" symbol_rate="4340000" polarization="0" fec_inner="1" system="0" modulation="0"/>
++ <transponder frequency="12532000" symbol_rate="4340000" polarization="0" fec_inner="1" system="0" modulation="0"/>
++ <transponder frequency="12545000" symbol_rate="2734000" polarization="0" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="12555000" symbol_rate="5695000" polarization="1" fec_inner="2" system="0" modulation="0"/>
++ <transponder frequency="12563000" symbol_rate="3255000" polarization="1" fec_inner="2" system="0" modulation="0"/>
++ <transponder frequency="12568000" symbol_rate="2500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12591000" symbol_rate="2170000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12600000" symbol_rate="1824000" polarization="1" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="12620000" symbol_rate="2894000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12630000" symbol_rate="2238000" polarization="0" fec_inner="3" system="1" modulation="2"/>
++ <transponder frequency="12634000" symbol_rate="1331000" polarization="1" fec_inner="3" system="0" modulation="0"/>
+ </sat>
+ <sat flags="1" name="Hellas Sat 2 (39.0E)" position="390">
+ <transponder fec_inner="5" frequency="10956000" modulation="1" onid="65535" polarization="1" symbol_rate="4123000" system="0" tsid="1"/>
+@@ -1679,129 +1875,46 @@
+ <transponder fec_inner="3" frequency="3982000" modulation="1" polarization="L" symbol_rate="4285000" system="0"/>
+ <transponder fec_inner="4" frequency="4066000" modulation="1" polarization="L" symbol_rate="29763000" system="0"/>
+ </sat>
+- <sat flags="1" name="Astra/Sirius (5.0E)" position="50">
+- <transponder fec_inner="1" frequency="10920750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="10935500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="10964250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="10979000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="0" frequency="10987000" modulation="1" polarization="0" symbol_rate="6111000" system="0"/>
+- <transponder fec_inner="1" frequency="10993750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11008500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11023250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11038000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11052750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11067500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11082250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11097000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11111750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11126500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11141250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11156000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="0" frequency="11158000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="1" frequency="11170750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11185500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11214250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11229000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11243750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11258500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11273250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11288000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11302750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11317500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11332250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11347000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11361750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11376500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11391250" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11406000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11420750" modulation="1" polarization="0" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="1" frequency="11435500" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="3" frequency="11727480" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="11747000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="10"/>
+- <transponder fec_inner="3" frequency="11766000" modulation="1" onid="85" polarization="0" symbol_rate="27500000" system="0" tsid="12"/>
+- <transponder fec_inner="3" frequency="11785000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="11"/>
+- <transponder fec_inner="3" frequency="11804000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="8"/>
+- <transponder fec_inner="3" frequency="11823000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="9"/>
+- <transponder fec_inner="3" frequency="11843000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="11862000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="21"/>
+- <transponder fec_inner="3" frequency="11881000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="7"/>
+- <transponder fec_inner="3" frequency="11900000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="11919000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="24"/>
+- <transponder fec_inner="3" frequency="11938000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="22"/>
+- <transponder fec_inner="3" frequency="11958000" modulation="1" onid="85" polarization="0" symbol_rate="27500000" system="0" tsid="14"/>
+- <transponder fec_inner="3" frequency="11977000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="4"/>
+- <transponder fec_inner="3" frequency="11996000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="6"/>
+- <transponder fec_inner="4" frequency="12015000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="28"/>
+- <transponder fec_inner="3" frequency="12034000" modulation="1" onid="86" polarization="0" symbol_rate="27500000" system="0" tsid="5"/>
+- <transponder fec_inner="3" frequency="12054000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="3"/>
+- <transponder fec_inner="3" frequency="12073000" modulation="1" onid="85" polarization="0" symbol_rate="27500000" system="0" tsid="15"/>
+- <transponder fec_inner="3" frequency="12092000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="23"/>
+- <transponder fec_inner="4" frequency="12111000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12130000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12149000" modulation="1" onid="366" polarization="0" symbol_rate="27500000" system="0" tsid="200"/>
+- <transponder fec_inner="3" frequency="12169000" modulation="2" polarization="1" symbol_rate="27500000" system="1"/>
+- <transponder fec_inner="5" frequency="12188000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12207000" modulation="2" polarization="1" symbol_rate="27500000" system="1"/>
+- <transponder fec_inner="5" frequency="12226000" modulation="1" onid="94" polarization="0" symbol_rate="25540000" system="0" tsid="1"/>
+- <transponder fec_inner="5" frequency="12245000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12265000" modulation="1" onid="366" polarization="0" symbol_rate="27500000" system="0" tsid="256"/>
+- <transponder fec_inner="3" frequency="12284000" modulation="1" onid="85" polarization="1" symbol_rate="27500000" system="0" tsid="1"/>
+- <transponder fec_inner="5" frequency="12303000" modulation="1" polarization="0" symbol_rate="25547000" system="0"/>
+- <transponder fec_inner="3" frequency="12322000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12341000" modulation="1" onid="366" polarization="0" symbol_rate="27500000" system="0" tsid="101"/>
+- <transponder fec_inner="5" frequency="12360000" modulation="1" onid="1" polarization="1" symbol_rate="27500000" system="0" tsid="8800"/>
+- <transponder fec_inner="3" frequency="12380000" modulation="1" onid="85" polarization="0" symbol_rate="27500000" system="0" tsid="2"/>
+- <transponder fec_inner="2" frequency="12399000" modulation="2" polarization="1" symbol_rate="27500000" system="1"/>
+- <transponder fec_inner="3" frequency="12418000" modulation="1" onid="1" polarization="0" symbol_rate="27500000" system="0" tsid="101"/>
+- <transponder fec_inner="2" frequency="12437000" modulation="2" onid="86" polarization="1" symbol_rate="27500000" system="1" tsid="27"/>
+- <transponder fec_inner="3" frequency="12456000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12476000" modulation="1" onid="86" polarization="1" symbol_rate="27500000" system="0" tsid="26"/>
+- <transponder fec_inner="3" frequency="12608000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="12614000" modulation="1" polarization="1" symbol_rate="14685000" system="0"/>
+- <transponder fec_inner="3" frequency="12633000" modulation="1" polarization="1" symbol_rate="3720000" system="0"/>
+- <transponder fec_inner="3" frequency="12637000" modulation="1" polarization="0" symbol_rate="14465000" system="0"/>
+- <transponder fec_inner="3" frequency="12644000" modulation="1" polarization="1" symbol_rate="3200000" system="0"/>
+- <transponder fec_inner="3" frequency="12649000" modulation="1" polarization="1" symbol_rate="3977000" system="0"/>
+- <transponder fec_inner="1" frequency="12668000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="3" frequency="12672000" modulation="1" polarization="0" symbol_rate="3300000" system="0"/>
+- <transponder fec_inner="4" frequency="12678000" modulation="1" polarization="1" symbol_rate="13333000" system="0"/>
+- <transponder fec_inner="3" frequency="12680000" modulation="1" onid="95" polarization="0" symbol_rate="9404000" system="0" tsid="1"/>
+- <transponder fec_inner="3" frequency="12690000" modulation="1" polarization="0" symbol_rate="3330000" system="0"/>
+- <transponder fec_inner="3" frequency="12690000" modulation="1" polarization="1" symbol_rate="2650000" system="0"/>
+- <transponder fec_inner="3" frequency="12697000" modulation="1" polarization="1" symbol_rate="6150000" system="1"/>
+- <transponder fec_inner="3" frequency="12701000" modulation="1" polarization="0" symbol_rate="6111000" system="0"/>
+- <transponder fec_inner="0" frequency="12701000" modulation="1" polarization="1" symbol_rate="6150000" system="0"/>
+- <transponder fec_inner="3" frequency="12715000" modulation="1" polarization="0" symbol_rate="3330000" system="0"/>
+- <transponder fec_inner="3" frequency="12724000" modulation="1" polarization="0" symbol_rate="1772000" system="0"/>
+- <transponder fec_inner="3" frequency="12736000" modulation="1" polarization="0" symbol_rate="3038000" system="0"/>
++ <sat name="Express AM22 (53.0E)" flags="0" position="530">
++ <transponder frequency="10962000" symbol_rate="12000000" polarization="1" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="10974000" symbol_rate="8150000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="10975000" symbol_rate="1800000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="10978000" symbol_rate="1800000" polarization="1" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="10995000" symbol_rate="3255000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11044000" symbol_rate="44950000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11096000" symbol_rate="6164000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="11098000" symbol_rate="3978000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11124000" symbol_rate="8776000" polarization="1" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="11161000" symbol_rate="5785000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11477000" symbol_rate="2222000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11496000" symbol_rate="5000000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11528000" symbol_rate="2530000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11534000" symbol_rate="2893000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11543000" symbol_rate="2893000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11548000" symbol_rate="2893000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11612000" symbol_rate="3125000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="11616000" symbol_rate="2894000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11626000" symbol_rate="3125000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="11630000" symbol_rate="2893000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11647000" symbol_rate="2893000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11690000" symbol_rate="3125000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12631000" symbol_rate="2532000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12632000" symbol_rate="2170000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12635000" symbol_rate="2893000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12637000" symbol_rate="2532000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12639000" symbol_rate="2894000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12643000" symbol_rate="2170000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12644000" symbol_rate="2532000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12648000" symbol_rate="2894000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12652000" symbol_rate="2532000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12656000" symbol_rate="3125000" polarization="0" fec_inner="1" system="0" modulation="0"/>
++ <transponder frequency="12661000" symbol_rate="3125000" polarization="0" fec_inner="1" system="0" modulation="0"/>
++ <transponder frequency="12664000" symbol_rate="27500000" polarization="1" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="12716000" symbol_rate="27500000" polarization="1" fec_inner="2" system="0" modulation="0"/>
++ <transponder frequency="12721000" symbol_rate="1865000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12727000" symbol_rate="2592000" polarization="0" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="12740000" symbol_rate="2172000" polarization="0" fec_inner="3" system="0" modulation="0"/>
+ </sat>
+- <sat flags="1" name="Express AM22 (53.0E)" position="530">
+- <transponder fec_inner="3" frequency="10974000" modulation="1" onid="1326" polarization="0" symbol_rate="8150000" system="0" tsid="801"/>
+- <transponder fec_inner="5" frequency="10974000" modulation="1" polarization="1" symbol_rate="32223000" system="0"/>
+- <transponder fec_inner="3" frequency="11031000" modulation="1" polarization="0" symbol_rate="3750000" system="0"/>
+- <transponder fec_inner="3" frequency="11044000" modulation="1" onid="4369" polarization="1" symbol_rate="44950000" system="0" tsid="4"/>
+- <transponder fec_inner="3" frequency="11081500" modulation="1" polarization="0" symbol_rate="1466000" system="0"/>
+- <transponder fec_inner="3" frequency="11083000" modulation="1" polarization="1" symbol_rate="3000000" system="0"/>
+- <transponder fec_inner="3" frequency="11096000" modulation="1" polarization="1" symbol_rate="6400000" system="0"/>
+- <transponder fec_inner="3" frequency="11097000" modulation="1" polarization="0" symbol_rate="3979000" system="0"/>
+- <transponder fec_inner="3" frequency="11160000" modulation="1" polarization="1" symbol_rate="5786000" system="0"/>
+- <transponder fec_inner="3" frequency="11184000" modulation="1" polarization="1" symbol_rate="11111000" system="0"/>
+- <transponder fec_inner="3" frequency="11481000" modulation="1" polarization="0" symbol_rate="41250000" system="0"/>
+- <transponder fec_inner="3" frequency="11616500" modulation="1" polarization="1" symbol_rate="2894000" system="0"/>
+- <transponder fec_inner="3" frequency="11630000" modulation="1" polarization="1" symbol_rate="2894000" system="0"/>
+- <transponder fec_inner="3" frequency="12633000" modulation="1" polarization="0" symbol_rate="2170000" system="0"/>
+- <transponder fec_inner="3" frequency="12637000" modulation="1" polarization="0" symbol_rate="2532000" system="0"/>
+- <transponder fec_inner="3" frequency="12639000" modulation="1" polarization="1" symbol_rate="2893000" system="0"/>
+- <transponder fec_inner="3" frequency="12642000" modulation="1" polarization="1" symbol_rate="2170000" system="0"/>
+- <transponder fec_inner="3" frequency="12645000" modulation="1" polarization="0" symbol_rate="2532000" system="0"/>
+- <transponder fec_inner="3" frequency="12648000" modulation="1" polarization="0" symbol_rate="2532000" system="0"/>
+- <transponder fec_inner="3" frequency="12652000" modulation="1" polarization="0" symbol_rate="2532000" system="0"/>
+- <transponder fec_inner="1" frequency="12656000" modulation="1" polarization="0" symbol_rate="3125000" system="0"/>
+- <transponder fec_inner="1" frequency="12661000" modulation="1" polarization="0" symbol_rate="3125000" system="0"/>
+- <transponder fec_inner="3" frequency="12664000" modulation="1" onid="3030" polarization="1" symbol_rate="30000000" system="0" tsid="60"/>
+- <transponder fec_inner="5" frequency="12724000" modulation="1" polarization="0" symbol_rate="2480000" system="0"/>
+- <transponder fec_inner="3" frequency="12741000" modulation="1" polarization="0" symbol_rate="7086000" system="0"/>
+- </sat>
+ <sat flags="1" name="Intelsat 702 (55.0E)" position="550">
+ <transponder fec_inner="4" frequency="11126000" modulation="1" polarization="1" symbol_rate="3125000" system="0"/>
+ <transponder fec_inner="3" frequency="11129000" modulation="1" polarization="1" symbol_rate="3700000" system="0"/>
+@@ -1899,74 +2012,6 @@
+ <transponder fec_inner="3" frequency="4185000" modulation="1" polarization="0" symbol_rate="20000000" system="0"/>
+ <transponder fec_inner="2" frequency="4190000" modulation="1" polarization="1" symbol_rate="12207000" system="0"/>
+ </sat>
+- <sat flags="1" name="Eutelsat W3 (7.0E)" position="70">
+- <transponder fec_inner="3" frequency="10762000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="10880000" modulation="2" polarization="1" symbol_rate="17360000" system="1"/>
+- <transponder fec_inner="3" frequency="10899000" modulation="1" polarization="1" symbol_rate="9404000" system="0"/>
+- <transponder fec_inner="2" frequency="10928000" modulation="2" polarization="0" symbol_rate="30000000" system="1"/>
+- <transponder fec_inner="3" frequency="10928000" modulation="1" onid="126" polarization="1" symbol_rate="27500000" system="0" tsid="2578"/>
+- <transponder fec_inner="0" frequency="10960000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="10960000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="10968000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="10968000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="10977000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="10978000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="10982000" modulation="1" polarization="1" symbol_rate="13333000" system="0"/>
+- <transponder fec_inner="0" frequency="10986000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="10986000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="10994000" modulation="1" polarization="1" symbol_rate="4434000" system="0"/>
+- <transponder fec_inner="0" frequency="10996000" modulation="1" onid="235" polarization="0" symbol_rate="6666000" system="0" tsid="17185"/>
+- <transponder fec_inner="0" frequency="11000000" modulation="1" polarization="1" symbol_rate="4434000" system="0"/>
+- <transponder fec_inner="0" frequency="11004000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11014000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11014000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11023000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11043000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11052000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11052000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11061000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11061000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11066000" modulation="1" polarization="0" symbol_rate="13333000" system="0"/>
+- <transponder fec_inner="0" frequency="11070000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11071000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11078000" modulation="1" polarization="1" symbol_rate="4434000" system="0"/>
+- <transponder fec_inner="0" frequency="11079000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11084000" modulation="1" polarization="0" symbol_rate="13333000" system="0"/>
+- <transponder fec_inner="0" frequency="11084000" modulation="1" polarization="1" symbol_rate="4434000" system="0"/>
+- <transponder fec_inner="0" frequency="11088000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11097000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11102000" modulation="1" polarization="0" symbol_rate="13333000" system="0"/>
+- <transponder fec_inner="0" frequency="11106000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11106000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="5" frequency="11125000" modulation="1" polarization="1" symbol_rate="2677000" system="0"/>
+- <transponder fec_inner="0" frequency="11126000" modulation="1" polarization="0" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="3" frequency="11126000" modulation="1" polarization="1" symbol_rate="5697000" system="0"/>
+- <transponder fec_inner="0" frequency="11142000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="0" frequency="11152000" modulation="1" polarization="1" symbol_rate="6666000" system="0"/>
+- <transponder fec_inner="3" frequency="11175000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="2" frequency="11262000" modulation="1" onid="126" polarization="0" symbol_rate="27500000" system="0" tsid="50500"/>
+- <transponder fec_inner="3" frequency="11283000" modulation="1" onid="126" polarization="1" symbol_rate="27500000" system="0" tsid="40400"/>
+- <transponder fec_inner="3" frequency="11298000" modulation="1" polarization="0" symbol_rate="13500000" system="0"/>
+- <transponder fec_inner="2" frequency="11324000" modulation="1" onid="16" polarization="1" symbol_rate="27500000" system="0" tsid="1"/>
+- <transponder fec_inner="2" frequency="11346000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="11361000" modulation="1" polarization="1" symbol_rate="18086000" system="0"/>
+- <transponder fec_inner="4" frequency="11386000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
+- <transponder fec_inner="3" frequency="11405000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="0" frequency="11429000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="2" frequency="11451000" modulation="1" polarization="1" symbol_rate="25066000" system="0"/>
+- <transponder fec_inner="3" frequency="11471000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
+- <transponder fec_inner="3" frequency="11492000" modulation="1" polarization="1" symbol_rate="30000000" system="0"/>
+- <transponder fec_inner="3" frequency="11513000" modulation="1" onid="126" polarization="0" symbol_rate="27500000" system="0" tsid="50900"/>
+- <transponder fec_inner="3" frequency="11534000" modulation="1" polarization="1" symbol_rate="30000000" system="0"/>
+- <transponder fec_inner="3" frequency="11554000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="11575000" modulation="1" onid="126" polarization="1" symbol_rate="30000000" system="0" tsid="50600"/>
+- <transponder fec_inner="3" frequency="11596000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
+- <transponder fec_inner="3" frequency="11617000" modulation="1" polarization="1" symbol_rate="30000000" system="0"/>
+- <transponder fec_inner="3" frequency="11637000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
+- <transponder fec_inner="3" frequency="11658000" modulation="1" polarization="1" symbol_rate="30000000" system="0"/>
+- <transponder fec_inner="3" frequency="11678000" modulation="1" polarization="0" symbol_rate="30000000" system="0"/>
+- <transponder fec_inner="4" frequency="12520000" modulation="1" polarization="1" symbol_rate="6111000" system="0"/>
+- </sat>
+ <sat flags="1" name="Eutelsat W5 (70.5E)" position="705">
+ <transponder fec_inner="2" frequency="11214000" modulation="1" polarization="0" symbol_rate="13020000" system="0"/>
+ <transponder fec_inner="5" frequency="11377000" modulation="1" polarization="1" symbol_rate="7440000" system="0"/>
+@@ -1984,41 +2029,45 @@
+ <transponder fec_inner="3" frequency="12677000" modulation="1" polarization="1" symbol_rate="1447000" system="0"/>
+ <transponder fec_inner="1" frequency="12702000" modulation="1" polarization="0" symbol_rate="26656000" system="0"/>
+ </sat>
+- <sat flags="1" name="LMI 1 (75.0E)" position="750">
+- <transponder fec_inner="5" frequency="12518000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="3" frequency="12549000" modulation="1" polarization="1" symbol_rate="12300000" system="0"/>
+- <transponder fec_inner="5" frequency="12579000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="5" frequency="12610000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="3" frequency="12640000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="5" frequency="12670000" modulation="1" polarization="1" symbol_rate="22000000" system="0"/>
+- <transponder fec_inner="3" frequency="12693000" modulation="1" polarization="1" symbol_rate="10000000" system="0"/>
+- <transponder fec_inner="5" frequency="12701000" modulation="1" polarization="1" symbol_rate="8290000" system="0"/>
+- <transponder fec_inner="3" frequency="12722000" modulation="1" polarization="1" symbol_rate="3215000" system="0"/>
+- <transponder fec_inner="3" frequency="12729000" modulation="1" polarization="1" symbol_rate="2963000" system="0"/>
+- <transponder fec_inner="3" frequency="12732000" modulation="1" polarization="1" symbol_rate="4400000" system="0"/>
+- <transponder fec_inner="3" frequency="12742000" modulation="1" polarization="1" symbol_rate="4400000" system="0"/>
++ <sat name="ABS 1/1A/Eutelsat W75 (75.0E)" flags="0" position="750">
++ <transponder frequency="3449000" symbol_rate="2960000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="3451000" symbol_rate="1001000" polarization="1" fec_inner="3" system="1" modulation="2"/>
++ <transponder frequency="3455000" symbol_rate="3100000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="3559000" symbol_rate="28800000" polarization="1" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="3659000" symbol_rate="27500000" polarization="0" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="3679000" symbol_rate="30000000" polarization="1" fec_inner="4" system="1" modulation="2"/>
++ <transponder frequency="12505000" symbol_rate="2500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12518000" symbol_rate="22000000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12548000" symbol_rate="22000000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12559000" symbol_rate="1851000" polarization="0" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="12579000" symbol_rate="22000000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12579000" symbol_rate="22000000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12601000" symbol_rate="5170000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12610000" symbol_rate="22000000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12612000" symbol_rate="5000000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12640000" symbol_rate="22000000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12670000" symbol_rate="22000000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12694000" symbol_rate="10750000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12704000" symbol_rate="3900000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12708000" symbol_rate="3900000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12732000" symbol_rate="22000000" polarization="1" fec_inner="5" system="0" modulation="0"/>
+ </sat>
+- <sat flags="1" name="Eurobird 9 (9.0E)" position="90">
+- <transponder fec_inner="4" frequency="11727000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="11747000" modulation="1" onid="157" polarization="0" symbol_rate="27500000" system="0" tsid="1"/>
+- <transponder fec_inner="4" frequency="11766000" modulation="1" onid="110" polarization="1" symbol_rate="27500000" system="0" tsid="33"/>
+- <transponder fec_inner="3" frequency="11785000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="11804000" modulation="1" onid="158" polarization="1" symbol_rate="27500000" system="0" tsid="158"/>
+- <transponder fec_inner="3" frequency="11823000" modulation="1" onid="1325" polarization="0" symbol_rate="27500000" system="0" tsid="1"/>
+- <transponder fec_inner="3" frequency="11843000" modulation="1" onid="158" polarization="1" symbol_rate="27500000" system="0" tsid="5600"/>
+- <transponder fec_inner="3" frequency="11862000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="11881000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="4" frequency="11900000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="4" frequency="11919000" modulation="1" onid="100" polarization="1" symbol_rate="27500000" system="0" tsid="6000"/>
+- <transponder fec_inner="3" frequency="11938000" modulation="1" onid="158" polarization="0" symbol_rate="27500000" system="0" tsid="6100"/>
+- <transponder fec_inner="3" frequency="11958000" modulation="1" polarization="1" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="3" frequency="11977000" modulation="1" onid="158" polarization="0" symbol_rate="27500000" system="0" tsid="6300"/>
+- <transponder fec_inner="3" frequency="11994000" modulation="2" polarization="1" symbol_rate="19909000" system="0"/>
+- <transponder fec_inner="3" frequency="12015000" modulation="1" polarization="0" symbol_rate="27500000" system="0"/>
+- <transponder fec_inner="2" frequency="12034000" modulation="2" polarization="1" symbol_rate="27500000" system="1"/>
+- <transponder fec_inner="3" frequency="12054000" modulation="1" onid="156" polarization="0" symbol_rate="27500000" system="0" tsid="6700"/>
+- <transponder fec_inner="2" frequency="12073000" modulation="2" polarization="1" symbol_rate="27500000" system="1"/>
+- <transponder fec_inner="3" frequency="12092000" modulation="1" onid="156" polarization="0" symbol_rate="27500000" system="0" tsid="6900"/>
++ <sat name="Express AM2/MD1 (80.0E)" flags="0" position="800">
++ <transponder frequency="3625000" symbol_rate="33483000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="3675000" symbol_rate="33483000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="3875000" symbol_rate="32000000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11044000" symbol_rate="44948000" polarization="0" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="11101000" symbol_rate="3227000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="11606000" symbol_rate="44948000" polarization="1" fec_inner="4" system="0" modulation="0"/>
+ </sat>
++ <sat name="Intelsat 15 (85.2E)" flags="0" position="852">
++ <transponder frequency="11594000" symbol_rate="2500000" polarization="0" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12504000" symbol_rate="4217000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12510000" symbol_rate="3700000" polarization="1" fec_inner="5" system="0" modulation="0"/>
++ <transponder frequency="12533000" symbol_rate="6667000" polarization="1" fec_inner="3" system="0" modulation="0"/>
++ <transponder frequency="12565000" symbol_rate="6564000" polarization="1" fec_inner="4" system="0" modulation="0"/>
++ <transponder frequency="12600000" symbol_rate="30000000" polarization="1" fec_inner="2" system="1" modulation="2"/>
++ <transponder frequency="12640000" symbol_rate="30000000" polarization="1" fec_inner="4" system="0" modulation="0"/>
++ </sat>
+ </satellites>
+
file://resize_framebuffer.diff;patch=1 \
file://allow_different_demux.diff;patch=1"
+SRC_URI_append_bm750 = " \
+ file://32bpp.diff;patch=1 \
+ file://resize_framebuffer.diff;patch=1 \
+ file://allow_different_demux.diff;patch=1"
+
+SRC_URI_append_vusolo = " \
+ file://32bpp.diff;patch=1 \
+ file://resize_framebuffer.diff;patch=1 \
+ file://allow_different_demux.diff;patch=1"
+
S = "${WORKDIR}/libs"
EXTRA_OECONF = "--with-target=native"
file://allow_different_demux.diff;patch=1 \
file://plugin.py"
+SRC_URI_append_vuplus = " \
+ file://tuxtxt_vuplus.patch;patch=1;pnum=1"
+
FILES_${PN} = "/usr/bin/tuxtxt /usr/share/fonts /usr/lib/enigma2/python/Plugins/Extensions/Tuxtxt /etc/tuxtxt"
S = "${WORKDIR}/tuxtxt"
--- /dev/null
+--- tuxtxt_org/tuxtxt.c 2010-04-01 13:18:13.000000000 +0900
++++ tuxtxt/tuxtxt.c 2010-04-01 13:21:57.000000000 +0900
+@@ -2664,7 +2664,8 @@
+ static int init_lcd = 1, old_cached_pages = -1, old_page = -1, old_subpage = -1, old_subpage_max = -1, old_hintmode = -1;
+ int x, y, subpage_max = 0, update_lcd = 0;
+
+- if (lcd == -1) return; // for Dreamboxes without LCD-Display (5xxx)
++// if (lcd == -1)
++ return; // for Dreamboxes without LCD-Display (5xxx)
+ /* init or update lcd */
+ if (init_lcd)
+ {
--- /dev/null
+# do not edit this file, it will be overwritten on update
+
+KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660", OPTIONS="last_rule"
+KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660", OPTIONS="last_rule"
+KERNEL=="ptmx", GROUP="tty", MODE="0666", OPTIONS="last_rule"
+KERNEL=="tty", GROUP="tty", MODE="0666", OPTIONS="last_rule"
+KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620", OPTIONS="last_rule"
+KERNEL=="vcs|vcs[0-9]*|vcsa|vcsa[0-9]*", GROUP="tty", OPTIONS="last_rule"
+KERNEL=="console", MODE="0600", OPTIONS="last_rule"
+
+# serial
+KERNEL=="tty[A-Z]*|pppox*|ircomm*|noz*", GROUP="uucp"
+KERNEL=="ppp", MODE="0600", OPTIONS+="ignore_remove"
+KERNEL=="mwave", NAME="modems/mwave", GROUP="uucp"
+KERNEL=="hvc*|hvsi*", GROUP="uucp"
+KERNEL=="lirc0", SYMLINK+="lirc"
+
+# mem
+KERNEL=="null|zero|full|random|urandom", MODE="0666"
+KERNEL=="null", SYMLINK+="XOR"
+KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640"
+KERNEL=="ram0", SYMLINK+="ramdisk"
+KERNEL=="ram1", SYMLINK+="ram"
+
+# input
+KERNEL=="mouse*|mice|event*", NAME="input/%k", MODE="0640"
+KERNEL=="ts[0-9]*|uinput", NAME="input/%k", MODE="0600"
+KERNEL=="js[0-9]*", NAME="input/%k", MODE="0644", SYMLINK+="%k"
+
+# video4linux
+KERNEL=="vbi0", SYMLINK+="vbi"
+KERNEL=="radio0", SYMLINK+="radio"
+KERNEL=="video0", SYMLINK+="video"
+
+# graphics
+KERNEL=="agpgart", MODE="0600"
+KERNEL=="card[0-9]*", NAME="dri/%k", MODE="0666"
+#KERNEL=="fb0", SYMLINK+="fb"
+
+# DVB video
+SUBSYSTEM=="dvb", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}'", NAME="%c"
+
+# Firewire
+KERNEL=="dv1394*", SYMLINK+="dv1394/%n"
+KERNEL=="video1394*", NAME="video1394/%n"
+
+# firmware class requests
+SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"
+
+# libusb device nodes
+SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0644"
+
+# printer
+KERNEL=="parport[0-9]*", GROUP="lp"
+SUBSYSTEM=="printer", KERNEL=="lp*", GROUP="lp"
+SUBSYSTEM=="usb", KERNEL=="lp*", NAME="usb/%k", SYMLINK+="usb%k", GROUP="lp"
+KERNEL=="lp[0-9]*", GROUP="lp", SYMLINK+="par%n"
+KERNEL=="irlpt[0-9]*", GROUP="lp"
+
+# block, tapes, block-releated
+SUBSYSTEM=="block", GROUP="disk", MODE="0640"
+SUBSYSTEM=="block", KERNEL=="sr[0-9]*", SYMLINK+="scd%n"
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="0|7|14", ATTR{timeout}="60"
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="1", ATTR{timeout}="900"
+KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions"
+KERNEL=="fd[0-9]", GROUP="floppy"
+KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", RUN+="create_floppy_devices -c -t $attr{cmos} -m %M -M 0640 -G floppy $root/%k"
+KERNEL=="sch[0-9]*", GROUP="disk"
+KERNEL=="sg[0-9]*", ATTRS{type}!="3|6", GROUP="disk", MODE="0640"
+KERNEL=="ht[0-9]*|nht[0-9]*", GROUP="disk"
+KERNEL=="pg[0-9]*", GROUP="disk"
+KERNEL=="pt[0-9]*|npt[0-9]*", GROUP="disk"
+KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk"
+KERNEL=="rawctl", NAME="raw/%k", GROUP="disk"
+SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", NAME="raw/%k", GROUP="disk"
+KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%k"
+KERNEL=="pktcdvd", NAME="pktcdvd/control"
+KERNEL=="qft0", SYMLINK+="ftape"
+SUBSYSTEM=="bsg", NAME="bsg/%k"
+SUBSYSTEM=="aoe", NAME="etherd/%k", GROUP="disk"
+
+# network
+KERNEL=="tun", NAME="net/%k", MODE="0666", OPTIONS+="ignore_remove"
+
+# CPU
+KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
+KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
+KERNEL=="microcode", NAME="cpu/microcode", MODE="0600"
+
+# miscellaneous
+KERNEL=="fuse", MODE="0666"
+KERNEL=="rtc|rtc0", MODE="0644"
+KERNEL=="rtc0", SYMLINK+="rtc"
+KERNEL=="auer[0-9]*", NAME="usb/%k"
+KERNEL=="hw_random", NAME="hwrng", SYMLINK+="%k"
+KERNEL=="mmtimer", MODE="0644"
+KERNEL=="rflash[0-9]*", MODE="0400"
+KERNEL=="rrom[0-9]*", MODE="0400"
+KERNEL=="sbpcd0", SYMLINK+="sbpcd"
+KERNEL=="slram[0-9]*", SYMLINK+="xpram%n"
+KERNEL=="sxctl", NAME="specialix_sxctl", SYMLINK+="%k"
+KERNEL=="rioctl", NAME="specialix_rioctl", SYMLINK+="%k"
+KERNEL=="iowarrior[0-9]*", NAME="usb/%k"
+
+# do not delete static device nodes
+ACTION=="remove", NAME=="?*", TEST=="/lib/udev/devices/$name", OPTIONS+="ignore_remove"
+
--- /dev/null
+# Default for /etc/init.d/udev
+
+# Comment this out to disable device cache
+#DEVCACHE="/etc/dev.tar"
--- /dev/null
+#!/bin/sh -e
+### BEGIN INIT INFO
+# Provides: udev
+# Required-Start: mountkernfs
+# Required-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Start udevd, populate /dev and load drivers.
+### END INIT INFO
+
+# This script is based on Debian's.
+
+COLDPLUG=no
+COLDPLUG_TARBALL="/lib/udev/devices.tar.gz"
+
+for x in $(cat /proc/cmdline); do
+ case $x in
+ coldplug)
+ COLDPLUG=yes
+ ;;
+ esac
+done
+
+# we need to unmount /dev/pts/ and remount it later over the tmpfs
+unmount_devpts() {
+ if mountpoint -q /dev/pts/; then
+ umount -n -l /dev/pts/
+ fi
+
+ if mountpoint -q /dev/shm/; then
+ umount -n -l /dev/shm/
+ fi
+}
+
+# mount a tmpfs over /dev, if somebody did not already do it
+mount_tmpfs() {
+ if grep -q "/dev tmpfs" /proc/mounts; then
+ return
+ fi
+
+ if ! mount -n -o size=$tmpfs_size,mode=0755 -t tmpfs udev /dev; then
+ echo "udev requires tmpfs support, not started."
+ exit 1
+ fi
+
+ return 0
+}
+
+create_dev_makedev() {
+ if [ -e /sbin/MAKEDEV ]; then
+ ln -sf /sbin/MAKEDEV /dev/MAKEDEV
+ else
+ ln -sf /bin/true /dev/MAKEDEV
+ fi
+}
+
+make_extra_nodes() {
+ ret=1
+ if [ "$(echo /lib/udev/devices/*)" != "/lib/udev/devices/*" ]; then
+ cp -a /lib/udev/devices/* /$1/
+ ret=0
+ fi
+
+ [ -e /etc/udev/links.conf ] || return $ret
+
+ grep '^[^#]' /etc/udev/links.conf | \
+ while read type name arg1; do
+ [ "$type" -a "$name" -a ! -e "/$1/$name" -a ! -L "/$1/$name" ] || continue
+ case "$type" in
+ L) ln -s $arg1 /$1/$name ;;
+ D) mkdir -p /$1/$name ;;
+ M) mknod -m 600 /$1/$name $arg1 ;;
+ *) echo "links.conf: unparseable line ($type $name $arg1)" >&2 ;;
+ esac
+ done
+
+ return $ret
+}
+
+##############################################################################
+
+[ -x /sbin/udevd ] || exit 0
+
+PATH="/sbin:/bin:/usr/bin"
+
+# defaults
+tmpfs_size="2M"
+udev_root="/dev"
+
+if [ -e /etc/udev/udev.conf ]; then
+ . /etc/udev/udev.conf
+fi
+
+
+##############################################################################
+
+# When modifying this script, do not forget that between the time that the
+# new /dev has been mounted and udevadm trigger has been run there will be
+# no /dev/null. This also means that you cannot use the "&" shell command.
+
+case "$1" in
+ start)
+ if [ -e "$udev_root/.udev/" ]; then
+ if mountpoint -q $udev_root/; then
+ TMPFS_MOUNTED=1
+ else
+ echo ".udev/ already exists on the static $udev_root!"
+ fi
+ fi
+
+ echo > /sys/kernel/uevent_helper
+
+ if [ -z "$TMPFS_MOUNTED" ]; then
+ unmount_devpts
+ mount_tmpfs
+ else
+ # and clean up the database of the initramfs udev
+ rm -rf /dev/.udev/
+ fi
+
+ # /dev/null must be created before udevd is started
+ if ! make_extra_nodes "$udev_root"; then
+ COLDPLUG=yes
+ fi
+ if [ ! -f "$COLDPLUG_TARBALL" ]; then
+ COLDPLUG=yes
+ fi
+
+ # if this directory is not present /dev will not be updated by udev
+ mkdir -p /dev/.udev/db/
+
+ echo "Startting the hotplug events dispatcher"
+ udevd --daemon
+
+ mkdir -p /dev/.udev/queue/ /dev/.udev/rules.d/
+
+ create_dev_makedev
+
+#force COLDPLUG to yes
+
+ COLDPLUG=yes;
+ if [ $COLDPLUG != "no" ]; then
+ echo "Synthesizing the initial hotplug events"
+ udevadm trigger
+
+ # wait for the udevd childs to finish
+ echo "Waiting for /dev to be fully populated"
+ if udevadm settle; then
+ echo 'done'
+ else
+ echo 'timeout'
+ fi
+ fi
+
+ ;;
+
+ stop)
+ echo "Stopping the hotplug events dispatcher"
+ start-stop-daemon --stop --name udevd --quiet --oknodo
+ ;;
+
+ restart)
+ echo "Stopping the hotplug events dispatcher"
+ start-stop-daemon --stop --name udevd --quiet --oknodo
+
+ echo "Startting the hotplug events dispatcher"
+ udevd --daemon
+ ;;
+
+ reload|force-reload)
+ udevadm control --reload_rules
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|reload|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
DESCRIPTION = "Provide per-machine static nodes of /dev"
RDEPENDS = "udev"
-PR = "r0"
+PR = "r2"
SRC_URI = "file://udev_static_devices_tarball"
file://local.rules \
"
+SRC_URI_append_bm750 = " file://50-udev-default.rules "
+SRC_URI_append_vusolo = " file://50-udev-default.rules "
SRC_URI_append_h2200 = " file://50-hostap_cs.rules "
PACKAGE_ARCH_h2200 = "h2200"
do_install_append_opendreambox() {
install -m 0644 ${WORKDIR}/??-od-*.rules ${D}${sysconfdir}/udev/rules.d/
}
+
+do_install_append_vuplus() {
+ install -m 0644 ${WORKDIR}/50-udev-default.rules ${D}${sysconfdir}/udev/rules.d/50-udev-default.rules
+}
+
export UCFLAGS = '${CFLAGS} -DNODEBUG -DUNIONFS_VERSION=\\"${PV}\\"'
CFLAGS = "${BUILD_OPTIMIZATIONS}"
-CFLAGS_opendreambox = ""
\ No newline at end of file
+CFLAGS_opendreambox = ""
+CFLAGS_vuplus = ""
# unwanted dependencies for SlugOS.
RDEPENDS_slugos = ""
RDEPENDS_opendreambox = ""
+RDEPENDS_vuplus = ""
--- /dev/null
+# Vuplus /etc/vsftpd.conf
+#
+# Please see vsftpd.conf.5 for all compiled in defaults.
+#
+# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
+# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
+# capabilities.
+#
+# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
+anonymous_enable=NO
+#
+# Uncomment this to allow local users to log in.
+local_enable=YES
+#
+# Uncomment this to enable any form of FTP write command.
+write_enable=YES
+#
+# Default umask for local users is 077. You may wish to change this to 022,
+# if your users expect that (022 is used by most other ftpd's)
+#local_umask=022
+#
+# Uncomment this to allow the anonymous FTP user to upload files. This only
+# has an effect if the above global write enable is activated. Also, you will
+# obviously need to create a directory writable by the FTP user.
+#anon_upload_enable=YES
+#
+# Uncomment this if you want the anonymous FTP user to be able to create
+# new directories.
+#anon_mkdir_write_enable=YES
+#
+# Activate directory messages - messages given to remote users when they
+# go into a certain directory.
+dirmessage_enable=YES
+#
+# Activate logging of uploads/downloads.
+#xferlog_enable=YES
+#
+# Make sure PORT transfer connections originate from port 20 (ftp-data).
+connect_from_port_20=YES
+#
+# If you want, you can arrange for uploaded anonymous files to be owned by
+# a different user. Note! Using "root" for uploaded files is not
+# recommended!
+#chown_uploads=YES
+#chown_username=whoever
+#
+# You may override where the log file goes if you like. The default is shown
+# below.
+#xferlog_file=/var/log/vsftpd.log
+#
+# If you want, you can have your log file in standard ftpd xferlog format
+#xferlog_std_format=YES
+#
+# You may change the default value for timing out an idle session.
+#idle_session_timeout=600
+#
+# You may change the default value for timing out a data connection.
+#data_connection_timeout=120
+#
+# It is recommended that you define on your system a unique user which the
+# ftp server can use as a totally isolated and unprivileged user.
+#nopriv_user=ftpsecure
+#
+# Enable this and the server will recognise asynchronous ABOR requests. Not
+# recommended for security (the code is non-trivial). Not enabling it,
+# however, may confuse older FTP clients.
+async_abor_enable=YES
+#
+# By default the server will pretend to allow ASCII mode but in fact ignore
+# the request. Turn on the below options to have the server actually do ASCII
+# mangling on files when in ASCII mode.
+# Beware that turning on ascii_download_enable enables malicious remote parties
+# to consume your I/O resources, by issuing the command "SIZE /big/file" in
+# ASCII mode.
+# These ASCII options are split into upload and download because you may wish
+# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
+# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
+# on the client anyway..
+#ascii_upload_enable=YES
+#ascii_download_enable=YES
+#
+# You may fully customise the login banner string:
+ftpd_banner=Welcome to the Vuplus FTP service.
+#
+# You may specify a file of disallowed anonymous e-mail addresses. Apparently
+# useful for combatting certain DoS attacks.
+#deny_email_enable=YES
+# (default follows)
+#banned_email_file=/etc/vsftpd.banned_emails
+#
+# You may specify an explicit list of local users to chroot() to their home
+# directory. If chroot_local_user is YES, then this list becomes a list of
+# users to NOT chroot().
+#chroot_list_enable=YES
+# (default follows)
+#chroot_list_file=/etc/vsftpd.chroot_list
+#
+# You may activate the "-R" option to the builtin ls. This is disabled by
+# default to avoid remote users being able to cause excessive I/O on large
+# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
+# the presence of the "-R" option, so there is a strong case for enabling it.
+ls_recurse_enable=YES
+#
+secure_chroot_dir=/dev/shm
+local_root=/
sed -i '/libcap/ d' vsf_findlibs.sh
}
+do_configure_append_vuplus() {
+ # do not link against libcap
+ sed -i '/^#define VSF_SYSDEP_HAVE_LIBCAP$/ d' sysdeputil.c
+ sed -i '/libcap/ d' vsf_findlibs.sh
+}
+
do_compile() {
oe_runmake "LIBS=-lcrypt -L${STAGING_LIBDIR}"
}
--- /dev/null
+DESCRIPTION = "Bootlogo support"
+SECTION = "base"
+PRIORITY = "required"
+LICENSE = "proprietary"
+
+IMAGES_VERSION = "1"
+BINARY_VERSION = "1"
+BINARY_VERSION_bm750 = "6"
+
+PV = "${BINARY_VERSION}.${IMAGES_VERSION}"
+PR = "r3"
+
+
+SRC_URI = "file://bootlogo.mvi file://backdrop.mvi file://bootlogo_wait.mvi file://switchoff.mvi"
+
+S = "${WORKDIR}/"
+
+MVI = "bootlogo backdrop bootlogo_wait"
+
+do_install() {
+ install -d ${D}/boot
+ install -m 0755 ${S}/bootlogo-${MACHINE}-${BINARY_VERSION}.elf ${D}/boot/bootlogo.elf
+ for i in ${MVI}; do
+ install -m 0755 ${S}/$i-${MACHINE}-${IMAGES_VERSION}.mvi ${D}/boot/$i.mvi;
+ done;
+}
+
+
+do_install_vuplus() {
+ install -d ${D}/boot
+ install -d ${D}/usr/share
+ for i in ${MVI}; do
+ install -m 0755 ${S}/$i.mvi ${D}/usr/share/$i.mvi;
+ ln -sf /usr/share/$i.mvi ${D}/boot/$i.mvi;
+ done;
+}
+
+pkg_preinst() {
+ [ -d /proc/stb ] && mount -o rw,remount /boot
+}
+
+pkg_postinst() {
+ [ -d /proc/stb ] && mount -o ro,remount /boot
+}
+
+pkg_prerm() {
+ [ -d /proc/stb ] && mount -o rw,remount /boot
+}
+
+pkg_postrm() {
+ [ -d /proc/stb ] && mount -o ro,remount /boot
+}
+
+PACKAGE_ARCH := "${MACHINE_ARCH}"
+FILES_${PN} = "/boot /usr/share"
--- /dev/null
+DESCRIPTION = "Vuplus compatibility links"
+SECTION = "base"
+PRIORITY = "required"
+PV = "1.0"
+PR = "r0"
+
+FILES = "/lib/libgcc_s_nof.so.1 /usr/lib/libcrypto.so.0.9.7 /usr/lib/libssl.so.0.9.7"
+PACKAGE_ARCH = "all"
+
+do_install() {
+ install -d ${D}/lib
+ ln -sf libgcc_s.so.1 ${D}/lib/libgcc_s_nof.so.1
+ install -d ${D}/usr/lib
+ ln -sf libcrypto.so.0.9.8 ${D}/usr/lib/libcrypto.so.0.9.7
+ ln -sf libssl.so.0.9.8 ${D}/usr/lib/libssl.so.0.9.7
+ ln -sf libpython2.6.so.1.0 ${D}/usr/lib/libpython2.5.so.1.0
+}
--- /dev/null
+DESCRIPTION = "Hardware drivers for VuPlus"
+SECTION = "base"
+PRIORITY = "required"
+LICENSE = "proprietary"
+
+
+def get_modules_extension(bb, d):
+ if bb.data.getVar('GLIBC_ADDONS', d, 1) in ['nptl']:
+ return "-gcc4.1"
+ return ""
+
+KV = "2.6.18-7.3"
+
+
+PV_bm750 = "${KV}"
+PV_vusolo = "${KV}"
+
+
+SRCDATE_bm750 = "20100719"
+SRCDATE_vusolo = "20100719"
+
+
+RDEPENDS = "initscripts-vuplus kernel (${KV}) kernel-module-firmware-class kernel-module-input kernel-module-evdev kernel-module-i2c-core kernel-module-snd kernel-module-snd-pcm"
+PR = "r19-${SRCDATE}"
+
+
+SRC_URI = "http://archive.vuplus.com/download/drivers/mbox-dvb-modules-${MACHINE}-${PV}-${SRCDATE}.tar.gz "
+
+S = "${WORKDIR}"
+
+do_install() {
+ install -d ${D}/lib/modules/${KV}/extra
+ for f in *.ko; do
+ install -m 0644 ${WORKDIR}/$f ${D}/lib/modules/${KV}/extra/$f;
+ done
+}
+
+
+
+PACKAGE_ARCH := "${MACHINE_ARCH}"
+FILES_${PN} = "/"
--- /dev/null
+DESCRIPTION = "Small utilities specific to the Vuplus dvb receiver (for DVB v3)"
+SECTION = "base"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+PV = "1.7"
+PR = "r0"
+
+
+SRC_URI = "file://showiframe.c"
+
+SRC_URI += "file://showiframe.pro"
+
+inherit qmake
+
+UTILS = "showiframe"
+
+do_configure_prepend() {
+ cd ${S}/
+ echo "TEMPLATE=subdirs" > dmutils.pro
+ echo "CONFIG=console" >> dmutils.pro
+ echo "SUBDIRS=${UTILS}" >> dmutils.pro
+ install -d ${S}/showiframe
+ install -m 0644 ${WORKDIR}/showiframe.c ${S}/showiframe/showiframe.c
+ install -m 0644 ${WORKDIR}/showiframe.pro ${S}/showiframe/showiframe.pro
+}
+
+do_install() {
+ install -d ${D}/${bindir}/
+ for u in ${UTILS}
+ do
+ install -m 0755 ${S}/${u}/${u} ${D}/${bindir}/
+ done
+}
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+
+#include <linux/dvb/video.h>
+
+void c(int a)
+{
+ if (a < 0)
+ {
+ perror("ioctl");
+ exit(6);
+ }
+}
+
+int main(int argc, char **argv)
+{
+ struct stat s;
+ if (argc != 2)
+ {
+ printf("usage: %s <iframe>\n", *argv);
+ return 3;
+ }
+
+ int f = open(argv[1], O_RDONLY);
+ if (f < 0)
+ {
+ perror(argv[1]);
+ return 4;
+ }
+ fstat(f, &s);
+
+ int fd = open("/dev/dvb/adapter0/video0", O_WRONLY|O_NONBLOCK);
+
+ if (fd <= 0)
+ {
+ perror("/dev/dvb/adapter0/video0");
+ return 2;
+ }
+ else if (fork() != 0)
+ return 0;
+ else
+ {
+ size_t pos=0;
+ int seq_end_avail = 0;
+
+ int count = 7;
+ /* 0x0 0x0 0x1 0xffffffe0 0x10 0x8 0xffffff80 0xffffff80 0x5 0x21 0x0 0x1 0x0 0x1 */
+
+ /* unsigned char pes_header[] = { 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x80, 0x00, 0x00 }; */
+
+ unsigned char pes_header[] = {0x0, 0x0, 0x1, 0xe0, 0x00, 0x00, 0x80, 0x80, 0x5, 0x21, 0x0, 0x1, 0x0, 0x1};
+
+ unsigned char seq_end[] = { 0x00, 0x00, 0x01, 0xB7 };
+ unsigned char iframe[s.st_size];
+ unsigned char stuffing[8192];
+ memset(stuffing, 0, 8192);
+ read(f, iframe, s.st_size);
+ ioctl(fd, VIDEO_SET_STREAMTYPE, 0); // set to mpeg2
+ c(ioctl(fd, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY));
+ c(ioctl(fd, VIDEO_PLAY));
+ c(ioctl(fd, VIDEO_CONTINUE));
+ c(ioctl(fd, VIDEO_CLEAR_BUFFER));
+ while(pos <= (s.st_size-4) && !(seq_end_avail = (!iframe[pos] && !iframe[pos+1] && iframe[pos+2] == 1 && iframe[pos+3] == 0xB7)))
+ ++pos;
+ while(count--){
+ if ((iframe[3] >> 4) != 0xE) // no pes header
+ {
+ write(fd, pes_header, sizeof(pes_header));
+ usleep(8000);
+ }
+ else {
+ iframe[4] = iframe[5] = 0x00;
+ }
+ write(fd, iframe, s.st_size);
+ usleep(8000);
+ }
+ if (!seq_end_avail)
+ write(fd, seq_end, sizeof(seq_end));
+ write(fd, stuffing, 8192);
+ usleep(150000);
+ c(ioctl(fd, VIDEO_STOP, 0));
+ c(ioctl(fd, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_DEMUX));
+ }
+ return 0;
+}
+
--- /dev/null
+CONFIG = console
+TEMPLATE = app
+INCLUDEPATH += .
+
+SOURCES += showiframe.c
+
--- /dev/null
+DESCRIPTION = "Configuration files for online package repositories aka feeds"
+PR = "r0"
+
+DISTRO_FEED_PREFIX ?= "official"
+DISTRO_FEED_URI ?= "http://archive.vuplus.com/openembedded/${DISTRO_VERSION}/vuplus/${MACHINE}/feeds/stable"
+
+do_compile() {
+ mkdir -p ${S}/${sysconfdir}/opkg
+ for feed in all ${TARGET_ARCH} ${MACHINE_ARCH}; do
+ echo "src/gz ${DISTRO_FEED_PREFIX}-${feed} ${DISTRO_FEED_URI}/${feed}" > ${S}/${sysconfdir}/opkg/${feed}-feed.conf
+ done
+}
+do_install () {
+ install -d ${D}${sysconfdir}/opkg
+ install -m 0644 ${S}/${sysconfdir}/opkg/* ${D}${sysconfdir}/opkg/
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+CONFFILES_${PN} += '${@ " ".join( [ ( "${sysconfdir}/opkg/%s-feed.conf" % feed ) for feed in "all ${TARGET_ARCH} ${MACHINE_ARCH}".split() ] ) }'
--- /dev/null
+DESCRIPTION = "create vuplus NAND images"
+SECTION = "utils"
+PV = "1.0"
+PR = "r1"
+
+SRC_URI = "file://vfi2 \
+ file://vfi3"
+
+inherit native
+
+do_compile() {
+ cp ${WORKDIR}/vfi2 .
+ cp ${WORKDIR}/vfi3 .
+}
+
+do_stage() {
+ install -m 0755 vfi2 ${STAGING_BINDIR}/
+ install -m 0755 vfi3 ${STAGING_BINDIR}/
+}
+
--- /dev/null
+DESCRIPTION = "Xcrypt/Cnx daemon"
+SECTION = "base"
+PRIORITY = "required"
+LICENSE = "proprietary"
+
+PV = "1.1"
+PR = "r1"
+
+SRC_URI = "file://vucamd \
+ file://vucamd.sh"
+
+S = "${WORKDIR}"
+
+INHIBIT_PACKAGE_STRIP = "1"
+
+do_install() {
+ install -d ${D}/usr/bin
+ install -d ${D}/etc/init.d
+ install -m 0755 ${WORKDIR}/vucamd ${D}/usr/bin/vucamd
+}
+
+PACKAGE_ARCH := "${MACHINE_ARCH}"
+FILES_${PN} = "/"
--- /dev/null
+#!/bin/sh
+
+usage()
+{
+ echo "usage: $0 {start|stop|status|restart|reload}"
+}
+
+if [ $# -lt 1 ] ; then usage ; break ; fi
+action=$1
+
+case "$action" in
+
+start)
+ echo -n "Start daemon:"
+ /usr/bin/vucamd &
+ ;;
+
+stop)
+ echo -n "Stopping daemon"
+ killall vucamd
+ echo "."
+ ;;
+
+status)
+ ;;
+
+restart|reload)
+ $0 stop
+ $0 start
+ ;;
+
+*)
+ usage
+ ;;
+
+esac
+
+exit 0
INC_PR = "r5"
DEPENDS_opendreambox = "libnl openssl ${@base_contains("COMBINED_FEATURES", "madwifi", "madwifi-ng", "",d)}"
+DEPENDS_vuplus = "libnl openssl ${@base_contains("COMBINED_FEATURES", "madwifi", "madwifi-ng", "",d)}"
#we introduce MY_ARCH to get 'armv5te' as arch instead of the misleading 'arm' on armv5te builds
MY_ARCH := "${PACKAGE_ARCH}"