--- /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.5"
+
+
+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.20"
+PREFERRED_GCC_VERSION ?= "4.4.3"
+#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.5.10"
+#PREFERRED_VERSION_samba = "3.3.13"
+PREFERRED_VERSION_samba = "3.0.37"
+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_VERSION_linux-bm750 = "2.6.18"
+PREFERRED_VERSION_linux-libc-headers = "2.6.18"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-${MACHINE}"
+
+
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "kernel vuplus-dvb-modules \
+ kernel-module-isofs \
+ kernel-module-sr-mod kernel-module-usb-storage \
+ kernel-module-cdrom \
+ 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-nls-iso8859-15 kernel-module-nls-cp850 \
+ kernel-module-nls-utf8 \
+ kernel-module-i2c-core kernel-module-firmware-class kernel-module-input kernel-module-evdev \
+ kernel-module-snd-pcm kernel-module-snd \
+ kernel-module-tun \
+ kernel-module-fb \
+ v4l-dvb-module-dvb-core \
+ "
+
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS = "\
+ kernel-module-cifs \
+ kernel-module-exportfs \
+ kernel-module-ext2 \
+ kernel-module-reiserfs \
+ kernel-module-xfs \
+ "
+
+TARGET_FPU = "hard"
+
+MACHINE_FEATURES += "kernel26"
+
+TARGET_CC_ARCH = "-march=mips32"
+
+DISTRO_FEATURES += " mplt"
+
+PREFERRED_PROVIDER_task-vuplus-dvbapi = "task-vuplus-dvbapi3"
+PREFERRED_PROVIDER_task-vuplus-ui = "task-vuplus-enigma2"
+
+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}; \
+ zip ${IMAGE_NAME}_usb.zip vuplus/duo/*; \
+ rm -rf vuplus; \
+"
--- /dev/null
+#@TYPE: Machine
+#@NAME: vusolo
+#@DESCRIPTION: Machine configuration for the VuPlus
+
+TARGET_ARCH = "mipsel"
+
+PREFERRED_VERSION_linux-vusolo = "2.6.18"
+PREFERRED_VERSION_linux-libc-headers = "2.6.18"
+
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-${MACHINE}"
+
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "kernel vuplus-dvb-modules \
+ kernel-module-isofs \
+ kernel-module-sr-mod kernel-module-usb-storage \
+ kernel-module-cdrom \
+ 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-iso8859-15 kernel-module-nls-cp850 \
+ kernel-module-nls-utf8 \
+ kernel-module-i2c-core kernel-module-firmware-class kernel-module-input kernel-module-evdev \
+ kernel-module-snd-pcm kernel-module-snd \
+ kernel-module-tun \
+ kernel-module-autofs4 \
+ kernel-module-fb \
+ v4l-dvb-module-dvb-core \
+ "
+
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS = "\
+ kernel-module-cifs \
+ kernel-module-exportfs \
+ kernel-module-ext2 \
+ kernel-module-reiserfs \
+ kernel-module-xfs \
+ "
+TARGET_FPU = "hard"
+
+MACHINE_FEATURES += "kernel26"
+
+TARGET_CC_ARCH = "-march=mips32"
+
+
+DISTRO_FEATURES += " mplt"
+
+PREFERRED_PROVIDER_task-vuplus-dvbapi = "task-vuplus-dvbapi3"
+PREFERRED_PROVIDER_task-vuplus-ui = "task-vuplus-enigma2"
+
+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}; \
+ zip ${IMAGE_NAME}_usb.zip vuplus/solo/*; \
+ rm -rf vuplus; \
+ "
+
--- /dev/null
+#@TYPE: Machine
+#@NAME: vuultimo
+#@DESCRIPTION: Machine configuration for the VuPlus
+
+TARGET_ARCH = "mipsel"
+
+PREFERRED_VERSION_linux-vuultimo = "2.6.18"
+PREFERRED_VERSION_linux-libc-headers = "2.6.18"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-${MACHINE}"
+
+
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "kernel vuplus-dvb-modules \
+ kernel-module-isofs \
+ kernel-module-sr-mod kernel-module-usb-storage \
+ kernel-module-cdrom \
+ kernel-module-msdos kernel-module-vfat kernel-module-fat \
+ kernel-module-libata kernel-module-ntfs kernel-module-sata-svw \
+ kernel-module-nls-iso8859-15 kernel-module-nls-cp850 \
+ kernel-module-nls-utf8 \
+ kernel-module-i2c-core kernel-module-firmware-class kernel-module-input kernel-module-evdev \
+ kernel-module-snd-pcm kernel-module-snd \
+ kernel-module-tun \
+ kernel-module-fb \
+ v4l-dvb-module-dvb-core \
+ "
+
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS = "\
+ kernel-module-cifs \
+ kernel-module-exportfs \
+ kernel-module-ext2 \
+ kernel-module-reiserfs \
+ kernel-module-xfs \
+ "
+
+TARGET_FPU = "hard"
+
+MACHINE_FEATURES += "kernel26"
+
+TARGET_CC_ARCH = "-march=mips32"
+
+DISTRO_FEATURES += " mplt"
+
+PREFERRED_PROVIDER_task-vuplus-dvbapi = "task-vuplus-dvbapi3"
+PREFERRED_PROVIDER_task-vuplus-ui = "task-vuplus-enigma2"
+
+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; \
+ cp ${IMAGE_ROOTFS}/boot/splash_cfe_auto.bin ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.splash_cfe_auto.bin; \
+ rm -f ${IMAGE_ROOTFS}/boot/vmlinux.gz; \
+ rm -f ${IMAGE_ROOTFS}/boot/splash_cfe_auto.bin; \
+ 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/ultimo; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${DEPLOY_DIR_IMAGE}/vuplus/ultimo/root_cfe_auto.jffs2; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.vmlinux.gz ${DEPLOY_DIR_IMAGE}/vuplus/ultimo/kernel_cfe_auto.bin; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.splash_cfe_auto.bin ${DEPLOY_DIR_IMAGE}/vuplus/ultimo/splash_cfe_auto.bin; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.jffs2 ${DEPLOY_DIR_IMAGE}/vuplus/ultimo/boot_cfe_auto.jffs2; \
+ cd ${DEPLOY_DIR_IMAGE}; \
+ zip ${IMAGE_NAME}_usb.zip vuplus/ultimo/*; \
+ rm -rf vuplus; \
+"
--- /dev/null
+#@TYPE: Machine
+#@NAME: vuuno
+#@DESCRIPTION: Machine configuration for the VuPlus
+
+TARGET_ARCH = "mipsel"
+
+PREFERRED_VERSION_linux-vuuno = "2.6.18"
+PREFERRED_VERSION_linux-libc-headers = "2.6.18"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-${MACHINE}"
+
+
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "kernel vuplus-dvb-modules \
+ kernel-module-isofs \
+ kernel-module-sr-mod kernel-module-usb-storage \
+ kernel-module-cdrom \
+ kernel-module-msdos kernel-module-vfat kernel-module-fat \
+ kernel-module-libata kernel-module-ntfs kernel-module-sata-svw \
+ kernel-module-nls-iso8859-15 kernel-module-nls-cp850 \
+ kernel-module-nls-utf8 \
+ kernel-module-i2c-core kernel-module-firmware-class kernel-module-input kernel-module-evdev \
+ kernel-module-snd-pcm kernel-module-snd \
+ kernel-module-tun \
+ kernel-module-fb \
+ v4l-dvb-module-dvb-core \
+ "
+
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS = "\
+ kernel-module-cifs \
+ kernel-module-exportfs \
+ kernel-module-ext2 \
+ kernel-module-reiserfs \
+ kernel-module-xfs \
+ "
+
+TARGET_FPU = "hard"
+MACHINE_FEATURES += "kernel26"
+
+TARGET_CC_ARCH = "-march=mips32"
+
+DISTRO_FEATURES += " mplt"
+
+PREFERRED_PROVIDER_task-vuplus-dvbapi = "task-vuplus-dvbapi3"
+PREFERRED_PROVIDER_task-vuplus-ui = "task-vuplus-enigma2"
+
+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; \
+ cp ${IMAGE_ROOTFS}/boot/splash_cfe_auto.bin ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.splash_cfe_auto.bin; \
+ rm -f ${IMAGE_ROOTFS}/boot/vmlinux.gz; \
+ rm -f ${IMAGE_ROOTFS}/boot/splash_cfe_auto.bin; \
+ 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/uno; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${DEPLOY_DIR_IMAGE}/vuplus/uno/root_cfe_auto.jffs2; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.vmlinux.gz ${DEPLOY_DIR_IMAGE}/vuplus/uno/kernel_cfe_auto.bin; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.splash_cfe_auto.bin ${DEPLOY_DIR_IMAGE}/vuplus/uno/splash_cfe_auto.bin; \
+ cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.jffs2 ${DEPLOY_DIR_IMAGE}/vuplus/uno/boot_cfe_auto.jffs2; \
+ cd ${DEPLOY_DIR_IMAGE}; \
+ zip ${IMAGE_NAME}_usb.zip vuplus/uno/*; \
+ rm -rf vuplus; \
+"
PR = "r0"
PV = "0.8+cvs${SRCDATE}"
SRCDATE = "20101123"
+
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
+diff --git a/main.c b/main.c
+index ffff998..632a153 100644
+--- a/main.c
++++ b/main.c
+@@ -86,8 +86,8 @@ void (*resize)(unsigned char *source, unsigned char *dest, int xsource, int ysou
+ void combine(unsigned char *output, unsigned char *video, unsigned char *osd, int xres, int yres);
+ char* upcase(char* mixedstr);
+
+-enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM7400,BRCM7405};
+-char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405"};
++enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM7400,BRCM7405,BRCM7335,BRCM7325};
++char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405","Brcm7335","Brcm7325"};
+ int stb_type=UNKNOWN;
+
+ // main program
+@@ -139,6 +139,31 @@ int main(int argc, char **argv) {
+ stb_type=BRCM7405;
+ }
+ pclose(pipe);
++
++ // CPU Detection. idea from pl
++ pipe=popen("cat /proc/stb/info/chipset","r");
++ if(pipe)
++ {
++ while (fgets(buf,sizeof(buf),pipe))
++ {
++ if (strstr(upcase(buf),"7335"))
++ {
++ stb_type=BRCM7335;
++ break;
++ }
++ else if (strstr(upcase(buf),"7325"))
++ {
++ stb_type=BRCM7325;
++ break;
++ }
++ else if (strstr(upcase(buf),"7405"))
++ {
++ stb_type=BRCM7405;
++ break;
++ }
++ }
++ }
++ pclose(pipe);
+ }
+
+ if (stb_type == UNKNOWN)
+@@ -491,7 +516,7 @@ void getvideo(unsigned char *video, int *xres, int *yres)
+ char buf[256];
+ FILE *pipe;
+
+- if (stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405)
++ if (stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405 || stb_type == BRCM7335 || stb_type == BRCM7325)
+ {
+ // grab brcm7401 pic from decoder memory
+
+@@ -530,7 +555,7 @@ void getvideo(unsigned char *video, int *xres, int *yres)
+ chroma = (unsigned char *)malloc(stride*(ofs2+64));
+
+ // grabbing luma & chroma plane from the decoder memory
+- if (stb_type == BRCM7401 || stb_type == BRCM7405)
++ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325)
+ {
+ // on dm800/dm500hd we have direct access to the decoder memory
+ if(!(memory_tmp = (unsigned char*)mmap(0, offset + stride*(ofs2+64), PROT_READ, MAP_SHARED, mem_fd, adr)))
+@@ -543,7 +568,7 @@ void getvideo(unsigned char *video, int *xres, int *yres)
+ // and hope we get a good timing. dont ask me why, but every DM800 i tested so far produced a good
+ // result with a 50ms delay
+
+- } else if (stb_type == BRCM7400)
++ } else if (stb_type == BRCM7400 || stb_type == BRCM7335)
+ {
+ // on dm8000 we have to use dma, so dont change anything here until you really know what you are doing !
+
+@@ -553,7 +578,7 @@ void getvideo(unsigned char *video, int *xres, int *yres)
+ return;
+ }
+ volatile unsigned long *mem_dma;
+- if(!(mem_dma = (volatile unsigned long*)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, 0x10c02000)))
++ if(!(mem_dma = (volatile unsigned long*)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, (stb_type==BRCM7400)? 0x10c02000:0x10c01000)))
+ {
+ printf("Mainmemory: <Memmapping failed>\n");
+ return;
+@@ -595,7 +620,7 @@ void getvideo(unsigned char *video, int *xres, int *yres)
+ int chr_luma_stride = 0x40;
+ int sw=1;
+
+- if (stb_type == BRCM7405)
++ if (stb_type == BRCM7405 || stb_type == BRCM7325)
+ chr_luma_stride *= 2;
+
+ xsub=chr_luma_stride;
+@@ -630,9 +655,9 @@ void getvideo(unsigned char *video, int *xres, int *yres)
+ }
+ }
+
+- if (stb_type == BRCM7401 || stb_type == BRCM7405)
++ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325)
+ munmap(memory_tmp, offset + stride*(ofs2+64));
+- else if (stb_type == BRCM7400)
++ else if (stb_type == BRCM7400 || stb_type == BRCM7335)
+ munmap(memory_tmp, DMA_BLOCKSIZE + 0x1000);
+
+ for (t=0; t< stride*ofs;t+=4)
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}.2"
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"
--- /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
+
--- /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
+
PRIORITY = "required"
PR = "r91"
PR_dm7025 = "r92"
+PR_vusolo = "r93"
LICENSE = "GPL"
FSTAB_dm7025 = "${@base_contains('PREFERRED_VERSION_linux-dm7025', '2.6.12.6', 'fstab_old', 'fstab', d)}"
/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!)
file://keymap_endianess.patch;patch=1 \
file://nptl_task.patch;patch=1 \
"
+SRC_URI_append_vuplus = "\
+ 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 = "r19"
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 02 5 2 3 . stop 20 0 1 6 ."
+INITSCRIPT_PARAMS_vuplus = "start 02 5 2 3 . 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() {
LICENSE = "proprietary"
MAINTAINER = "tmbinc@elitedvb.net"
-PR = "r5"
+PR = "r4"
+PR_vuplus = "r5"
SRC_URI = "file://*"
STAGING_LIBDIR=${STAGING_LIBDIR} \
"
+SRC_URI_append_vuplus = " \
+ file://enigma2_plugins_mytube_tpm.patch;patch=1;pnum=1 \
+ file://enigma2_plugins_webinterface_tpm.patch;patch=1;pnum=1 \
+ file://enigma2_plugins_ac3lipsync_dolby.patch;patch=1;pnum=1 \
+ file://enigma2_plugins_autoresolution_fix.patch;patch=1;pnum=1 \
+ 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 python-daap"
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)
--- /dev/null
+diff --git a/audiosync/src/AC3delay.py b/audiosync/src/AC3delay.py
+index a92c859..6bbc86d 100644
+--- a/audiosync/src/AC3delay.py
++++ b/audiosync/src/AC3delay.py
+@@ -177,7 +177,7 @@ class AC3delay:
+
+ tlist.append((description, x))
+ if x == self.selectedAudioIndex:
+- if ((description.find("AC3") != -1 or description.find("AC-3") != -1) and not bDownmixEnabled) or description.find("DTS") != -1:
++ if ((description.find("Dolby") != -1 or description.find("AC3") != -1 or description.find("AC-3") != -1) and not bDownmixEnabled) or description.find("DTS") != -1:
+ self.whichAudio = AC3
+ self.channelAudio = AC3
+ else:
--- /dev/null
+diff --git a/autoresolution/src/plugin.py b/autoresolution/src/plugin.py
+old mode 100644
+new mode 100755
+index f034c06..0dee6ce
+--- a/autoresolution/src/plugin.py
++++ b/autoresolution/src/plugin.py
+@@ -302,6 +302,7 @@ class AutoResSetupMenu(Screen, ConfigListScreen):
+
+ def apply(self):
+ for x in self["config"].list:
++ x[1].onDeselect(self.session)
+ x[1].save()
+ self.close()
+
--- /dev/null
+diff --git a/mytube/src/MyTubeService.py b/mytube/src/MyTubeService.py
+index 7371026..1794db9 100755
+--- a/mytube/src/MyTubeService.py
++++ b/mytube/src/MyTubeService.py
+@@ -115,7 +115,7 @@ class MyTubeFeedEntry():
+ if self.entry.media.player:
+ split = self.entry.media.player.url.split("=")
+ ret = split.pop()
+- if ret == 'youtube_gdata':
++ if ret == 'youtube_gdata' or ret == 'youtube_gdata_player':
+ tmpval=split.pop()
+ if tmpval.endswith("&feature"):
+ tmp = tmpval.split("&")
--- /dev/null
+diff --git a/mytube/src/plugin.py b/mytube/src/plugin.py
+index d6fbe85..93b54c1 100755
+--- a/mytube/src/plugin.py
++++ b/mytube/src/plugin.py
+@@ -385,44 +385,10 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+ current = self["config"].getCurrent()
+ if current[1].help_window.instance is not None:
+ current[1].help_window.instance.hide()
+-
+- l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
+- if l3cert is None or l3cert is "":
+- self["videoactions"].setEnabled(False)
+- self["searchactions"].setEnabled(False)
+- self["config_actions"].setEnabled(False)
+- self["historyactions"].setEnabled(False)
+- self["statusactions"].setEnabled(True)
+- self.hideSuggestions()
+- self.statuslist = []
+- self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) ))
+- self["feedlist"].style = "state"
+- self['feedlist'].setList(self.statuslist)
+- return
+-
+- self.l3key = validate_cert(l3cert, self.l2key)
+- if self.l3key is None:
+- print "l3cert invalid"
+- return
+- rnd = get_rnd()
+- if rnd is None:
+- print "random error"
+- return
+-
+- val = etpm.challenge(rnd)
+- result = decrypt_block(val, self.l3key)
+-
+- self.statuslist = []
+- if result[80:88] == rnd:
+- self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) ))
+- self["feedlist"].style = "state"
+- self['feedlist'].setList(self.statuslist)
+- self.Timer.start(200)
+- else:
+- self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) ))
+- self["feedlist"].style = "state"
+- self['feedlist'].setList(self.statuslist)
+-
++ self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) ))
++ self["feedlist"].style = "state"
++ self['feedlist'].setList(self.statuslist)
++ self.Timer.start(200)
+ def TimerFire(self):
+ self.Timer.stop()
+ if config.plugins.mytube.general.loadFeedOnOpen.value:
+@@ -453,49 +419,36 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+ self.statuslist = []
+ self.hideSuggestions()
+ result = None
+- if self.l3key is not None:
+- rnd = get_rnd()
+- if rnd is None:
+- return
+- val = etpm.challenge(rnd)
+- result = decrypt_block(val, self.l3key)
+- if not result or result[80:88] != rnd:
++ print "Genuine Dreambox validation passed"
++ if self.FirstRun == True:
++ self.appendEntries = False
++ myTubeService.startService()
++ if self.HistoryWindow is not None:
++ self.HistoryWindow.deactivate()
++ self.HistoryWindow.instance.hide()
++ if status == 'getFeed':
++ self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) ))
++ elif status == 'getSearchFeed':
++ self.statuslist.append(( _("Fetching search entries"), _("Trying to download the Youtube search results. Please wait..." ) ))
++ elif status == 'Error':
++ self.statuslist.append(( _("An error occured."), _("There was an error getting the feed entries. Please try again." ) ))
++ elif status == 'noVideos':
+ self["key_green"].show()
+- self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) ))
+- self["feedlist"].style = "state"
+- self['feedlist'].setList(self.statuslist)
+- else:
+- print "Genuine Dreambox validation passed"
+- if self.FirstRun == True:
+- self.appendEntries = False
+- myTubeService.startService()
+- if self.HistoryWindow is not None:
+- self.HistoryWindow.deactivate()
+- self.HistoryWindow.instance.hide()
+- if status == 'getFeed':
+- self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) ))
+- elif status == 'getSearchFeed':
+- self.statuslist.append(( _("Fetching search entries"), _("Trying to download the Youtube search results. Please wait..." ) ))
+- elif status == 'Error':
+- self.statuslist.append(( _("An error occured."), _("There was an error getting the feed entries. Please try again." ) ))
+- elif status == 'noVideos':
+- self["key_green"].show()
+- self.statuslist.append(( _("No videos to display"), _("Please select a standard feed or try searching for videos." ) ))
+- elif status == 'byPass':
+- self.statuslist.append(( _("Not fetching feed entries"), _("Please enter your search term." ) ))
+- self["feedlist"].style = "state"
+- self['feedlist'].setList(self.statuslist)
+- self.switchToConfigList()
++ self.statuslist.append(( _("No videos to display"), _("Please select a standard feed or try searching for videos." ) ))
++ elif status == 'byPass':
++ self.statuslist.append(( _("Not fetching feed entries"), _("Please enter your search term." ) ))
+ self["feedlist"].style = "state"
+ self['feedlist'].setList(self.statuslist)
+- if self.FirstRun == True:
+- if config.plugins.mytube.general.loadFeedOnOpen.value:
+- if config.plugins.mytube.general.startFeed.value == 'hd':
+- self.FeedURL = "http://gdata.youtube.com/feeds/api/videos/-/HD"
+- else:
+- self.FeedURL = self.BASE_STD_FEEDURL + str(config.plugins.mytube.general.startFeed.value)
+- self.getFeed(self.FeedURL, str(config.plugins.mytube.general.startFeed.value))
+-
++ self.switchToConfigList()
++ self["feedlist"].style = "state"
++ self['feedlist'].setList(self.statuslist)
++ if self.FirstRun == True:
++ if config.plugins.mytube.general.loadFeedOnOpen.value:
++ if config.plugins.mytube.general.startFeed.value == 'hd':
++ self.FeedURL = "http://gdata.youtube.com/feeds/api/videos/-/HD"
++ else:
++ self.FeedURL = self.BASE_STD_FEEDURL + str(config.plugins.mytube.general.startFeed.value)
++ self.getFeed(self.FeedURL, str(config.plugins.mytube.general.startFeed.value))
+
+ def handleHelpWindow(self):
+ print "[handleHelpWindow]"
+@@ -1775,17 +1728,8 @@ class MyTubePlayer(Screen, InfoBarNotifications):
+
+
+ def MyTubeMain(session, **kwargs):
+- l2 = False
+- l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
+- if l2cert is None:
+- print "l2cert not found"
+- return
+-
+- l2key = validate_cert(l2cert, rootkey)
+- if l2key is None:
+- print "l2cert invalid"
+- return
+ l2 = True
++ l2key = None
+ if l2:
+ session.open(MyTubePlayerMainScreen,l2key)
+
--- /dev/null
+diff --git a/mytube/src/plugin.py b/mytube/src/plugin.py
+index 8f9c71d..4420fe2 100755
+--- a/mytube/src/plugin.py
++++ b/mytube/src/plugin.py
+@@ -386,8 +386,10 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+ if current[1].help_window.instance is not None:
+ current[1].help_window.instance.hide()
+
+- l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
+- if l3cert is None or l3cert is "":
++# l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
++# if l3cert is None or l3cert is "":
++ l3cert = 0
++ if False:
+ self["videoactions"].setEnabled(False)
+ self["searchactions"].setEnabled(False)
+ self["config_actions"].setEnabled(False)
+@@ -400,7 +402,8 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+ self['feedlist'].setList(self.statuslist)
+ return
+
+- self.l3key = validate_cert(l3cert, self.l2key)
++# self.l3key = validate_cert(l3cert, self.l2key)
++ self.l3key = 0
+ if self.l3key is None:
+ print "l3cert invalid"
+ return
+@@ -409,11 +412,12 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+ print "random error"
+ return
+
+- val = etpm.challenge(rnd)
+- result = decrypt_block(val, self.l3key)
++# val = etpm.challenge(rnd)
++# result = decrypt_block(val, self.l3key)
+
+ self.statuslist = []
+- if result[80:88] == rnd:
++# if result[80:88] == rnd:
++ if True:
+ self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) ))
+ self["feedlist"].style = "state"
+ self['feedlist'].setList(self.statuslist)
+@@ -457,9 +461,10 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+ rnd = get_rnd()
+ if rnd is None:
+ return
+- val = etpm.challenge(rnd)
+- result = decrypt_block(val, self.l3key)
+- if not result or result[80:88] != rnd:
++# val = etpm.challenge(rnd)
++# result = decrypt_block(val, self.l3key)
++# if not result or result[80:88] != rnd:
++ if False:
+ self["key_green"].show()
+ self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) ))
+ self["feedlist"].style = "state"
+@@ -1776,12 +1781,14 @@ class MyTubePlayer(Screen, InfoBarNotifications):
+
+ def MyTubeMain(session, **kwargs):
+ l2 = False
+- l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
++# l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
++ l2cert = 0
+ if l2cert is None:
+ print "l2cert not found"
+ return
+
+- l2key = validate_cert(l2cert, rootkey)
++# l2key = validate_cert(l2cert, rootkey)
++ l2key = 0
+ if l2key is None:
+ print "l2cert invalid"
+ return
--- /dev/null
+diff --git a/webinterface/src/plugin.py b/webinterface/src/plugin.py
+index cbf42f8..caebbb0 100644
+--- a/webinterface/src/plugin.py
++++ b/webinterface/src/plugin.py
+@@ -228,7 +228,7 @@ def stopWebserver(session):
+ # on given ipaddress, port, w/o auth, w/o ssl
+ #===============================================================================
+ def startServerInstance(session, ipaddress, port, useauth=False, l2k=None, usessl=False):
+- if hw.get_device_name().lower() != "dm7025":
++ if hw.get_device_name().lower() != "dm500hd":
+ l3k = None
+ l3c = tpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
+
+@@ -550,7 +550,7 @@ def checkBonjour():
+ def networkstart(reason, **kwargs):
+ l2r = False
+ l2k = None
+- if hw.get_device_name().lower() != "dm7025":
++ if hw.get_device_name().lower() != "dm500hd":
+ l2c = tpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
+
+ if l2c is None:
+@@ -579,7 +579,7 @@ def openconfig(session, **kwargs):
+ def configCB(result, session):
+ l2r = False
+ l2k = None
+- if hw.get_device_name().lower() != "dm7025":
++ if hw.get_device_name().lower() != "dm500hd":
+ l2c = tpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
+
+ if l2c is None:
GST_DVD_RDEPENDS = "gst-plugin-cdxaparse gst-plugin-cdio gst-plugin-vcdsrc"
GST_BASE_RDEPENDS = "${GST_ALSA_RDEPENDS} ${GST_MISC_RDEPENDS} ${GST_RTSP_RDEPENDS}"
-RDEPENDS_append_dm7020 = " gst-plugin-ossaudio gst-plugin-ivorbisdec"
RDEPENDS_append_dm7025 = " ${GST_ALSA_RDEPENDS} gst-plugin-ivorbisdec"
RDEPENDS_append_dm800 = " ${GST_BASE_RDEPENDS} gst-plugin-ivorbisdec"
RDEPENDS_append_dm8000 = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
RDEPENDS_append_dm500hd = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
RDEPENDS_append_dm800se = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
+RDEPENDS_append_bm750 = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
+RDEPENDS_append_vusolo = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
+RDEPENDS_append_vuuno = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
+RDEPENDS_append_vuultimo = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
RDEPENDS_append_dm7020hd = " ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} gst-plugin-avi"
# 'forward depends' - no two providers can have the same PACKAGES_DYNAMIC, however both
#SRCREV = ""
####################################################
+# if you want a 2.7-based release, use
+####################################################
+#BRANCH="2.7"
+#PV = "2.7git${SRCDATE}"
+# if you want 2.7.0 use
+#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}"
SRC_URI_append_dm7025 = " file://7025_pvr_device_compatibility.diff;patch=1;pnum=1"
+# enigma2_vuplus_mediaplayer.patch is for trick-play in media player
+# enigma2_vuplus_mediaplayer_unpause.patch is for work-around of gstreamer bug
+
+
+SRC_URI_bm750 = "git://archive.vuplus.com/git/enigma2.git;protocol=http;branch=${BRANCH};tag=${SRCREV} \
+ file://enigma2_vuplus_vfd.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_skin.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_mediaplayer.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_mediaplayer_unpause.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 \
+ "
+
+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://enigma2_vuplus_mediaplayer.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_mediaplayer_unpause.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_misc.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 \
+ "
+
+
+
+SRC_URI_vuuno = "git://archive.vuplus.com/git/enigma2.git;protocol=http;branch=${BRANCH};tag=${SRCREV} \
+ file://enigma2_vuplus_vfd.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_skin.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_mediaplayer.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_mediaplayer_unpause.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 \
+ "
+
+SRC_URI_vuultimo = "git://archive.vuplus.com/git/enigma2.git;protocol=http;branch=${BRANCH};tag=${SRCREV} \
+ file://enigma2_vuplus_vfd.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_skin.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_mediaplayer.patch;patch=1;pnum=1 \
+ file://enigma2_vuplus_mediaplayer_unpause.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 \
+ "
+
+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 ${datadir}/keymaps"
inherit autotools pkgconfig
+
+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/
+}
+
EXTRA_OECONF = " \
BUILD_SYS=${BUILD_SYS} \
HOST_SYS=${HOST_SYS} \
--- /dev/null
+diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
+index 13599a0..8678b59 100755
+--- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
++++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
+@@ -7,7 +7,7 @@ from Screens.HelpMenu import HelpableScreen
+ from Screens.MessageBox import MessageBox
+ from Screens.InputBox import InputBox
+ from Screens.ChoiceBox import ChoiceBox
+-from Screens.InfoBarGenerics import InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport
++from Screens.InfoBarGenerics import InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, InfoBarPVRState
+ from Components.ActionMap import NumberActionMap, HelpableActionMap
+ from Components.Label import Label
+ from Components.Pixmap import Pixmap,MultiPixmap
+@@ -87,7 +87,7 @@ class MediaPixmap(Pixmap):
+ self.coverArtFileName = "/tmp/.id3coverart"
+ self.picload.startDecode(self.coverArtFileName)
+
+-class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, HelpableScreen):
++class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, InfoBarPVRState, HelpableScreen):
+ ALLOW_SUSPEND = True
+ ENABLE_RESUME_SUPPORT = True
+
+@@ -201,6 +201,10 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
+
+ InfoBarSeek.__init__(self, actionmap = "MediaPlayerSeekActions")
+
++ InfoBarPVRState.__init__(self)
++ self.__hideTimer = eTimer()
++ self.__hideTimer.callback.append(self.__hideMediaPlayerState)
++
+ self.onClose.append(self.delMPTimer)
+ self.onClose.append(self.__onClose)
+
+@@ -234,6 +238,14 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
+ iPlayableService.evUser+13: self["coverArt"].embeddedCoverArt
+ })
+
++ def _mayShow(self):
++ self.pvrStateDialog.show()
++ if self.seekstate == self.SEEK_STATE_PLAY and not self.shown:
++ self.__hideTimer.start(5*1000, True)
++
++ def __hideMediaPlayerState(self):
++ self.pvrStateDialog.hide()
++
+ def doNothing(self):
+ pass
+
+@@ -762,6 +774,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
+ self.playlist.updateList()
+ if len(self.playlist) == 1:
+ self.changeEntry(0)
++ self.switchToPlayList()
+
+ def addPlaylistParser(self, parser, extension):
+ self.playlistparsers[extension] = parser
+diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py
+index 0432930..8cbc453 100755
+--- a/lib/python/Screens/InfoBarGenerics.py
++++ b/lib/python/Screens/InfoBarGenerics.py
+@@ -936,14 +936,17 @@ class InfoBarSeek:
+ def seekFwd(self):
+ seek = self.getSeek()
+ if seek and not (seek.isCurrentlySeekable() & 2):
+- if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
+- self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
+- self.fast_winding_hint_message_showed = True
+- return
+- return 0 # trade as unhandled action
++ media = 1
++ else:
++ media = 0
++# if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
++# self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
++# self.fast_winding_hint_message_showed = True
++# return
++# return 0 # trade as unhandled action
+ if self.seekstate == self.SEEK_STATE_PLAY:
+ self.setSeekState(self.makeStateForward(int(config.seek.enter_forward.value)))
+- elif self.seekstate == self.SEEK_STATE_PAUSE:
++ elif self.seekstate == self.SEEK_STATE_PAUSE and media==0:
+ if len(config.seek.speeds_slowmotion.value):
+ self.setSeekState(self.makeStateSlowMotion(config.seek.speeds_slowmotion.value[-1]))
+ else:
+@@ -954,7 +957,11 @@ class InfoBarSeek:
+ speed = self.seekstate[1]
+ if self.seekstate[2]:
+ speed /= self.seekstate[2]
+- speed = self.getHigher(speed, config.seek.speeds_forward.value) or config.seek.speeds_forward.value[-1]
++ if media==1 and speed == 8:
++ speed = 8
++ return 0 # trade as unhandled action
++ else:
++ speed = self.getHigher(speed, config.seek.speeds_forward.value) or config.seek.speeds_forward.value[-1]
+ self.setSeekState(self.makeStateForward(speed))
+ elif self.isStateBackward(self.seekstate):
+ speed = -self.seekstate[1]
+@@ -972,18 +979,27 @@ class InfoBarSeek:
+ def seekBack(self):
+ seek = self.getSeek()
+ if seek and not (seek.isCurrentlySeekable() & 2):
+- if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
+- self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
++ media = 1
++ else:
++ media = 0
++# if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
++# self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
++# self.fast_winding_hint_message_showed = True
++# return
++# return 0 # trade as unhandled action
++ seekstate = self.seekstate
++ if seekstate == self.SEEK_STATE_PLAY and media==0:
++ self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
++ elif seekstate == self.SEEK_STATE_PLAY and media ==1:
++ if not self.fast_winding_hint_message_showed:
++ self.session.open(MessageBox, _("No rewinding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
+ self.fast_winding_hint_message_showed = True
+ return
+ return 0 # trade as unhandled action
+- seekstate = self.seekstate
+- if seekstate == self.SEEK_STATE_PLAY:
+- self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
+ elif seekstate == self.SEEK_STATE_EOF:
+ self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
+ self.doSeekRelative(-6)
+- elif seekstate == self.SEEK_STATE_PAUSE:
++ elif seekstate == self.SEEK_STATE_PAUSE and media==0:
+ self.doSeekRelative(-1)
+ elif self.isStateForward(seekstate):
+ speed = seekstate[1]
+diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp
+index f96b8c4..ba21d0c 100644
+--- a/lib/service/servicemp3.cpp
++++ b/lib/service/servicemp3.cpp
+@@ -239,6 +239,8 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
+ CONNECT(m_pump.recv_msg, eServiceMP3::gstPoll);
+ m_aspect = m_width = m_height = m_framerate = m_progressive = -1;
+
++ m_event_on=FALSE;
++ m_cur_rate=1.0;
+ m_state = stIdle;
+ eDebug("eServiceMP3::construct!");
+
+@@ -565,6 +567,9 @@ RESULT eServiceMP3::unpause()
+ if (!m_gst_playbin || m_state != stRunning)
+ return -1;
+
++ if(m_cur_rate!=1.0)
++ trickSeek(1);
++
+ gst_element_set_state(m_gst_playbin, GST_STATE_PLAYING);
+
+ return 0;
+@@ -600,7 +605,7 @@ RESULT eServiceMP3::seekToImpl(pts_t to)
+ {
+ /* convert pts to nanoseconds */
+ gint64 time_nanoseconds = to * 11111LL;
+- if (!gst_element_seek (m_gst_playbin, 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
++ if (!gst_element_seek (m_gst_playbin, m_cur_rate, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
+ GST_SEEK_TYPE_SET, time_nanoseconds,
+ GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE))
+ {
+@@ -617,6 +622,7 @@ RESULT eServiceMP3::seekTo(pts_t to)
+
+ if (m_gst_playbin) {
+ eSingleLocker l(m_subs_to_pull_lock); // this is needed to dont handle incomming subtitles during seek!
++ m_event_on = TRUE;
+ if (!(ret = seekToImpl(to)))
+ {
+ m_subtitle_pages.clear();
+@@ -624,6 +630,7 @@ RESULT eServiceMP3::seekTo(pts_t to)
+ m_decoder_time_valid_state = 0;
+ m_subs_to_pull = 0;
+ }
++ m_event_on = FALSE;
+ }
+
+ return ret;
+@@ -636,20 +643,26 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
+ return -1;
+ if (!ratio)
+ return seekRelative(0, 0);
++
++ eSingleLocker l(m_subs_to_pull_lock);
++ m_event_on=TRUE;
+
+ GstEvent *s_event;
+ int flags;
+ flags = GST_SEEK_FLAG_NONE;
+ flags |= GST_SEEK_FLAG_FLUSH;
+ // flags |= GstSeekFlags (GST_SEEK_FLAG_ACCURATE);
+- flags |= GST_SEEK_FLAG_KEY_UNIT;
++// flags |= GST_SEEK_FLAG_KEY_UNIT;
+ // flags |= GstSeekFlags (GST_SEEK_FLAG_SEGMENT);
+ // flags |= GstSeekFlags (GST_SEEK_FLAG_SKIP);
+
+ GstFormat fmt = GST_FORMAT_TIME;
+- gint64 pos, len;
++ pts_t pos;
++ gint64 len;
++
+ gst_element_query_duration(m_gst_playbin, &fmt, &len);
+- gst_element_query_position(m_gst_playbin, &fmt, &pos);
++ getPlayPosition(pos);
++ pos=pos*11111;
+
+ if ( ratio >= 0 )
+ {
+@@ -667,7 +680,12 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
+ eDebug("eServiceMP3::trickSeek failed");
+ return -1;
+ }
+-
++ m_subtitle_pages.clear();
++ m_prev_decoder_time = -1;
++ m_decoder_time_valid_state = 0;
++ m_subs_to_pull = 0;
++ m_event_on=FALSE;
++ m_cur_rate=ratio;
+ return 0;
+ }
+
+@@ -1594,10 +1612,12 @@ eAutoInitPtr<eServiceFactoryMP3> init_eServiceFactoryMP3(eAutoInitNumbers::servi
+
+ void eServiceMP3::gstCBsubtitleAvail(GstElement *appsink, gpointer user_data)
+ {
+- eServiceMP3 *_this = (eServiceMP3*)user_data;
+- eSingleLocker l(_this->m_subs_to_pull_lock);
+- ++_this->m_subs_to_pull;
+- _this->m_pump.send(Message(2));
++ eServiceMP3 *_this = (eServiceMP3*)user_data;
++ if(!_this->m_event_on){
++ eSingleLocker l(_this->m_subs_to_pull_lock);
++ ++_this->m_subs_to_pull;
++ _this->m_pump.send(Message(2));
++ }
+ }
+
+ gboolean eServiceMP3::gstGhostpadSinkEvent(GstPad * pad, GstEvent * event)
+@@ -1942,6 +1962,8 @@ void eServiceMP3::pullSubtitle()
+
+ if (appsink)
+ {
++ if(m_event_on)
++ return;
+ while (m_subs_to_pull && m_subtitle_pages.size() < 2)
+ {
+ GstBuffer *buffer;
+diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h
+index 173084d..d212b87 100644
+--- a/lib/service/servicemp3.h
++++ b/lib/service/servicemp3.h
+@@ -276,6 +276,10 @@ private:
+ gint m_aspect, m_width, m_height, m_framerate, m_progressive;
+ std::string m_useragent;
+ RESULT trickSeek(gdouble ratio);
++
++ double m_cur_rate;
++ bool m_event_on;
++
+ };
+
+ #endif
--- /dev/null
+diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp
+index ba21d0c..88eb16e 100644
+--- a/lib/service/servicemp3.cpp
++++ b/lib/service/servicemp3.cpp
+@@ -568,9 +568,13 @@ RESULT eServiceMP3::unpause()
+ return -1;
+
+ if(m_cur_rate!=1.0)
++ {
+ trickSeek(1);
+-
+- gst_element_set_state(m_gst_playbin, GST_STATE_PLAYING);
++ gst_element_set_state(m_gst_playbin, GST_STATE_PLAYING);
++ }else if (gst_element_set_state(m_gst_playbin, GST_STATE_PLAYING)==2){
++ eDebug("eServiceMP3::unpause : the state change will happen asunchronously");
++ trickSeek(1);
++ }
+
+ return 0;
+ }
--- /dev/null
+diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp
+index 91f24ba..13dac01 100644
+--- a/lib/base/filepush.cpp
++++ b/lib/base/filepush.cpp
+@@ -263,6 +263,7 @@ void eFilePushThread::stop()
+
+ m_stop = 1;
+
++ usleep(100000); //Fix problem of blocking I/O read
+ eDebug("stopping thread."); /* just do it ONCE. it won't help to do this more than once. */
+ sendSignal(SIGUSR1);
+ kill(0);
--- /dev/null
+diff --git a/configure.ac b/configure.ac
+index c235888..9d2311b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -115,6 +115,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..7ac9481
+--- /dev/null
++++ b/data/750S/Makefile.am
+@@ -0,0 +1,6 @@
++SUBDIRS = menu icons buttons countries
++
++installdir = $(pkgdatadir)/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..db2e817
+--- /dev/null
++++ b/data/750S/buttons/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(pkgdatadir)/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..9c4bf9a
+--- /dev/null
++++ b/data/750S/countries/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(pkgdatadir)/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..4686688
+--- /dev/null
++++ b/data/750S/icons/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(pkgdatadir)/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..20f24d9
+--- /dev/null
++++ b/data/750S/menu/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(pkgdatadir)/750S/menu
++
++install_DATA = \
++ *.png
+diff --git a/data/750S/skin.xml b/data/750S/skin.xml
+new file mode 100644
+index 0000000..ad86b3f
+--- /dev/null
++++ b/data/750S/skin.xml
+@@ -0,0 +1,2490 @@
++<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="waitingtext" position="80,160" size="555,328" zPosition="4" font="Regular;22" halign="center" valign="center" />
++ <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 0eaa082..869a16e 100644
+--- a/data/Makefile.am
++++ b/data/Makefile.am
+@@ -1,4 +1,4 @@
+-SUBDIRS = countries fonts defaults extensions keymaps skin_default
++SUBDIRS = countries fonts defaults extensions keymaps 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..dcdab6d
+--- /dev/null
++++ b/data/Vu_HD/Makefile.am
+@@ -0,0 +1,6 @@
++SUBDIRS = menu icons buttons countries
++
++installdir = $(pkgdatadir)/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..3da6ab8
+--- /dev/null
++++ b/data/Vu_HD/buttons/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(pkgdatadir)/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..68c6dc7
+--- /dev/null
++++ b/data/Vu_HD/countries/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(pkgdatadir)/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..650c1e5
+--- /dev/null
++++ b/data/Vu_HD/icons/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(pkgdatadir)/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..9d4f458
+--- /dev/null
++++ b/data/Vu_HD/menu/Makefile.am
+@@ -0,0 +1,6 @@
++AUTOMAKE_OPTIONS = gnu
++
++installdir = $(pkgdatadir)/Vu_HD/menu
++
++install_DATA = \
++ *.png
+diff --git a/data/Vu_HD/skin.xml b/data/Vu_HD/skin.xml
+new file mode 100644
+index 0000000..eebb9f4
+--- /dev/null
++++ b/data/Vu_HD/skin.xml
+@@ -0,0 +1,3037 @@
++<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="waitingtext" position="60,150" size="860,375" zPosition="4" font="Regular;22" foregroundColor="#1c1c1c" backgroundColor="#27d8dee2" halign="center" valign="center" />
++ <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,80" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" transparent="1" />
++ <widget name="slider" position="70,280" 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 2f7e7c7..f81801a 100644
+--- a/data/fonts/Makefile.am
++++ b/data/fonts/Makefile.am
+@@ -5,4 +5,7 @@ dist_install_DATA = \
+ lcd.ttf \
+ md_khmurabi_10.ttf \
+ nmsbd.ttf \
+- tuxtxt.ttf
++ tuxtxt.ttf \
++ MyriadPro-Regular.otf \
++ MyriadPro-Semibold.otf \
++ MyriadPro-SemiboldIt.otf
+diff --git a/data/skin.xml b/data/skin.xml
+index ccd8eb7..9233610 100755
+--- a/data/skin.xml
++++ b/data/skin.xml
+@@ -150,11 +150,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 fd33298..d8c1982 100644
+--- a/lib/gdi/epng.cpp
++++ b/lib/gdi/epng.cpp
+@@ -116,10 +116,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 c07e349..97e6bd6 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
+@@ -713,6 +715,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"]
+
+@@ -858,25 +863,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..c877a19 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 19da203..f191530 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":
--- /dev/null
+diff --git a/configure.ac b/configure.ac
+index 4902a9c..4bd2117 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -207,4 +207,5 @@ tools/enigma2.sh
+ enigma2.pc
+ ])
+ AC_DEFINE(BUILD_VUPLUS,1,[Define to 1 for vuplus])
++AC_DEFINE(BUILD_VUPLUS_DUO,1,[Define to 1 for duo])
+ AC_OUTPUT
+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..83add38 100755
+--- a/lib/gdi/lcd.cpp
++++ b/lib/gdi/lcd.cpp
+@@ -228,3 +228,25 @@ void eDBoxLCD::update()
+ }
+ }
+
++#ifdef BUILD_VUPLUS_DUO /* ikseong */
++char *eDBoxLCD::remaketext(char *text)
++{
++ int len = strlen(text);
++ int i;
++ for(i=0;i<len;i++)
++ {
++ if(text[i]==0x0a)
++ text[i] = 0x20;
++ }
++ return text;
++}
++
++void eDBoxLCD::updates(ePoint start,char *text)
++{
++ if((lcdfd >= 0) && (start.y() < 5))
++ {
++ text = remaketext(text);
++ write(lcdfd,text,strlen(text));
++ }
++}
++#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"
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.*"
SRC_URI = "git://schwerkraft.elitedvb.net/dvbmediasink/dvbmediasink.git;protocol=git;branch=${BRANCH};tag=${SRCREV}"
+SRC_URI_append_vuplus = " \
+ file://fix_dvbaudiosink_async_opt.patch;patch=1;pnum=1"
+
S = "${WORKDIR}/git"
FILES_${PN} = "${libdir}/gstreamer-0.10/*.so*"
--- /dev/null
+diff --git a/src/gstdvbaudiosink.c b/src/gstdvbaudiosink.c
+index 349647e..d420f19 100755
+--- a/src/gstdvbaudiosink.c
++++ b/src/gstdvbaudiosink.c
+@@ -281,7 +281,7 @@ gst_dvbaudiosink_init (GstDVBAudioSink *klass, GstDVBAudioSinkClass * gclass)
+ klass->fd = -1;
+
+ gst_base_sink_set_sync (GST_BASE_SINK(klass), FALSE);
+- gst_base_sink_set_async_enabled (GST_BASE_SINK(klass), TRUE);
++ gst_base_sink_set_async_enabled (GST_BASE_SINK(klass), FALSE);
+ }
+
+ static void
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 \
file://aacparse-fix-rank.diff;patch=1;pnum=1"
+SRC_URI_append_vuplus += " file://mpegpsdemux_speedup.diff;patch=1;pnum=0 \
+ file://mpegtsdemux_fix_ac3_detection.diff;patch=1;pnum=0 \
+ file://aacparse-fix-rank.diff;patch=1;pnum=1"
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 --disable-librfb"
+EXTRA_OECONF_vuplus += "--disable-apexsink --disable-dvdnav --disable-cdaudio --disable-mpeg2enc --disable-mplex --disable-librfb"
SRC_URI_append_opendreambox += " file://mpegpsdemux-speedup.diff;patch=1;pnum=0 \
file://mpegtsdemux-fix-bd-streamtype-detection.diff;patch=1;pnum=1 \
file://ac3parse-fix-rank.diff;patch=1;pnum=1 \
file://ac3parse-just-warn-unknown-ac3-bsid.diff;patch=1;pnum=1 \
"
+SRC_URI_append_vuplus += " file://mpegpsdemux-speedup.diff;patch=1;pnum=0 \
+ file://mpegtsdemux-fix-bd-streamtype-detection.diff;patch=1;pnum=1 \
+ file://aacparse-fix-rank.diff;patch=1;pnum=1 \
+ file://ac3parse-fix-rank.diff;patch=1;pnum=1 \
+ file://ac3parse-just-warn-unknown-ac3-bsid.diff;patch=1;pnum=1 \
+"
+
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 --disable-librfb"
+EXTRA_OECONF_vuplus += "--disable-apexsink --disable-dvdnav --disable-cdaudio --disable-mpeg2enc --disable-mplex --disable-librfb"
SRC_URI_append_opendreambox += " file://mpegpsdemux-speedup.diff;patch=1;pnum=0 \
file://mpegtsdemux-fix-bd-streamtype-detection.diff;patch=1;pnum=1 \
file://audioparsers-change-rank.diff;patch=1;pnum=1 \
"
+SRC_URI_append_vuplus += " file://mpegpsdemux-speedup.diff;patch=1;pnum=0 \
+ file://mpegtsdemux-fix-bd-streamtype-detection.diff;patch=1;pnum=1 \
+"
--- /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://samihack.patch;patch=1"
+SRC_URI_append_vuplus = " file://samihack.patch;patch=1"
PR = "${INC_PR}.0"
# 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://samihack.patch;patch=1"
+SRC_URI_append_vuplus = " file://samihack.patch;patch=1"
PR = "${INC_PR}.0"
# 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://samihack.patch;patch=1"
+SRC_URI_append_vuplus = " file://samihack.patch;patch=1"
PR = "${INC_PR}.0"
# 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"
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"
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 = "r0"
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
+}
+
+do_rootfs_append_vuuno() {
+ generate_nfo
+}
+
+do_rootfs_append_vuultimo() {
+ generate_nfo
+}
--- /dev/null
+
+
+for mod in sata_svw libata nls_base nls_cp437 nls_iso8859-1; do
+ modprobe $mod
+done
+
+for mod in input evdev i2c-core firmware_class; do
+ modprobe $mod
+done
+
+for mod in snd snd-pcm; do
+ modprobe $mod
+done
+
+for mod in procmk dvb-bcm7335 brcmfb; do
+ modprobe $mod
+done
+
+depmod -Ae
+echo 12 > /proc/progress
+
+for mod in isofs cifs usb-storage sr_mod vfat cdrom ntfs; 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 isofs cifs usb-storage sr_mod vfat cdrom ntfs; do
+ modprobe $mod
+done
+
+for mod in input evdev i2c-core firmware_class; do
+ modprobe $mod
+done
+
+for mod in snd snd-pcm; do
+ modprobe $mod
+done
+
+for mod in procmk dvb-bcm7325 brcmfb; do
+ modprobe $mod
+done
+
+
+depmod -Ae
+echo 12 > /proc/progress
+
+
+for mod in nls_base nls_cp437 nls_iso8859-1 nls_utf8; do
+ modprobe $mod
+done
+
+echo 13 > /proc/progress
+
+#Solo has only usb port. Needs a delay for usb pvr
+count=1
+while [ $count -le 5 ]
+do
+ let count=$count+1
+ if [ -e /dev/sda1 ]; then
+ echo count, $count
+ echo "External USB HDD will be mounted on /media/hdd"
+ break;
+ fi;
+ sleep 1
+done
+
+
+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
+for mod in sata_svw libata nls_base nls_cp437 nls_iso8859-1; do
+ modprobe $mod
+done
+
+for mod in input evdev i2c-core firmware_class; do
+ modprobe $mod
+done
+
+for mod in snd snd-pcm; do
+ modprobe $mod
+done
+
+for mod in procmk dvb-bcm7413 brcmfb fpga_directc; do
+ modprobe $mod
+done
+
+
+
+
+depmod -Ae
+echo 12 > /proc/progress
+
+for mod in isofs cifs usb-storage sr_mod vfat cdrom ntfs; 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 sata_svw libata; do
+ modprobe $mod
+done
+
+for mod in input evdev i2c-core firmware_class; do
+ modprobe $mod
+done
+
+for mod in snd snd-pcm; do
+ modprobe $mod
+done
+
+for mod in procmk dvb-bcm7413 brcmfb fpga_directc; do
+ modprobe $mod
+done
+
+depmod -Ae
+echo 12 > /proc/progress
+
+for mod in isofs cifs usb-storage sr_mod vfat cdrom ntfs; 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
+
--- /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 = "r27"
+
+#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
+
+}
+
require klibc-common.inc
SRC_URI += "file://staging.patch;patch=1"
-SRC_URI_append = "${@base_conditional('DISTRO', 'opendreambox', '', \
+#SRC_URI_append = "${@base_conditional('DISTRO', 'opendreambox', '', \
+# ' file://klibc_kexecsyscall.patch;patch=1', d)}"
+SRC_URI_append = "${@base_conditional('DISTRO', 'vuplus', '', \
' file://klibc_kexecsyscall.patch;patch=1', d)}"
# we want only the shared programms and the lib so we chose them manually
file://isystem.patch;patch=1 \
"
-SRC_URI_append = "${@base_conditional('DISTRO', 'opendreambox', '', \
+#SRC_URI_append = "${@base_conditional('DISTRO', 'opendreambox', '', \
+# ' file://klibc_kexecsyscall.patch;patch=1', d)}"
+SRC_URI_append = "${@base_conditional('DISTRO', 'vuplus', '', \
' file://klibc_kexecsyscall.patch;patch=1', d)}"
#needed for kernel 2.6.32
CFLAGS_dm7020hd_append = " -DHARDWARE_SUPPORT_LPCM"
CFLAGS_dm8000_append = " -DHARDWARE_SUPPORT_LPCM"
#CFLAGS_dm800_append = " -DHARDWARE_SUPPORT_LPCM"
+CFLAGS_bm750_append = " -DHARDWARE_SUPPORT_LPCM"
+CFLAGS_vusolo_append = " -DHARDWARE_SUPPORT_LPCM"
+CFLAGS_vuuno_append = " -DHARDWARE_SUPPORT_LPCM"
+CFLAGS_vuultimo_append = " -DHARDWARE_SUPPORT_LPCM"
S = "${WORKDIR}/git"
LICENSE = "GPL"
DEPENDS = "libdvdcss"
DEPENDS_opendreambox = ""
+DEPENDS_vuplus = ""
SECTION = "libs/multimedia"
PR = "r2"
"
EXTRA_OECONF_opendreambox = ""
+EXTRA_OECONF_vuplus = ""
do_stage() {
autotools_stage_all
SRC_URI_append_opendreambox = " file://mips-brcm-add-missing-syscalls.patch;patch=1 \
file://dvb-api-2.6.18-5.3.patch;patch=1"
+#TODO
+SRC_URI_append_vuplus = " file://mips-brcm-add-missing-syscalls.patch;patch=1 \
+ file://dvb-api-2.6.18-5.3.patch;patch=1"
+
+#SRC_URI_append_vuplus = " file://fix-dvb-headers.patch;patch=1"
+
S = "${WORKDIR}/linux-2.6.18"
set_arch() {
--- /dev/null
+Index: include/linux/dvb/frontend.h
+===================================================================
+--- include/linux/dvb/frontend.h (revision 1)
++++ include/linux/dvb/frontend.h (working copy)
+@@ -28,7 +28,6 @@
+
+ #include <asm/types.h>
+
+-
+ typedef enum fe_type {
+ FE_QPSK,
+ FE_QAM,
+@@ -62,9 +61,12 @@
+ FE_CAN_HIERARCHY_AUTO = 0x100000,
+ FE_CAN_8VSB = 0x200000,
+ FE_CAN_16VSB = 0x400000,
+- FE_NEEDS_BENDING = 0x20000000, // not supported anymore, don't use (frontend requires frequency bending)
+- FE_CAN_RECOVER = 0x40000000, // frontend can recover from a cable unplug automatically
+- FE_CAN_MUTE_TS = 0x80000000 // frontend can stop spurious TS data output
++ FE_HAS_EXTENDED_CAPS = 0x800000, /* We need more bitspace for newer APIs, indicate this. */
++ FE_CAN_TURBO_FEC = 0x8000000, /* frontend supports "turbo fec modulation" */
++ FE_CAN_2G_MODULATION = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
++ FE_NEEDS_BENDING = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
++ FE_CAN_RECOVER = 0x40000000, /* frontend can recover from a cable unplug automatically */
++ FE_CAN_MUTE_TS = 0x80000000 /* frontend can stop spurious TS data output */
+ } fe_caps_t;
+
+
+@@ -120,15 +122,15 @@
+
+
+ typedef enum fe_status {
+- FE_HAS_SIGNAL = 0x01, /* found something above the noise level */
+- FE_HAS_CARRIER = 0x02, /* found a DVB signal */
+- FE_HAS_VITERBI = 0x04, /* FEC is stable */
+- FE_HAS_SYNC = 0x08, /* found sync bytes */
+- FE_HAS_LOCK = 0x10, /* everything's working... */
+- FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */
+- FE_REINIT = 0x40 /* frontend was reinitialized, */
+-} fe_status_t; /* application is recommended to reset */
+- /* DiSEqC, tone and parameters */
++ FE_HAS_SIGNAL = 0x01, /* found something above the noise level */
++ FE_HAS_CARRIER = 0x02, /* found a DVB signal */
++ FE_HAS_VITERBI = 0x04, /* FEC is stable */
++ FE_HAS_SYNC = 0x08, /* found sync bytes */
++ FE_HAS_LOCK = 0x10, /* everything's working... */
++ FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */
++ FE_REINIT = 0x40 /* frontend was reinitialized, */
++} fe_status_t; /* application is recommended to reset */
++ /* DiSEqC, tone and parameters */
+
+ typedef enum fe_spectral_inversion {
+ INVERSION_OFF,
+@@ -147,7 +149,9 @@
+ FEC_6_7,
+ FEC_7_8,
+ FEC_8_9,
+- FEC_AUTO
++ FEC_AUTO,
++ FEC_3_5,
++ FEC_9_10,
+ } fe_code_rate_t;
+
+
+@@ -160,20 +164,31 @@
+ QAM_256,
+ QAM_AUTO,
+ VSB_8,
+- VSB_16
++ VSB_16,
++ PSK_8,
++ APSK_16,
++ APSK_32,
++ DQPSK,
+ } fe_modulation_t;
+
+ typedef enum fe_transmit_mode {
+ TRANSMISSION_MODE_2K,
+ TRANSMISSION_MODE_8K,
+- TRANSMISSION_MODE_AUTO
++ TRANSMISSION_MODE_AUTO,
++ TRANSMISSION_MODE_4K,
++ TRANSMISSION_MODE_1K,
++ TRANSMISSION_MODE_16K,
++ TRANSMISSION_MODE_32K,
+ } fe_transmit_mode_t;
+
+ typedef enum fe_bandwidth {
+ BANDWIDTH_8_MHZ,
+ BANDWIDTH_7_MHZ,
+ BANDWIDTH_6_MHZ,
+- BANDWIDTH_AUTO
++ BANDWIDTH_AUTO,
++ BANDWIDTH_5_MHZ,
++ BANDWIDTH_10_MHZ,
++ BANDWIDTH_1_712_MHZ,
+ } fe_bandwidth_t;
+
+
+@@ -182,7 +197,10 @@
+ GUARD_INTERVAL_1_16,
+ GUARD_INTERVAL_1_8,
+ GUARD_INTERVAL_1_4,
+- GUARD_INTERVAL_AUTO
++ GUARD_INTERVAL_AUTO,
++ GUARD_INTERVAL_1_128,
++ GUARD_INTERVAL_19_128,
++ GUARD_INTERVAL_19_256,
+ } fe_guard_interval_t;
+
+
+@@ -239,7 +257,138 @@
+ struct dvb_frontend_parameters parameters;
+ };
+
++/* S2API Commands */
++#define DTV_UNDEFINED 0
++#define DTV_TUNE 1
++#define DTV_CLEAR 2
++#define DTV_FREQUENCY 3
++#define DTV_MODULATION 4
++#define DTV_BANDWIDTH_HZ 5
++#define DTV_INVERSION 6
++#define DTV_DISEQC_MASTER 7
++#define DTV_SYMBOL_RATE 8
++#define DTV_INNER_FEC 9
++#define DTV_VOLTAGE 10
++#define DTV_TONE 11
++#define DTV_PILOT 12
++#define DTV_ROLLOFF 13
++#define DTV_DISEQC_SLAVE_REPLY 14
+
++/* Basic enumeration set for querying unlimited capabilities */
++#define DTV_FE_CAPABILITY_COUNT 15
++#define DTV_FE_CAPABILITY 16
++#define DTV_DELIVERY_SYSTEM 17
++
++/* ISDB-T and ISDB-Tsb */
++#define DTV_ISDBT_PARTIAL_RECEPTION 18
++#define DTV_ISDBT_SOUND_BROADCASTING 19
++
++#define DTV_ISDBT_SB_SUBCHANNEL_ID 20
++#define DTV_ISDBT_SB_SEGMENT_IDX 21
++#define DTV_ISDBT_SB_SEGMENT_COUNT 22
++
++#define DTV_ISDBT_LAYERA_FEC 23
++#define DTV_ISDBT_LAYERA_MODULATION 24
++#define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25
++#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26
++
++#define DTV_ISDBT_LAYERB_FEC 27
++#define DTV_ISDBT_LAYERB_MODULATION 28
++#define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29
++#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30
++
++#define DTV_ISDBT_LAYERC_FEC 31
++#define DTV_ISDBT_LAYERC_MODULATION 32
++#define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33
++#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34
++
++#define DTV_API_VERSION 35
++
++#define DTV_CODE_RATE_HP 36
++#define DTV_CODE_RATE_LP 37
++#define DTV_GUARD_INTERVAL 38
++#define DTV_TRANSMISSION_MODE 39
++#define DTV_HIERARCHY 40
++
++#define DTV_ISDBT_LAYER_ENABLED 41
++
++#define DTV_ISDBS_TS_ID 42
++
++#define DTV_DVBT2_PLP_ID 43
++
++#define DTV_MAX_COMMAND DTV_DVBT2_PLP_ID
++
++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,
++ SYS_DVBT2,
++} fe_delivery_system_t;
++
++struct dtv_cmds_h {
++ char *name; /* A display name for debugging purposes */
++
++ __u32 cmd; /* A unique ID */
++
++ /* Flags */
++ __u32 set:1; /* Either a set or get property */
++ __u32 buffer:1; /* Does this property use the buffer? */
++ __u32 reserved:30; /* Align */
++};
++
++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));
++
++/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
++#define DTV_IOCTL_MAX_MSGS 64
++
++struct dtv_properties {
++ __u32 num;
++ struct dtv_property *props;
++};
++
++#define FE_SET_PROPERTY _IOW('o', 82, struct dtv_properties)
++#define FE_GET_PROPERTY _IOR('o', 83, struct dtv_properties)
++
++
+ /**
+ * When set, this flag will disable any zigzagging or other "normal" tuning
+ * behaviour. Additionally, there will be no automatic monitoring of the lock
+Index: include/linux/dvb/audio.h
+===================================================================
+--- include/linux/dvb/audio.h (revision 1)
++++ include/linux/dvb/audio.h (working copy)
+@@ -24,13 +24,8 @@
+ #ifndef _DVBAUDIO_H_
+ #define _DVBAUDIO_H_
+
+-#ifdef __KERNEL__
+-#include <linux/types.h>
+-#else
+-#include <stdint.h>
+-#endif
++#include <asm/types.h>
+
+-
+ typedef enum {
+ AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */
+ AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */
+@@ -47,7 +42,9 @@
+ typedef enum {
+ AUDIO_STEREO,
+ AUDIO_MONO_LEFT,
+- AUDIO_MONO_RIGHT
++ AUDIO_MONO_RIGHT,
++ AUDIO_MONO,
++ AUDIO_STEREO_SWAPPED
+ } audio_channel_select_t;
+
+
+@@ -79,7 +76,7 @@
+ } audio_karaoke_t; /* into left and right */
+
+
+-typedef uint16_t audio_attributes_t;
++typedef __u16 audio_attributes_t;
+ /* bits: descr. */
+ /* 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, */
+ /* 12 multichannel extension */
+@@ -133,5 +130,6 @@
+ * extracted by the PES parser.
+ */
+ #define AUDIO_GET_PTS _IOR('o', 19, __u64)
++#define AUDIO_BILINGUAL_CHANNEL_SELECT _IO('o', 20)
+
+ #endif /* _DVBAUDIO_H_ */
+Index: include/linux/dvb/version.h
+===================================================================
+--- include/linux/dvb/version.h (revision 1)
++++ include/linux/dvb/version.h (working copy)
+@@ -23,7 +23,7 @@
+ #ifndef _DVBVERSION_H_
+ #define _DVBVERSION_H_
+
+-#define DVB_API_VERSION 3
+-#define DVB_API_VERSION_MINOR 1
++#define DVB_API_VERSION 5
++#define DVB_API_VERSION_MINOR 3
+
+ #endif /*_DVBVERSION_H_*/
+Index: include/linux/dvb/net.h
+===================================================================
+--- include/linux/dvb/net.h (revision 1)
++++ include/linux/dvb/net.h (working copy)
+@@ -26,7 +26,6 @@
+
+ #include <asm/types.h>
+
+-
+ struct dvb_net_if {
+ __u16 pid;
+ __u16 if_num;
+Index: include/linux/dvb/video.h
+===================================================================
+--- include/linux/dvb/video.h (revision 1)
++++ include/linux/dvb/video.h (working copy)
+@@ -24,16 +24,14 @@
+ #ifndef _DVBVIDEO_H_
+ #define _DVBVIDEO_H_
+
++#include <linux/types.h>
++#ifdef __KERNEL__
+ #include <linux/compiler.h>
+-
+-#ifdef __KERNEL__
+-#include <linux/types.h>
+ #else
+ #include <stdint.h>
+ #include <time.h>
+ #endif
+
+-
+ typedef enum {
+ VIDEO_FORMAT_4_3, /* Select 4:3 format */
+ VIDEO_FORMAT_16_9, /* Select 16:9 format. */
+@@ -80,14 +78,70 @@
+ } video_play_state_t;
+
+
++/* Decoder commands */
++#define VIDEO_CMD_PLAY (0)
++#define VIDEO_CMD_STOP (1)
++#define VIDEO_CMD_FREEZE (2)
++#define VIDEO_CMD_CONTINUE (3)
++
++/* Flags for VIDEO_CMD_FREEZE */
++#define VIDEO_CMD_FREEZE_TO_BLACK (1 << 0)
++
++/* Flags for VIDEO_CMD_STOP */
++#define VIDEO_CMD_STOP_TO_BLACK (1 << 0)
++#define VIDEO_CMD_STOP_IMMEDIATELY (1 << 1)
++
++/* Play input formats: */
++/* The decoder has no special format requirements */
++#define VIDEO_PLAY_FMT_NONE (0)
++/* The decoder requires full GOPs */
++#define VIDEO_PLAY_FMT_GOP (1)
++
++/* The structure must be zeroed before use by the application
++ This ensures it can be extended safely in the future. */
++struct video_command {
++ __u32 cmd;
++ __u32 flags;
++ union {
++ struct {
++ __u64 pts;
++ } stop;
++
++ struct {
++ /* 0 or 1000 specifies normal speed,
++ 1 specifies forward single stepping,
++ -1 specifies backward single stepping,
++ >1: playback at speed/1000 of the normal speed,
++ <-1: reverse playback at (-speed/1000) of the normal speed. */
++ __s32 speed;
++ __u32 format;
++ } play;
++
++ struct {
++ __u32 data[16];
++ } raw;
++ };
++};
++
++/* FIELD_UNKNOWN can be used if the hardware does not know whether
++ the Vsync is for an odd, even or progressive (i.e. non-interlaced)
++ field. */
++#define VIDEO_VSYNC_FIELD_UNKNOWN (0)
++#define VIDEO_VSYNC_FIELD_ODD (1)
++#define VIDEO_VSYNC_FIELD_EVEN (2)
++#define VIDEO_VSYNC_FIELD_PROGRESSIVE (3)
++
+ struct video_event {
+- int32_t type;
++ __s32 type;
+ #define VIDEO_EVENT_SIZE_CHANGED 1
+ #define VIDEO_EVENT_FRAME_RATE_CHANGED 2
++#define VIDEO_EVENT_DECODER_STOPPED 3
++#define VIDEO_EVENT_VSYNC 4
+ time_t timestamp;
+ union {
+ video_size_t size;
+ unsigned int frame_rate; /* in frames per 1000sec */
++ unsigned char vsync_field; /* unknown/odd/even/progressive */
+ } u;
+ };
+
+@@ -103,25 +157,25 @@
+
+ struct video_still_picture {
+ char __user *iFrame; /* pointer to a single iframe in memory */
+- int32_t size;
++ __s32 size;
+ };
+
+
+ typedef
+ struct video_highlight {
+ int active; /* 1=show highlight, 0=hide highlight */
+- uint8_t contrast1; /* 7- 4 Pattern pixel contrast */
++ __u8 contrast1; /* 7- 4 Pattern pixel contrast */
+ /* 3- 0 Background pixel contrast */
+- uint8_t contrast2; /* 7- 4 Emphasis pixel-2 contrast */
++ __u8 contrast2; /* 7- 4 Emphasis pixel-2 contrast */
+ /* 3- 0 Emphasis pixel-1 contrast */
+- uint8_t color1; /* 7- 4 Pattern pixel color */
++ __u8 color1; /* 7- 4 Pattern pixel color */
+ /* 3- 0 Background pixel color */
+- uint8_t color2; /* 7- 4 Emphasis pixel-2 color */
++ __u8 color2; /* 7- 4 Emphasis pixel-2 color */
+ /* 3- 0 Emphasis pixel-1 color */
+- uint32_t ypos; /* 23-22 auto action mode */
++ __u32 ypos; /* 23-22 auto action mode */
+ /* 21-12 start y */
+ /* 9- 0 end y */
+- uint32_t xpos; /* 23-22 button color number */
++ __u32 xpos; /* 23-22 button color number */
+ /* 21-12 start x */
+ /* 9- 0 end x */
+ } video_highlight_t;
+@@ -135,17 +189,17 @@
+
+ typedef struct video_spu_palette { /* SPU Palette information */
+ int length;
+- uint8_t __user *palette;
++ __u8 __user *palette;
+ } video_spu_palette_t;
+
+
+ typedef struct video_navi_pack {
+ int length; /* 0 ... 1024 */
+- uint8_t data[1024];
++ __u8 data[1024];
+ } video_navi_pack_t;
+
+
+-typedef uint16_t video_attributes_t;
++typedef __u16 video_attributes_t;
+ /* bits: descr. */
+ /* 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */
+ /* 13-12 TV system (0=525/60, 1=625/50) */
+@@ -213,4 +267,10 @@
+ */
+ #define VIDEO_GET_PTS _IOR('o', 57, __u64)
+
++/* Read the number of displayed frames since the decoder was started */
++#define VIDEO_GET_FRAME_COUNT _IOR('o', 58, __u64)
++
++#define VIDEO_COMMAND _IOWR('o', 59, struct video_command)
++#define VIDEO_TRY_COMMAND _IOWR('o', 60, struct video_command)
++
+ #endif /*_DVBVIDEO_H_*/
+Index: include/linux/dvb/dmx.h
+===================================================================
+--- include/linux/dvb/dmx.h (revision 1)
++++ include/linux/dvb/dmx.h (working copy)
+@@ -39,9 +39,10 @@
+ DMX_OUT_DECODER, /* Streaming directly to decoder. */
+ DMX_OUT_TAP, /* Output going to a memory buffer */
+ /* (to be retrieved via the read command).*/
+- DMX_OUT_TS_TAP /* Output multiplexed into a new TS */
++ DMX_OUT_TS_TAP, /* Output multiplexed into a new TS */
+ /* (to be retrieved by reading from the */
+ /* logical DVR device). */
++ DMX_OUT_TSDEMUX_TAP /* Like TS_TAP but retrieved from the DMX device */
+ } dmx_output_t;
+
+
+@@ -150,5 +151,7 @@
+ #define DMX_GET_CAPS _IOR('o', 48, dmx_caps_t)
+ #define DMX_SET_SOURCE _IOW('o', 49, dmx_source_t)
+ #define DMX_GET_STC _IOWR('o', 50, struct dmx_stc)
++#define DMX_ADD_PID _IOW('o', 51, __u16)
++#define DMX_REMOVE_PID _IOW('o', 52, __u16)
+
+ #endif /*_DVBDMX_H_*/
--- /dev/null
+Index: drivers/media/dvb/dvb-core/dvb_ca_en50221.h
+===================================================================
+--- drivers/media/dvb/dvb-core/dvb_ca_en50221.h (revision 1)
++++ drivers/media/dvb/dvb-core/dvb_ca_en50221.h (working copy)
+@@ -45,8 +45,10 @@
+ /* the module owning this structure */
+ struct module* owner;
+
+- /* NOTE: the read_*, write_* and poll_slot_status functions must use locks as
+- * they may be called from several threads at once */
++ /* NOTE: the read_*, write_* and poll_slot_status functions will be
++ * called for different slots concurrently and need to use locks where
++ * and if appropriate. There will be no concurrent access to one slot.
++ */
+
+ /* functions for accessing attribute memory on the CAM */
+ int (*read_attribute_mem)(struct dvb_ca_en50221* ca, int slot, int address);
+Index: drivers/media/dvb/dvb-core/dvbdev.h
+===================================================================
+--- drivers/media/dvb/dvb-core/dvbdev.h (revision 1)
++++ drivers/media/dvb/dvb-core/dvbdev.h (working copy)
+@@ -27,10 +27,17 @@
+ #include <linux/poll.h>
+ #include <linux/fs.h>
+ #include <linux/list.h>
+-#include <linux/smp_lock.h>
+
+ #define DVB_MAJOR 212
+
++#if defined(CONFIG_DVB_MAX_ADAPTERS) && CONFIG_DVB_MAX_ADAPTERS > 0
++ #define DVB_MAX_ADAPTERS CONFIG_DVB_MAX_ADAPTERS
++#else
++ #define DVB_MAX_ADAPTERS 8
++#endif
++
++#define DVB_UNSET (-1)
++
+ #define DVB_DEVICE_VIDEO 0
+ #define DVB_DEVICE_AUDIO 1
+ #define DVB_DEVICE_SEC 2
+@@ -41,7 +48,14 @@
+ #define DVB_DEVICE_NET 7
+ #define DVB_DEVICE_OSD 8
+
++#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_frontend;
++
+ struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+@@ -53,14 +67,45 @@
+ struct device *device;
+
+ struct module *module;
++
++ int mfe_shared; /* indicates mutually exclusive frontends */
++ struct dvb_device *mfe_dvbdev; /* frontend device in use */
++ struct mutex mfe_lock; /* access lock for thread creation */
++
++ /* Allow the adapter/bridge driver to perform an action before and/or
++ * after the core handles an ioctl:
++ *
++ * DVB_FE_IOCTL_PRE indicates that the ioctl has not yet been handled.
++ * DVB_FE_IOCTL_POST indicates that the ioctl has been handled.
++ *
++ * When DVB_FE_IOCTL_PRE is passed to the callback as the stage arg:
++ *
++ * return 0 to allow dvb-core to handle the ioctl.
++ * return a positive int to prevent dvb-core from handling the ioctl,
++ * and exit without error.
++ * return a negative int to prevent dvb-core from handling the ioctl,
++ * and return that value as an error.
++ *
++ * When DVB_FE_IOCTL_POST is passed to the callback as the stage arg:
++ *
++ * return 0 to allow the dvb_frontend ioctl handler to exit normally.
++ * return a negative int to cause the dvb_frontend ioctl handler to
++ * return that value as an error.
++ */
++#define DVB_FE_IOCTL_PRE 0
++#define DVB_FE_IOCTL_POST 1
++ int (*fe_ioctl_override)(struct dvb_frontend *fe,
++ unsigned int cmd, void *parg,
++ unsigned int stage);
+ };
+
+
+ struct dvb_device {
+ struct list_head list_head;
+- struct file_operations *fops;
++ const struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
++ int minor;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+@@ -69,6 +114,7 @@
+ int writers;
+ int users;
+
++ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+@@ -77,7 +123,9 @@
+ };
+
+
+-extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
++extern int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
++ struct module *module, struct device *device,
++ short *adapter_nums);
+ extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+ extern int dvb_register_device (struct dvb_adapter *adap,
+@@ -102,4 +150,26 @@
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
++/** generic DVB attach function. */
++#ifdef CONFIG_MEDIA_ATTACH
++#define dvb_attach(FUNCTION, ARGS...) ({ \
++ void *__r = NULL; \
++ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
++ if (__a) { \
++ __r = (void *) __a(ARGS); \
++ if (__r == NULL) \
++ symbol_put(FUNCTION); \
++ } else { \
++ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
++ } \
++ __r; \
++})
++
++#else
++#define dvb_attach(FUNCTION, ARGS...) ({ \
++ FUNCTION(ARGS); \
++})
++
++#endif
++
+ #endif /* #ifndef _DVBDEV_H_ */
+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)
+@@ -35,6 +35,8 @@
+ #include <linux/module.h>
+ #include <linux/errno.h>
+ #include <linux/delay.h>
++#include <linux/mutex.h>
++#include <linux/slab.h>
+
+ #include <linux/dvb/frontend.h>
+
+@@ -61,6 +63,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 successfully
++ *
++ * 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,39 +199,77 @@
+
+ /** 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. */
++ /** These are provided separately from set_params in order to facilitate silicon
++ * tuners which require sophisticated tuning loops, controlling each parameter separately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
++
++ /*
++ * These are provided separately from set_params in order to facilitate silicon
++ * tuners which require sophisticated tuning loops, controlling each parameter separately.
++ */
++ 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 dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
++ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
++ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
++
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+- int *delay,
++ unsigned int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+- int (*get_frontend_algo)(struct dvb_frontend *fe);
++ enum dvbfe_algo (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+@@ -126,8 +292,20 @@
+ 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 (*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);
++
+ };
+
+ #define MAX_EVENT 8
+@@ -138,23 +316,73 @@
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+- struct semaphore sem;
++ struct mutex mtx;
+ };
+
++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;
++
++ /* ISDB-T specifics */
++ u8 isdbt_partial_reception;
++ u8 isdbt_sb_mode;
++ u8 isdbt_sb_subchannel;
++ u32 isdbt_sb_segment_idx;
++ u32 isdbt_sb_segment_count;
++ u8 isdbt_layer_enabled;
++ struct {
++ u8 segment_count;
++ fe_code_rate_t fec;
++ fe_modulation_t modulation;
++ u8 interleaving;
++ } layer[3];
++
++ /* ISDB-T specifics */
++ u32 isdbs_ts_id;
++};
++
+ struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+- void* demodulator_priv;
+- void* tuner_priv;
+- void* frontend_priv;
+- void* misc_priv;
++ void *demodulator_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;
+ };
+
+-extern int dvb_register_frontend(struct dvb_adapter* dvb,
+- struct dvb_frontend* fe);
++extern int dvb_register_frontend(struct dvb_adapter *dvb,
++ struct dvb_frontend *fe);
+
+-extern int dvb_unregister_frontend(struct dvb_frontend* fe);
++extern int dvb_unregister_frontend(struct dvb_frontend *fe);
+
++extern void dvb_frontend_detach(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);
+Index: drivers/media/dvb/dvb-core/dvb_demux.h
+===================================================================
+--- drivers/media/dvb/dvb-core/dvb_demux.h (revision 1)
++++ drivers/media/dvb/dvb-core/dvb_demux.h (working copy)
+@@ -26,6 +26,7 @@
+ #include <linux/time.h>
+ #include <linux/timer.h>
+ #include <linux/spinlock.h>
++#include "compat.h"
+ #include <linux/mutex.h>
+
+ #include "demux.h"
+@@ -42,6 +43,10 @@
+
+ #define DVB_DEMUX_MASK_MAX 18
+
++#define MAX_PID 0x1fff
++
++#define SPEED_PKTS_INTERVAL 50000
++
+ struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+@@ -127,6 +132,11 @@
+
+ struct mutex mutex;
+ spinlock_t lock;
++
++ uint8_t *cnt_storage; /* for TS continuity check */
++
++ struct timespec speed_last_time; /* for TS speed check */
++ uint32_t speed_pkts_cnt; /* for TS speed check */
+ };
+
+ int dvb_dmx_init(struct dvb_demux *dvbdemux);
+Index: drivers/media/dvb/dvb-core/dvb_net.h
+===================================================================
+--- drivers/media/dvb/dvb-core/dvb_net.h (revision 1)
++++ drivers/media/dvb/dvb-core/dvb_net.h (working copy)
+@@ -36,6 +36,7 @@
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
++ unsigned int exit:1;
+ struct dmx_demux *demux;
+ };
+
+Index: drivers/media/dvb/dvb-core/demux.h
+===================================================================
+--- drivers/media/dvb/dvb-core/demux.h (revision 1)
++++ drivers/media/dvb/dvb-core/demux.h (working copy)
+@@ -80,6 +80,8 @@
+ #define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+ #define TS_DECODER 4 /* send stream to built-in decoder (if present) */
++#define TS_DEMUX 8 /* in case TS_PACKET is set, send the TS to
++ the demux device, not to the dvr device */
+
+ /* PES type for filters which write to built-in decoder */
+ /* these should be kept identical to the types in dmx.h */
+@@ -245,7 +247,7 @@
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+- int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
++ int (*write) (struct dmx_demux* demux, const char __user *buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+Index: drivers/media/dvb/dvb-core/dvb_ringbuffer.h
+===================================================================
+--- drivers/media/dvb/dvb-core/dvb_ringbuffer.h (revision 1)
++++ drivers/media/dvb/dvb-core/dvb_ringbuffer.h (working copy)
+@@ -38,6 +38,7 @@
+ int error;
+
+ wait_queue_head_t queue;
++ int do_wait;
+ spinlock_t lock;
+ };
+
+@@ -61,7 +62,7 @@
+ ** *** read min. 1000, max. <bufsize> bytes ***
+ ** avail = dvb_ringbuffer_avail(rbuf);
+ ** if (avail >= 1000)
+-** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
++** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize));
+ ** else
+ ** ...
+ **
+@@ -69,6 +70,7 @@
+ ** to lock read or write operations.
+ ** Two or more readers must be locked against each other.
+ ** Flushing the buffer counts as a read operation.
++** Resetting the buffer counts as a read and write operation.
+ ** Two or more writers must be locked against each other.
+ */
+
+@@ -85,6 +87,13 @@
+ extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
++/*
++** Reset the read and write pointers to zero and flush the buffer
++** This counts as a read and write operation
++*/
++extern void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf);
++
++
+ /* read routines & macros */
+ /* ---------------------- */
+ /* flush buffer */
+@@ -106,8 +115,10 @@
+ ** <usermem> specifies whether <buf> resides in user space
+ ** returns number of bytes transferred or -EFAULT
+ */
+-extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+- size_t len, int usermem);
++extern ssize_t dvb_ringbuffer_read_user(struct dvb_ringbuffer *rbuf,
++ u8 __user *buf, size_t len);
++extern void dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf,
++ u8 *buf, size_t len);
+
+
+ /* write routines & macros */
+@@ -149,8 +160,10 @@
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
++extern ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf, size_t idx,
++ int offset, u8 __user *buf, size_t len);
+ extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+- int offset, u8* buf, size_t len, int usermem);
++ int offset, u8 *buf, size_t len);
+
+ /**
+ * Dispose of a packet in the ring buffer.
+Index: drivers/media/dvb/dvb-core/dmxdev.h
+===================================================================
+--- drivers/media/dvb/dvb-core/dmxdev.h (revision 1)
++++ drivers/media/dvb/dvb-core/dmxdev.h (working copy)
+@@ -30,7 +30,9 @@
+ #include <linux/wait.h>
+ #include <linux/fs.h>
+ #include <linux/string.h>
++#include "compat.h"
+ #include <linux/mutex.h>
++#include <linux/slab.h>
+
+ #include <linux/dvb/dmx.h>
+
+@@ -53,13 +55,20 @@
+ DMXDEV_STATE_TIMEDOUT
+ };
+
++struct dmxdev_feed {
++ u16 pid;
++ struct dmx_ts_feed *ts;
++ struct list_head next;
++};
++
+ struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+- struct dmx_ts_feed *ts;
++ /* list of TS and PES feeds (struct dmxdev_feed) */
++ struct list_head ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+@@ -91,6 +100,8 @@
+
+ int filternum;
+ int capabilities;
++
++ unsigned int exit:1;
+ #define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
--- /dev/null
+Index: drivers/media/dvb/frontends/dvb_dummy_fe.h
+===================================================================
+--- drivers/media/dvb/frontends/dvb_dummy_fe.h (revision 1)
++++ drivers/media/dvb/frontends/dvb_dummy_fe.h (working copy)
+@@ -25,8 +25,27 @@
+ #include <linux/dvb/frontend.h>
+ #include "dvb_frontend.h"
+
++#if defined(CONFIG_DVB_DUMMY_FE) || (defined(CONFIG_DVB_DUMMY_FE_MODULE) && \
++defined(MODULE))
+ extern struct dvb_frontend* dvb_dummy_fe_ofdm_attach(void);
+ extern struct dvb_frontend* dvb_dummy_fe_qpsk_attach(void);
+ extern struct dvb_frontend* dvb_dummy_fe_qam_attach(void);
++#else
++static inline struct dvb_frontend *dvb_dummy_fe_ofdm_attach(void)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++static inline struct dvb_frontend *dvb_dummy_fe_qpsk_attach(void)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++static inline struct dvb_frontend *dvb_dummy_fe_qam_attach(void)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif /* CONFIG_DVB_DUMMY_FE */
+
+ #endif // DVB_DUMMY_FE_H
+Index: drivers/media/dvb/frontends/dib3000.h
+===================================================================
+--- drivers/media/dvb/frontends/dib3000.h (revision 1)
++++ drivers/media/dvb/frontends/dib3000.h (working copy)
+@@ -41,9 +41,16 @@
+ int (*tuner_pass_ctrl)(struct dvb_frontend *fe, int onoff, u8 pll_ctrl);
+ };
+
++#if defined(CONFIG_DVB_DIB3000MB) || (defined(CONFIG_DVB_DIB3000MB_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config,
+ struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops);
++#else
++static inline struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config,
++ struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_DIB3000MB
+
+-extern struct dvb_frontend* dib3000mc_attach(const struct dib3000_config* config,
+- struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops);
+ #endif // DIB3000_H
+Index: drivers/media/dvb/frontends/bsru6.h
+===================================================================
+--- drivers/media/dvb/frontends/bsru6.h (revision 1)
++++ drivers/media/dvb/frontends/bsru6.h (working copy)
+@@ -133,7 +133,7 @@
+ .mclk = 88000000UL,
+ .invert = 1,
+ .skip_reinit = 0,
+- .lock_output = STV0229_LOCKOUTPUT_1,
++ .lock_output = STV0299_LOCKOUTPUT_1,
+ .volt13_op0_op1 = STV0299_VOLT13_OP1,
+ .min_delay_ms = 100,
+ .set_symbol_rate = alps_bsru6_set_symbol_rate,
+Index: drivers/media/dvb/frontends/cx24110.h
+===================================================================
+--- drivers/media/dvb/frontends/cx24110.h (revision 1)
++++ drivers/media/dvb/frontends/cx24110.h (working copy)
+@@ -33,9 +33,29 @@
+ u8 demod_address;
+ };
+
++static inline int cx24110_pll_write(struct dvb_frontend *fe, u32 val)
++{
++ u8 buf[] = {
++ (u8)((val >> 24) & 0xff),
++ (u8)((val >> 16) & 0xff),
++ (u8)((val >> 8) & 0xff)
++ };
++
++ if (fe->ops.write)
++ return fe->ops.write(fe, buf, 3);
++ return 0;
++}
++
++#if defined(CONFIG_DVB_CX24110) || (defined(CONFIG_DVB_CX24110_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* cx24110_attach(const struct cx24110_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* cx24110_attach(const struct cx24110_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_CX24110
+
+-extern int cx24110_pll_write(struct dvb_frontend* fe, u32 data);
+-
+ #endif // CX24110_H
+Index: drivers/media/dvb/frontends/l64781.h
+===================================================================
+--- drivers/media/dvb/frontends/l64781.h (revision 1)
++++ drivers/media/dvb/frontends/l64781.h (working copy)
+@@ -31,8 +31,16 @@
+ u8 demod_address;
+ };
+
+-
++#if defined(CONFIG_DVB_L64781) || (defined(CONFIG_DVB_L64781_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* l64781_attach(const struct l64781_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* l64781_attach(const struct l64781_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_L64781
+
+ #endif // L64781_H
+Index: drivers/media/dvb/frontends/mt312_priv.h
+===================================================================
+--- drivers/media/dvb/frontends/mt312_priv.h (revision 1)
++++ drivers/media/dvb/frontends/mt312_priv.h (working copy)
+@@ -110,6 +110,8 @@
+ VIT_ERRPER_H = 83,
+ VIT_ERRPER_M = 84,
+ VIT_ERRPER_L = 85,
++ HW_CTRL = 84, /* ZL10313 only */
++ MPEG_CTRL = 85, /* ZL10313 only */
+ VIT_SETUP = 86,
+ VIT_REF0 = 87,
+ VIT_REF1 = 88,
+@@ -156,7 +158,8 @@
+
+ enum mt312_model_id {
+ ID_VP310 = 1,
+- ID_MT312 = 3
++ ID_MT312 = 3,
++ ID_ZL10313 = 5,
+ };
+
+ #endif /* DVB_FRONTENDS_MT312_PRIV */
+Index: drivers/media/dvb/frontends/dib3000mb_priv.h
+===================================================================
+--- drivers/media/dvb/frontends/dib3000mb_priv.h (revision 1)
++++ drivers/media/dvb/frontends/dib3000mb_priv.h (working copy)
+@@ -13,6 +13,99 @@
+ #ifndef __DIB3000MB_PRIV_H_INCLUDED__
+ #define __DIB3000MB_PRIV_H_INCLUDED__
+
++/* info and err, taken from usb.h, if there is anything available like by default. */
++#define err(format, arg...) printk(KERN_ERR "dib3000: " format "\n" , ## arg)
++#define info(format, arg...) printk(KERN_INFO "dib3000: " format "\n" , ## arg)
++#define warn(format, arg...) printk(KERN_WARNING "dib3000: " format "\n" , ## arg)
++
++/* handy shortcuts */
++#define rd(reg) dib3000_read_reg(state,reg)
++
++#define wr(reg,val) if (dib3000_write_reg(state,reg,val)) \
++ { err("while sending 0x%04x to 0x%04x.",val,reg); return -EREMOTEIO; }
++
++#define wr_foreach(a,v) { int i; \
++ if (sizeof(a) != sizeof(v)) \
++ err("sizeof: %zu %zu is different",sizeof(a),sizeof(v));\
++ for (i=0; i < sizeof(a)/sizeof(u16); i++) \
++ wr(a[i],v[i]); \
++ }
++
++#define set_or(reg,val) wr(reg,rd(reg) | val)
++
++#define set_and(reg,val) wr(reg,rd(reg) & val)
++
++/* debug */
++
++#ifdef CONFIG_DVB_DIBCOM_DEBUG
++#define dprintk(level,args...) \
++ do { if ((debug & level)) { printk(args); } } while (0)
++#else
++#define dprintk(args...) do { } while (0)
++#endif
++
++/* mask for enabling a specific pid for the pid_filter */
++#define DIB3000_ACTIVATE_PID_FILTERING (0x2000)
++
++/* common values for tuning */
++#define DIB3000_ALPHA_0 ( 0)
++#define DIB3000_ALPHA_1 ( 1)
++#define DIB3000_ALPHA_2 ( 2)
++#define DIB3000_ALPHA_4 ( 4)
++
++#define DIB3000_CONSTELLATION_QPSK ( 0)
++#define DIB3000_CONSTELLATION_16QAM ( 1)
++#define DIB3000_CONSTELLATION_64QAM ( 2)
++
++#define DIB3000_GUARD_TIME_1_32 ( 0)
++#define DIB3000_GUARD_TIME_1_16 ( 1)
++#define DIB3000_GUARD_TIME_1_8 ( 2)
++#define DIB3000_GUARD_TIME_1_4 ( 3)
++
++#define DIB3000_TRANSMISSION_MODE_2K ( 0)
++#define DIB3000_TRANSMISSION_MODE_8K ( 1)
++
++#define DIB3000_SELECT_LP ( 0)
++#define DIB3000_SELECT_HP ( 1)
++
++#define DIB3000_FEC_1_2 ( 1)
++#define DIB3000_FEC_2_3 ( 2)
++#define DIB3000_FEC_3_4 ( 3)
++#define DIB3000_FEC_5_6 ( 5)
++#define DIB3000_FEC_7_8 ( 7)
++
++#define DIB3000_HRCH_OFF ( 0)
++#define DIB3000_HRCH_ON ( 1)
++
++#define DIB3000_DDS_INVERSION_OFF ( 0)
++#define DIB3000_DDS_INVERSION_ON ( 1)
++
++#define DIB3000_TUNER_WRITE_ENABLE(a) (0xffff & (a << 8))
++#define DIB3000_TUNER_WRITE_DISABLE(a) (0xffff & ((a << 8) | (1 << 7)))
++
++#define DIB3000_REG_MANUFACTOR_ID ( 1025)
++#define DIB3000_I2C_ID_DIBCOM (0x01b3)
++
++#define DIB3000_REG_DEVICE_ID ( 1026)
++#define DIB3000MB_DEVICE_ID (0x3000)
++#define DIB3000MC_DEVICE_ID (0x3001)
++#define DIB3000P_DEVICE_ID (0x3002)
++
++/* frontend state */
++struct dib3000_state {
++ struct i2c_adapter* i2c;
++
++/* configuration settings */
++ struct dib3000_config config;
++
++ struct dvb_frontend frontend;
++ int timing_offset;
++ int timing_offset_comp_done;
++
++ fe_bandwidth_t last_tuned_bw;
++ u32 last_tuned_freq;
++};
++
+ /* register addresses and some of their default values */
+
+ /* restart subsystems */
+Index: drivers/media/dvb/frontends/sp887x.h
+===================================================================
+--- drivers/media/dvb/frontends/sp887x.h (revision 1)
++++ drivers/media/dvb/frontends/sp887x.h (working copy)
+@@ -17,7 +17,16 @@
+ int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
+ };
+
++#if defined(CONFIG_DVB_SP887X) || (defined(CONFIG_DVB_SP887X_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* sp887x_attach(const struct sp887x_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* sp887x_attach(const struct sp887x_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_SP887X
+
+ #endif // SP887X_H
+Index: drivers/media/dvb/frontends/zl10353.h
+===================================================================
+--- drivers/media/dvb/frontends/zl10353.h (revision 1)
++++ drivers/media/dvb/frontends/zl10353.h (working copy)
+@@ -1,7 +1,7 @@
+ /*
+ * Driver for Zarlink DVB-T ZL10353 demodulator
+ *
+- * Copyright (C) 2006 Christopher Pascoe <c.pascoe@itee.uq.edu.au>
++ * Copyright (C) 2006, 2007 Christopher Pascoe <c.pascoe@itee.uq.edu.au>
+ *
+ * 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
+@@ -29,13 +29,34 @@
+ /* demodulator's I2C address */
+ u8 demod_address;
+
++ /* frequencies in units of 0.1kHz */
++ int adc_clock; /* default: 450560 (45.056 MHz) */
++ int if2; /* default: 361667 (36.1667 MHz) */
++
+ /* set if no pll is connected to the secondary i2c bus */
+ int no_tuner;
++
++ /* set if parallel ts output is required */
++ int parallel_ts;
++
++ /* set if i2c_gate_ctrl disable is required */
++ u8 disable_i2c_gate_ctrl:1;
++
++ /* clock control registers (0x51-0x54) */
++ u8 clock_ctl_1; /* default: 0x46 */
++ u8 pll_0; /* default: 0x15 */
+ };
+
++#if defined(CONFIG_DVB_ZL10353) || (defined(CONFIG_DVB_ZL10353_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* zl10353_attach(const struct zl10353_config *config,
+ struct i2c_adapter *i2c);
++#else
++static inline struct dvb_frontend* zl10353_attach(const struct zl10353_config *config,
++ struct i2c_adapter *i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif /* CONFIG_DVB_ZL10353 */
+
+-extern int zl10353_write(struct dvb_frontend *fe, u8 *ibuf, int ilen);
+-
+ #endif /* ZL10353_H */
+Index: drivers/media/dvb/frontends/zl10353_priv.h
+===================================================================
+--- drivers/media/dvb/frontends/zl10353_priv.h (revision 1)
++++ drivers/media/dvb/frontends/zl10353_priv.h (working copy)
+@@ -1,7 +1,7 @@
+ /*
+ * Driver for Zarlink DVB-T ZL10353 demodulator
+ *
+- * Copyright (C) 2006 Christopher Pascoe <c.pascoe@itee.uq.edu.au>
++ * Copyright (C) 2006, 2007 Christopher Pascoe <c.pascoe@itee.uq.edu.au>
+ *
+ * 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
+@@ -16,27 +16,64 @@
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.=
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ #ifndef _ZL10353_PRIV_
+ #define _ZL10353_PRIV_
+
+-#define ID_ZL10353 0x14
++#define ID_ZL10353 0x14 /* Zarlink ZL10353 */
++#define ID_CE6230 0x18 /* Intel CE6230 */
++#define ID_CE6231 0x19 /* Intel CE6231 */
+
++#define msb(x) (((x) >> 8) & 0xff)
++#define lsb(x) ((x) & 0xff)
++
+ enum zl10353_reg_addr {
+- INTERRUPT_0 = 0x00,
+- INTERRUPT_1 = 0x01,
+- INTERRUPT_2 = 0x02,
+- INTERRUPT_3 = 0x03,
+- INTERRUPT_4 = 0x04,
+- INTERRUPT_5 = 0x05,
+- STATUS_6 = 0x06,
+- STATUS_7 = 0x07,
+- STATUS_8 = 0x08,
+- STATUS_9 = 0x09,
+- SNR = 0x10,
+- CHIP_ID = 0x7F,
++ INTERRUPT_0 = 0x00,
++ INTERRUPT_1 = 0x01,
++ INTERRUPT_2 = 0x02,
++ INTERRUPT_3 = 0x03,
++ INTERRUPT_4 = 0x04,
++ INTERRUPT_5 = 0x05,
++ STATUS_6 = 0x06,
++ STATUS_7 = 0x07,
++ STATUS_8 = 0x08,
++ STATUS_9 = 0x09,
++ AGC_GAIN_1 = 0x0A,
++ AGC_GAIN_0 = 0x0B,
++ SNR = 0x10,
++ RS_ERR_CNT_2 = 0x11,
++ RS_ERR_CNT_1 = 0x12,
++ RS_ERR_CNT_0 = 0x13,
++ RS_UBC_1 = 0x14,
++ RS_UBC_0 = 0x15,
++ TPS_RECEIVED_1 = 0x1D,
++ TPS_RECEIVED_0 = 0x1E,
++ TPS_CURRENT_1 = 0x1F,
++ TPS_CURRENT_0 = 0x20,
++ CLOCK_CTL_0 = 0x51,
++ CLOCK_CTL_1 = 0x52,
++ PLL_0 = 0x53,
++ PLL_1 = 0x54,
++ RESET = 0x55,
++ AGC_TARGET = 0x56,
++ MCLK_RATIO = 0x5C,
++ ACQ_CTL = 0x5E,
++ TRL_NOMINAL_RATE_1 = 0x65,
++ TRL_NOMINAL_RATE_0 = 0x66,
++ INPUT_FREQ_1 = 0x6C,
++ INPUT_FREQ_0 = 0x6D,
++ TPS_GIVEN_1 = 0x6E,
++ TPS_GIVEN_0 = 0x6F,
++ TUNER_GO = 0x70,
++ FSM_GO = 0x71,
++ CHIP_ID = 0x7F,
++ CHAN_STEP_1 = 0xE4,
++ CHAN_STEP_0 = 0xE5,
++ OFDM_LOCK_TIME = 0xE7,
++ FEC_LOCK_TIME = 0xE8,
++ ACQ_DELAY = 0xE9,
+ };
+
+ #endif /* _ZL10353_PRIV_ */
+Index: drivers/media/dvb/frontends/ves1x93.h
+===================================================================
+--- drivers/media/dvb/frontends/ves1x93.h (revision 1)
++++ drivers/media/dvb/frontends/ves1x93.h (working copy)
+@@ -40,7 +40,16 @@
+ u8 invert_pwm:1;
+ };
+
++#if defined(CONFIG_DVB_VES1X93) || (defined(CONFIG_DVB_VES1X93_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_VES1X93
+
+ #endif // VES1X93_H
+Index: drivers/media/dvb/frontends/bsbe1.h
+===================================================================
+--- drivers/media/dvb/frontends/bsbe1.h (revision 1)
++++ drivers/media/dvb/frontends/bsbe1.h (working copy)
+@@ -1,5 +1,5 @@
+ /*
+- * bsbe1.h - ALPS BSBE1 tuner support (moved from av7110.c)
++ * bsbe1.h - ALPS BSBE1 tuner support
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+@@ -26,44 +26,24 @@
+ #define BSBE1_H
+
+ static u8 alps_bsbe1_inittab[] = {
+- 0x01, 0x15,
+- 0x02, 0x30,
+- 0x03, 0x00,
++ 0x01, 0x15, /* XTAL = 4MHz, VCO = 352 MHz */
++ 0x02, 0x30, /* MCLK = 88 MHz */
++ 0x03, 0x00, /* ACR output 0 */
+ 0x04, 0x7d, /* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
+- 0x05, 0x35, /* I2CT = 0, SCLT = 1, SDAT = 1 */
+- 0x06, 0x40, /* DAC not used, set to high impendance mode */
+- 0x07, 0x00, /* DAC LSB */
++ 0x05, 0x05, /* I2CT = 0, SCLT = 1, SDAT = 1 */
++ 0x06, 0x00, /* DAC output 0 */
+ 0x08, 0x40, /* DiSEqC off, LNB power on OP2/LOCK pin on */
+ 0x09, 0x00, /* FIFO */
+- 0x0c, 0x51, /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
+- 0x0d, 0x82, /* DC offset compensation = ON, beta_agc1 = 2 */
+- 0x0e, 0x23, /* alpha_tmg = 2, beta_tmg = 3 */
+- 0x10, 0x3f, // AGC2 0x3d
+- 0x11, 0x84,
+- 0x12, 0xb9,
+- 0x15, 0xc9, // lock detector threshold
+- 0x16, 0x00,
+- 0x17, 0x00,
+- 0x18, 0x00,
+- 0x19, 0x00,
+- 0x1a, 0x00,
+- 0x1f, 0x50,
+- 0x20, 0x00,
+- 0x21, 0x00,
+- 0x22, 0x00,
+- 0x23, 0x00,
+- 0x28, 0x00, // out imp: normal out type: parallel FEC mode:0
+- 0x29, 0x1e, // 1/2 threshold
+- 0x2a, 0x14, // 2/3 threshold
+- 0x2b, 0x0f, // 3/4 threshold
+- 0x2c, 0x09, // 5/6 threshold
+- 0x2d, 0x05, // 7/8 threshold
+- 0x2e, 0x01,
+- 0x31, 0x1f, // test all FECs
+- 0x32, 0x19, // viterbi and synchro search
+- 0x33, 0xfc, // rs control
+- 0x34, 0x93, // error control
+- 0x0f, 0x92,
++ 0x0c, 0x51, /* OP1/OP0 normal, val = 1 (LNB power on) */
++ 0x0d, 0x82, /* DC offset compensation = on, beta_agc1 = 2 */
++ 0x0f, 0x92, /* AGC1R */
++ 0x10, 0x34, /* AGC2O */
++ 0x11, 0x84, /* TLSR */
++ 0x12, 0xb9, /* CFD */
++ 0x15, 0xc9, /* lock detector threshold */
++ 0x28, 0x00, /* out imp: normal, type: parallel, FEC mode: QPSK */
++ 0x33, 0xfc, /* RS control */
++ 0x34, 0x93, /* count viterbi bit errors per 2E18 bytes */
+ 0xff, 0xff
+ };
+
+@@ -100,11 +80,11 @@
+ if ((params->frequency < 950000) || (params->frequency > 2150000))
+ return -EINVAL;
+
+- div = (params->frequency + (125 - 1)) / 125; // round correctly
++ div = params->frequency / 1000;
+ data[0] = (div >> 8) & 0x7f;
+ data[1] = div & 0xff;
+- data[2] = 0x80 | ((div & 0x18000) >> 10) | 4;
+- data[3] = (params->frequency > 1530000) ? 0xE0 : 0xE4;
++ data[2] = 0x80 | ((div & 0x18000) >> 10) | 0x1;
++ data[3] = 0xe0;
+
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 1);
+Index: drivers/media/dvb/frontends/stv0297.h
+===================================================================
+--- drivers/media/dvb/frontends/stv0297.h (revision 1)
++++ drivers/media/dvb/frontends/stv0297.h (working copy)
+@@ -42,7 +42,16 @@
+ u8 stop_during_read:1;
+ };
+
++#if defined(CONFIG_DVB_STV0297) || (defined(CONFIG_DVB_STV0297_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* stv0297_attach(const struct stv0297_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_STV0297
+
+ #endif // STV0297_H
+Index: drivers/media/dvb/frontends/lnbp21.h
+===================================================================
+--- drivers/media/dvb/frontends/lnbp21.h (revision 1)
++++ drivers/media/dvb/frontends/lnbp21.h (working copy)
+@@ -28,18 +28,48 @@
+ #define _LNBP21_H
+
+ /* system register bits */
++/* [RO] 0=OK; 1=over current limit flag */
+ #define LNBP21_OLF 0x01
++/* [RO] 0=OK; 1=over temperature flag (150 C) */
+ #define LNBP21_OTF 0x02
++/* [RW] 0=disable LNB power, enable loopthrough
++ 1=enable LNB power, disable loopthrough */
+ #define LNBP21_EN 0x04
++/* [RW] 0=low voltage (13/14V, vert pol)
++ 1=high voltage (18/19V,horiz pol) */
+ #define LNBP21_VSEL 0x08
++/* [RW] increase LNB voltage by 1V:
++ 0=13/18V; 1=14/19V */
+ #define LNBP21_LLC 0x10
++/* [RW] 0=tone controlled by DSQIN pin
++ 1=tone enable, disable DSQIN */
+ #define LNBP21_TEN 0x20
++/* [RW] current limit select:
++ 0:Iout=500-650mA Isc=300mA
++ 1:Iout=400-550mA Isc=200mA */
+ #define LNBP21_ISEL 0x40
++/* [RW] short-circuit protect:
++ 0=pulsed (dynamic) curr limiting
++ 1=static curr limiting */
+ #define LNBP21_PCL 0x80
+
+ #include <linux/dvb/frontend.h>
+
+-/* override_set and override_clear control which system register bits (above) to always set & clear */
+-extern int lnbp21_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 override_set, u8 override_clear);
++#if defined(CONFIG_DVB_LNBP21) || (defined(CONFIG_DVB_LNBP21_MODULE) \
++ && defined(MODULE))
++/* override_set and override_clear control which
++ system register bits (above) to always set & clear */
++extern struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe,
++ struct i2c_adapter *i2c, u8 override_set,
++ u8 override_clear);
++#else
++static inline struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe,
++ struct i2c_adapter *i2c, u8 override_set,
++ u8 override_clear)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif
+
+ #endif
+Index: drivers/media/dvb/frontends/stv0299.h
+===================================================================
+--- drivers/media/dvb/frontends/stv0299.h (revision 1)
++++ drivers/media/dvb/frontends/stv0299.h (working copy)
+@@ -48,10 +48,10 @@
+ #include <linux/dvb/frontend.h>
+ #include "dvb_frontend.h"
+
+-#define STV0229_LOCKOUTPUT_0 0
+-#define STV0229_LOCKOUTPUT_1 1
+-#define STV0229_LOCKOUTPUT_CF 2
+-#define STV0229_LOCKOUTPUT_LK 3
++#define STV0299_LOCKOUTPUT_0 0
++#define STV0299_LOCKOUTPUT_1 1
++#define STV0299_LOCKOUTPUT_CF 2
++#define STV0299_LOCKOUTPUT_LK 3
+
+ #define STV0299_VOLT13_OP0 0
+ #define STV0299_VOLT13_OP1 1
+@@ -82,16 +82,37 @@
+ /* Is 13v controlled by OP0 or OP1? */
+ u8 volt13_op0_op1:1;
+
++ /* Turn-off OP0? */
++ u8 op0_off:1;
++
+ /* minimum delay before retuning */
+ int min_delay_ms;
+
+ /* Set the symbol rate */
+- int (*set_symbol_rate)(struct dvb_frontend* fe, u32 srate, u32 ratio);
++ int (*set_symbol_rate)(struct dvb_frontend *fe, u32 srate, u32 ratio);
++
++ /* Set device param to start dma */
++ int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured);
+ };
+
+-extern int stv0299_writereg (struct dvb_frontend* fe, u8 reg, u8 data);
++#if defined(CONFIG_DVB_STV0299) || (defined(CONFIG_DVB_STV0299_MODULE) && defined(MODULE))
++extern struct dvb_frontend *stv0299_attach(const struct stv0299_config *config,
++ struct i2c_adapter *i2c);
++#else
++static inline struct dvb_frontend *stv0299_attach(const struct stv0299_config *config,
++ struct i2c_adapter *i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_STV0299
+
+-extern struct dvb_frontend* stv0299_attach(const struct stv0299_config* config,
+- struct i2c_adapter* i2c);
++static inline int stv0299_writereg(struct dvb_frontend *fe, u8 reg, u8 val) {
++ int r = 0;
++ u8 buf[] = {reg, val};
++ if (fe->ops.write)
++ r = fe->ops.write(fe, buf, 2);
++ return r;
++}
+
+ #endif // STV0299_H
+Index: drivers/media/dvb/frontends/cx24123.h
+===================================================================
+--- drivers/media/dvb/frontends/cx24123.h (revision 1)
++++ drivers/media/dvb/frontends/cx24123.h (working copy)
+@@ -1,7 +1,7 @@
+ /*
+ Conexant cx24123/cx24109 - DVB QPSK Satellite demod/tuner driver
+
+- Copyright (C) 2005 Steven Toth <stoth@hauppauge.com>
++ Copyright (C) 2005 Steven Toth <stoth@linuxtv.org>
+
+ 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
+@@ -23,16 +23,39 @@
+
+ #include <linux/dvb/frontend.h>
+
+-struct cx24123_config
+-{
++struct cx24123_config {
+ /* the demodulator's i2c address */
+ u8 demod_address;
+
+ /* Need to set device param for start_dma */
+- int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured);
++ int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured);
++
++ /* 0 = LNB voltage normal, 1 = LNB voltage inverted */
++ int lnb_polarity;
++
++ /* this device has another tuner */
++ u8 dont_use_pll;
++ void (*agc_callback) (struct dvb_frontend *);
+ };
+
+-extern struct dvb_frontend* cx24123_attach(const struct cx24123_config* config,
+- struct i2c_adapter* i2c);
++#if defined(CONFIG_DVB_CX24123) || (defined(CONFIG_DVB_CX24123_MODULE) \
++ && defined(MODULE))
++extern struct dvb_frontend *cx24123_attach(const struct cx24123_config *config,
++ struct i2c_adapter *i2c);
++extern struct i2c_adapter *cx24123_get_tuner_i2c_adapter(struct dvb_frontend *);
++#else
++static inline struct dvb_frontend *cx24123_attach(
++ const struct cx24123_config *config, struct i2c_adapter *i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++static struct i2c_adapter *
++ cx24123_get_tuner_i2c_adapter(struct dvb_frontend *fe)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif
+
+ #endif /* CX24123_H */
+Index: drivers/media/dvb/frontends/nxt6000.h
+===================================================================
+--- drivers/media/dvb/frontends/nxt6000.h (revision 1)
++++ drivers/media/dvb/frontends/nxt6000.h (working copy)
+@@ -33,7 +33,16 @@
+ u8 clock_inversion:1;
+ };
+
++#if defined(CONFIG_DVB_NXT6000) || (defined(CONFIG_DVB_NXT6000_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_NXT6000
+
+ #endif // NXT6000_H
+Index: drivers/media/dvb/frontends/isl6421.h
+===================================================================
+--- drivers/media/dvb/frontends/isl6421.h (revision 1)
++++ drivers/media/dvb/frontends/isl6421.h (working copy)
+@@ -39,8 +39,17 @@
+ #define ISL6421_ISEL1 0x20
+ #define ISL6421_DCL 0x40
+
++#if defined(CONFIG_DVB_ISL6421) || (defined(CONFIG_DVB_ISL6421_MODULE) && defined(MODULE))
+ /* override_set and override_clear control which system register bits (above) to always set & clear */
+-extern int isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr,
++extern struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr,
+ u8 override_set, u8 override_clear);
++#else
++static inline struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr,
++ u8 override_set, u8 override_clear)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_ISL6421
+
+ #endif
+Index: drivers/media/dvb/frontends/lgdt330x_priv.h
+===================================================================
+--- drivers/media/dvb/frontends/lgdt330x_priv.h (revision 1)
++++ drivers/media/dvb/frontends/lgdt330x_priv.h (working copy)
+@@ -51,14 +51,19 @@
+ AGC_RFIF_ACC2= 0x3b,
+ AGC_STATUS= 0x3f,
+ SYNC_STATUS_VSB= 0x43,
+- EQPH_ERR0= 0x47,
+- EQ_ERR1= 0x48,
+- EQ_ERR2= 0x49,
+- PH_ERR1= 0x4a,
+- PH_ERR2= 0x4b,
+ DEMUX_CONTROL= 0x66,
++ LGDT3302_EQPH_ERR0= 0x47,
++ LGDT3302_EQ_ERR1= 0x48,
++ LGDT3302_EQ_ERR2= 0x49,
++ LGDT3302_PH_ERR1= 0x4a,
++ LGDT3302_PH_ERR2= 0x4b,
+ LGDT3302_PACKET_ERR_COUNTER1= 0x6a,
+ LGDT3302_PACKET_ERR_COUNTER2= 0x6b,
++ LGDT3303_EQPH_ERR0= 0x6e,
++ LGDT3303_EQ_ERR1= 0x6f,
++ LGDT3303_EQ_ERR2= 0x70,
++ LGDT3303_PH_ERR1= 0x71,
++ LGDT3303_PH_ERR2= 0x72,
+ LGDT3303_PACKET_ERR_COUNTER1= 0x8b,
+ LGDT3303_PACKET_ERR_COUNTER2= 0x8c,
+ };
+Index: drivers/media/dvb/frontends/sp8870.h
+===================================================================
+--- drivers/media/dvb/frontends/sp8870.h (revision 1)
++++ drivers/media/dvb/frontends/sp8870.h (working copy)
+@@ -35,7 +35,16 @@
+ int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
+ };
+
++#if defined(CONFIG_DVB_SP8870) || (defined(CONFIG_DVB_SP8870_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* sp8870_attach(const struct sp8870_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* sp8870_attach(const struct sp8870_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_SP8870
+
+ #endif // SP8870_H
+Index: drivers/media/dvb/frontends/tda8083.h
+===================================================================
+--- drivers/media/dvb/frontends/tda8083.h (revision 1)
++++ drivers/media/dvb/frontends/tda8083.h (working copy)
+@@ -35,7 +35,16 @@
+ u8 demod_address;
+ };
+
++#if defined(CONFIG_DVB_TDA8083) || (defined(CONFIG_DVB_TDA8083_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* tda8083_attach(const struct tda8083_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* tda8083_attach(const struct tda8083_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_TDA8083
+
+ #endif // TDA8083_H
+Index: drivers/media/dvb/frontends/dvb-pll.h
+===================================================================
+--- drivers/media/dvb/frontends/dvb-pll.h (revision 1)
++++ drivers/media/dvb/frontends/dvb-pll.h (working copy)
+@@ -8,57 +8,49 @@
+ #include <linux/i2c.h>
+ #include "dvb_frontend.h"
+
+-struct dvb_pll_desc {
+- char *name;
+- u32 min;
+- u32 max;
+- void (*setbw)(u8 *buf, u32 freq, int bandwidth);
+- int count;
+- struct {
+- u32 limit;
+- u32 offset;
+- u32 stepsize;
+- u8 config;
+- u8 cb;
+- } entries[12];
+-};
++#define DVB_PLL_UNDEFINED 0
++#define DVB_PLL_THOMSON_DTT7579 1
++#define DVB_PLL_THOMSON_DTT759X 2
++#define DVB_PLL_LG_Z201 3
++#define DVB_PLL_UNKNOWN_1 4
++#define DVB_PLL_TUA6010XS 5
++#define DVB_PLL_ENV57H1XD5 6
++#define DVB_PLL_TUA6034 7
++#define DVB_PLL_TDA665X 8
++#define DVB_PLL_TDED4 9
++#define DVB_PLL_TDHU2 10
++#define DVB_PLL_SAMSUNG_TBMV 11
++#define DVB_PLL_PHILIPS_SD1878_TDA8261 12
++#define DVB_PLL_OPERA1 13
++#define DVB_PLL_SAMSUNG_DTOS403IH102A 14
++#define DVB_PLL_SAMSUNG_TDTC9251DH0 15
++#define DVB_PLL_SAMSUNG_TBDU18132 16
++#define DVB_PLL_SAMSUNG_TBMU24112 17
++#define DVB_PLL_TDEE4 18
+
+-extern struct dvb_pll_desc dvb_pll_thomson_dtt7579;
+-extern struct dvb_pll_desc dvb_pll_thomson_dtt759x;
+-extern struct dvb_pll_desc dvb_pll_thomson_dtt7610;
+-extern struct dvb_pll_desc dvb_pll_lg_z201;
+-extern struct dvb_pll_desc dvb_pll_microtune_4042;
+-extern struct dvb_pll_desc dvb_pll_thomson_dtt761x;
+-extern struct dvb_pll_desc dvb_pll_unknown_1;
+-
+-extern struct dvb_pll_desc dvb_pll_tua6010xs;
+-extern struct dvb_pll_desc dvb_pll_env57h1xd5;
+-extern struct dvb_pll_desc dvb_pll_tua6034;
+-extern struct dvb_pll_desc dvb_pll_lg_tdvs_h06xf;
+-extern struct dvb_pll_desc dvb_pll_tda665x;
+-extern struct dvb_pll_desc dvb_pll_fmd1216me;
+-extern struct dvb_pll_desc dvb_pll_tded4;
+-
+-extern struct dvb_pll_desc dvb_pll_tuv1236d;
+-extern struct dvb_pll_desc dvb_pll_tdhu2;
+-extern struct dvb_pll_desc dvb_pll_samsung_tbmv;
+-extern struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261;
+-extern struct dvb_pll_desc dvb_pll_philips_td1316;
+-
+-extern struct dvb_pll_desc dvb_pll_thomson_fe6600;
+-
+-extern int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf,
+- u32 freq, int bandwidth);
+-
+ /**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+- * @param desc dvb_pll_desc to use.
+- * @return 0 on success, nonzero on failure.
++ * @param pll_desc_id dvb_pll_desc to use.
++ * @return Frontend pointer on success, NULL on failure
+ */
+-extern int dvb_pll_attach(struct dvb_frontend *fe, int pll_addr, struct i2c_adapter *i2c, struct dvb_pll_desc *desc);
++#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
++extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
++ int pll_addr,
++ struct i2c_adapter *i2c,
++ unsigned int pll_desc_id);
++#else
++static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
++ int pll_addr,
++ struct i2c_adapter *i2c,
++ unsigned int pll_desc_id)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif
+
+ #endif
+Index: drivers/media/dvb/frontends/tda1004x.h
+===================================================================
+--- drivers/media/dvb/frontends/tda1004x.h (revision 1)
++++ drivers/media/dvb/frontends/tda1004x.h (working copy)
+@@ -36,9 +36,24 @@
+ TDA10046_AGC_IFO_AUTO_NEG, /* IF AGC only, automatic, negtive */
+ TDA10046_AGC_IFO_AUTO_POS, /* IF AGC only, automatic, positive */
+ TDA10046_AGC_TDA827X, /* IF AGC only, special setup for tda827x */
+- TDA10046_AGC_TDA827X_GPL, /* same as above, but GPIOs 0 */
+ };
+
++/* Many (hybrid) boards use GPIO 1 and 3
++ GPIO1 analog - dvb switch
++ GPIO3 firmware eeprom address switch
++*/
++enum tda10046_gpio {
++ TDA10046_GPTRI = 0x00, /* All GPIOs tristate */
++ TDA10046_GP00 = 0x40, /* GPIO3=0, GPIO1=0 */
++ TDA10046_GP01 = 0x42, /* GPIO3=0, GPIO1=1 */
++ TDA10046_GP10 = 0x48, /* GPIO3=1, GPIO1=0 */
++ TDA10046_GP11 = 0x4a, /* GPIO3=1, GPIO1=1 */
++ TDA10046_GP00_I = 0x80, /* GPIO3=0, GPIO1=0, invert in sleep mode*/
++ TDA10046_GP01_I = 0x82, /* GPIO3=0, GPIO1=1, invert in sleep mode */
++ TDA10046_GP10_I = 0x88, /* GPIO3=1, GPIO1=0, invert in sleep mode */
++ TDA10046_GP11_I = 0x8a, /* GPIO3=1, GPIO1=1, invert in sleep mode */
++};
++
+ enum tda10046_if {
+ TDA10046_FREQ_3617, /* original config, 36,166 MHZ */
+ TDA10046_FREQ_3613, /* 36,13 MHZ */
+@@ -46,6 +61,11 @@
+ TDA10046_FREQ_052, /* low IF, 5.1667 MHZ for tda9889 */
+ };
+
++enum tda10046_tsout {
++ TDA10046_TS_PARALLEL = 0x00, /* parallel transport stream, default */
++ TDA10046_TS_SERIAL = 0x01, /* serial transport stream */
++};
++
+ struct tda1004x_config
+ {
+ /* the demodulator's i2c address */
+@@ -57,6 +77,9 @@
+ /* Does the OCLK signal need inverted? */
+ u8 invert_oclk;
+
++ /* parallel or serial transport stream */
++ enum tda10046_tsout ts_mode;
++
+ /* Xtal frequency, 4 or 16MHz*/
+ enum tda10046_xtal xtal_freq;
+
+@@ -66,17 +89,61 @@
+ /* AGC configuration */
+ enum tda10046_agc agc_config;
+
++ /* setting of GPIO1 and 3 */
++ enum tda10046_gpio gpio_config;
++
++ /* slave address and configuration of the tuner */
++ u8 tuner_address;
++ u8 antenna_switch;
++
++ /* if the board uses another I2c Bridge (tda8290), its address */
++ u8 i2c_gate;
++
+ /* request firmware for device */
+- /* set this to NULL if the card has a firmware EEPROM */
+ int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
+ };
+
++enum tda1004x_demod {
++ TDA1004X_DEMOD_TDA10045,
++ TDA1004X_DEMOD_TDA10046,
++};
++
++struct tda1004x_state {
++ struct i2c_adapter* i2c;
++ const struct tda1004x_config* config;
++ struct dvb_frontend frontend;
++
++ /* private demod data */
++ enum tda1004x_demod demod_type;
++};
++
++#if defined(CONFIG_DVB_TDA1004X) || (defined(CONFIG_DVB_TDA1004X_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config,
+ struct i2c_adapter* i2c);
+
+ extern struct dvb_frontend* tda10046_attach(const struct tda1004x_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++static inline struct dvb_frontend* tda10046_attach(const struct tda1004x_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_TDA1004X
+
+-extern int tda1004x_write_byte(struct dvb_frontend* fe, int reg, int data);
++static inline int tda1004x_writereg(struct dvb_frontend *fe, u8 reg, u8 val) {
++ int r = 0;
++ u8 buf[] = {reg, val};
++ if (fe->ops.write)
++ r = fe->ops.write(fe, buf, 2);
++ return r;
++}
+
+ #endif // TDA1004X_H
+Index: drivers/media/dvb/frontends/cx22700.h
+===================================================================
+--- drivers/media/dvb/frontends/cx22700.h (revision 1)
++++ drivers/media/dvb/frontends/cx22700.h (working copy)
+@@ -31,7 +31,16 @@
+ u8 demod_address;
+ };
+
++#if defined(CONFIG_DVB_CX22700) || (defined(CONFIG_DVB_CX22700_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* cx22700_attach(const struct cx22700_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* cx22700_attach(const struct cx22700_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_CX22700
+
+ #endif // CX22700_H
+Index: drivers/media/dvb/frontends/mt312.h
+===================================================================
+--- drivers/media/dvb/frontends/mt312.h (revision 1)
++++ drivers/media/dvb/frontends/mt312.h (working copy)
+@@ -28,14 +28,24 @@
+
+ #include <linux/dvb/frontend.h>
+
+-struct mt312_config
+-{
++struct mt312_config {
+ /* the demodulator's i2c address */
+ u8 demod_address;
++
++ /* inverted voltage setting */
++ unsigned int voltage_inverted:1;
+ };
+
+-struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config,
+- struct i2c_adapter* i2c);
++#if defined(CONFIG_DVB_MT312) || (defined(CONFIG_DVB_MT312_MODULE) && defined(MODULE))
++struct dvb_frontend *mt312_attach(const struct mt312_config *config,
++ struct i2c_adapter *i2c);
++#else
++static inline struct dvb_frontend *mt312_attach(
++ const struct mt312_config *config, struct i2c_adapter *i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif /* CONFIG_DVB_MT312 */
+
+-
+-#endif // MT312_H
++#endif /* MT312_H */
+Index: drivers/media/dvb/frontends/s5h1420.h
+===================================================================
+--- drivers/media/dvb/frontends/s5h1420.h (revision 1)
++++ drivers/media/dvb/frontends/s5h1420.h (working copy)
+@@ -1,25 +1,26 @@
+ /*
+- Driver for S5H1420 QPSK Demodulators
+-
+- Copyright (C) 2005 Andrew de Quincey <adq_dvb@lidskialf.net>
+-
+- 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 of the License, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+-
+-*/
+-
++ * Driver for
++ * Samsung S5H1420 and
++ * PnpNetwork PN1010 QPSK Demodulator
++ *
++ * Copyright (C) 2005 Andrew de Quincey <adq_dvb@lidskialf.net>
++ * Copyright (C) 2005-8 Patrick Boettcher <pb@linuxtv.org>
++ *
++ * 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 of the License, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
+ #ifndef S5H1420_H
+ #define S5H1420_H
+
+@@ -32,9 +33,29 @@
+
+ /* does the inversion require inversion? */
+ u8 invert:1;
++
++ u8 repeated_start_workaround:1;
++ u8 cdclk_polarity:1; /* 1 == falling edge, 0 == raising edge */
++
++ u8 serial_mpeg:1;
+ };
+
+-extern struct dvb_frontend* s5h1420_attach(const struct s5h1420_config* config,
+- struct i2c_adapter* i2c);
++#if defined(CONFIG_DVB_S5H1420) || (defined(CONFIG_DVB_S5H1420_MODULE) && defined(MODULE))
++extern struct dvb_frontend *s5h1420_attach(const struct s5h1420_config *config,
++ struct i2c_adapter *i2c);
++extern struct i2c_adapter *s5h1420_get_tuner_i2c_adapter(struct dvb_frontend *fe);
++#else
++static inline struct dvb_frontend *s5h1420_attach(const struct s5h1420_config *config,
++ struct i2c_adapter *i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
+
++static inline struct i2c_adapter *s5h1420_get_tuner_i2c_adapter(struct dvb_frontend *fe)
++{
++ return NULL;
++}
++#endif // CONFIG_DVB_S5H1420
++
+ #endif // S5H1420_H
+Index: drivers/media/dvb/frontends/cx22702.h
+===================================================================
+--- drivers/media/dvb/frontends/cx22702.h (revision 1)
++++ drivers/media/dvb/frontends/cx22702.h (working copy)
+@@ -7,7 +7,7 @@
+ Copyright (C) 2001-2002 Convergence Integrated Media GmbH
+ Holger Waechtler <holger@convergence.de>
+
+- Copyright (C) 2004 Steven Toth <stoth@hauppauge.com>
++ Copyright (C) 2004 Steven Toth <stoth@linuxtv.org>
+
+ 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
+@@ -30,8 +30,7 @@
+
+ #include <linux/dvb/frontend.h>
+
+-struct cx22702_config
+-{
++struct cx22702_config {
+ /* the demodulator's i2c address */
+ u8 demod_address;
+
+@@ -41,7 +40,19 @@
+ u8 output_mode;
+ };
+
+-extern struct dvb_frontend* cx22702_attach(const struct cx22702_config* config,
+- struct i2c_adapter* i2c);
++#if defined(CONFIG_DVB_CX22702) || (defined(CONFIG_DVB_CX22702_MODULE) \
++ && defined(MODULE))
++extern struct dvb_frontend *cx22702_attach(
++ const struct cx22702_config *config,
++ struct i2c_adapter *i2c);
++#else
++static inline struct dvb_frontend *cx22702_attach(
++ const struct cx22702_config *config,
++ struct i2c_adapter *i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif
+
+-#endif // CX22702_H
++#endif
+Index: drivers/media/dvb/frontends/lgdt330x.h
+===================================================================
+--- drivers/media/dvb/frontends/lgdt330x.h (revision 1)
++++ drivers/media/dvb/frontends/lgdt330x.h (working copy)
+@@ -52,8 +52,17 @@
+ int clock_polarity_flip;
+ };
+
++#if defined(CONFIG_DVB_LGDT330X) || (defined(CONFIG_DVB_LGDT330X_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_LGDT330X
+
+ #endif /* LGDT330X_H */
+
+Index: drivers/media/dvb/frontends/ves1820.h
+===================================================================
+--- drivers/media/dvb/frontends/ves1820.h (revision 1)
++++ drivers/media/dvb/frontends/ves1820.h (working copy)
+@@ -41,7 +41,16 @@
+ u8 selagc:1;
+ };
+
++#if defined(CONFIG_DVB_VES1820) || (defined(CONFIG_DVB_VES1820_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* ves1820_attach(const struct ves1820_config* config,
+ struct i2c_adapter* i2c, u8 pwm);
++#else
++static inline struct dvb_frontend* ves1820_attach(const struct ves1820_config* config,
++ struct i2c_adapter* i2c, u8 pwm)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_VES1820
+
+ #endif // VES1820_H
+Index: drivers/media/dvb/frontends/or51211.h
+===================================================================
+--- drivers/media/dvb/frontends/or51211.h (revision 1)
++++ drivers/media/dvb/frontends/or51211.h (working copy)
+@@ -37,8 +37,17 @@
+ void (*sleep)(struct dvb_frontend * fe);
+ };
+
++#if defined(CONFIG_DVB_OR51211) || (defined(CONFIG_DVB_OR51211_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* or51211_attach(const struct or51211_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* or51211_attach(const struct or51211_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_OR51211
+
+ #endif // OR51211_H
+
+Index: drivers/media/dvb/frontends/mt352.h
+===================================================================
+--- drivers/media/dvb/frontends/mt352.h (revision 1)
++++ drivers/media/dvb/frontends/mt352.h (working copy)
+@@ -51,9 +51,23 @@
+ int (*demod_init)(struct dvb_frontend* fe);
+ };
+
++#if defined(CONFIG_DVB_MT352) || (defined(CONFIG_DVB_MT352_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* mt352_attach(const struct mt352_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* mt352_attach(const struct mt352_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_MT352
+
+-extern int mt352_write(struct dvb_frontend* fe, u8* ibuf, int ilen);
++static inline int mt352_write(struct dvb_frontend *fe, u8 *buf, int len) {
++ int r = 0;
++ if (fe->ops.write)
++ r = fe->ops.write(fe, buf, len);
++ return r;
++}
+
+ #endif // MT352_H
+Index: drivers/media/dvb/frontends/bcm3510.h
+===================================================================
+--- drivers/media/dvb/frontends/bcm3510.h (revision 1)
++++ drivers/media/dvb/frontends/bcm3510.h (working copy)
+@@ -34,7 +34,16 @@
+ int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
+ };
+
++#if defined(CONFIG_DVB_BCM3510) || (defined(CONFIG_DVB_BCM3510_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_BCM3510
+
+ #endif
+Index: drivers/media/dvb/frontends/or51132.h
+===================================================================
+--- drivers/media/dvb/frontends/or51132.h (revision 1)
++++ drivers/media/dvb/frontends/or51132.h (working copy)
+@@ -34,8 +34,17 @@
+ int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured);
+ };
+
++#if defined(CONFIG_DVB_OR51132) || (defined(CONFIG_DVB_OR51132_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* or51132_attach(const struct or51132_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* or51132_attach(const struct or51132_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_OR51132
+
+ #endif // OR51132_H
+
+Index: drivers/media/dvb/frontends/nxt200x.h
+===================================================================
+--- drivers/media/dvb/frontends/nxt200x.h (revision 1)
++++ drivers/media/dvb/frontends/nxt200x.h (working copy)
+@@ -38,15 +38,21 @@
+ /* the demodulator's i2c address */
+ u8 demod_address;
+
+- /* used to set pll input */
+- int (*set_pll_input)(u8* buf, int input);
+-
+ /* need to set device param for start_dma */
+ int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured);
+ };
+
++#if defined(CONFIG_DVB_NXT200X) || (defined(CONFIG_DVB_NXT200X_MODULE) && defined(MODULE))
+ extern struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config,
+ struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config,
++ struct i2c_adapter* i2c)
++{
++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++#endif // CONFIG_DVB_NXT200X
+
+ #endif /* NXT200X_H */
+
--- /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
+diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c
+index 7b4553d..c402c37 100644
+--- a/arch/mips/kernel/asm-offsets.c
++++ b/arch/mips/kernel/asm-offsets.c
+@@ -22,7 +22,7 @@
+ #define offset(string, ptr, member) \
+ __asm__("\n@@@" string "%0" : : "i" (_offset(ptr, member)))
+ #define constant(string, member) \
+- __asm__("\n@@@" string "%X0" : : "ri" (member))
++ __asm__("\n@@@" string "%0" : : "ri" (member))
+ #define size(string, size) \
+ __asm__("\n@@@" string "%0" : : "i" (sizeof(size)))
+ #define linefeed text("")
+diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c
+index ab3c3ea..c19c37f 100644
+--- a/arch/mips/kernel/time.c
++++ b/arch/mips/kernel/time.c
+@@ -281,10 +281,14 @@ static unsigned long fixed_rate_gettimeoffset(void)
+ /* .. relative to previous jiffy (32 bits is enough) */
+ count -= timerlo;
+
++#ifndef GCC_NO_H_CONSTRAINT
+ __asm__("multu %1,%2"
+ : "=h" (res)
+ : "r" (count), "r" (sll32_usecs_per_cycle)
+ : "lo", GCC_REG_ACCUM);
++#else
++ res = ((uintx_t)count * sll32_usecs_per_cycle) >> BITS_PER_LONG;
++#endif
+
+ #if 0
+ /*
+@@ -337,10 +341,14 @@ static unsigned long calibrate_div32_gettimeoffset(void)
+ /* .. relative to previous jiffy (32 bits is enough) */
+ count -= timerlo;
+
++#ifndef GCC_NO_H_CONSTRAINT
+ __asm__("multu %1,%2"
+ : "=h" (res)
+ : "r" (count), "r" (quotient)
+ : "lo", GCC_REG_ACCUM);
++#else
++ res = ((uintx_t)count * quotient) >> BITS_PER_LONG;
++#endif
+
+ /*
+ * Due to possible jiffies inconsistencies, we need to check
+@@ -393,10 +401,14 @@ static unsigned long calibrate_div64_gettimeoffset(void)
+ /* .. relative to previous jiffy (32 bits is enough) */
+ count -= timerlo;
+
++#ifndef GCC_NO_H_CONSTRAINT
+ __asm__("multu %1,%2"
+ : "=h" (res)
+ : "r" (count), "r" (quotient)
+ : "lo", GCC_REG_ACCUM);
++#else
++ res = ((uintx_t)count * quotient) >> BITS_PER_LONG;
++#endif
+
+ /*
+ * Due to possible jiffies inconsistencies, we need to check
+@@ -440,7 +452,7 @@ EXPORT_SYMBOL(null_perf_irq);
+ EXPORT_SYMBOL(perf_irq);
+
+ extern int performance_enabled;
+-extern int test_all_counters();
++extern int test_all_counters(void);
+
+ /*
+ * High-level timer interrupt service routines. This function
+diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile
+index 44b76d3..46ebcb8 100644
+--- a/arch/mips/lib/Makefile
++++ b/arch/mips/lib/Makefile
+@@ -10,6 +10,6 @@ obj-$(CONFIG_PCI) += iomap-pci.o
+
+ # libgcc-style stuff needed in the kernel
+ # PR43073: changed from lib-y
+-obj-y += ashldi3.o ashrdi3.o lshrdi3.o
++obj-y += ashldi3.o ashrdi3.o lshrdi3.o ucmpdi2.o
+
+ EXTRA_AFLAGS := $(CFLAGS)
+diff --git a/arch/mips/lib/ucmpdi2.c b/arch/mips/lib/ucmpdi2.c
+index e69de29..bb4cb2f 100644
+--- a/arch/mips/lib/ucmpdi2.c
++++ b/arch/mips/lib/ucmpdi2.c
+@@ -0,0 +1,21 @@
++#include <linux/module.h>
++
++#include "libgcc.h"
++
++word_type __ucmpdi2(unsigned long long a, unsigned long long b)
++{
++ const DWunion au = {.ll = a};
++ const DWunion bu = {.ll = b};
++
++ if ((unsigned int) au.s.high < (unsigned int) bu.s.high)
++ return 0;
++ else if ((unsigned int) au.s.high > (unsigned int) bu.s.high)
++ return 2;
++ if ((unsigned int) au.s.low < (unsigned int) bu.s.low)
++ return 0;
++ else if ((unsigned int) au.s.low > (unsigned int) bu.s.low)
++ return 2;
++ return 1;
++}
++
++EXPORT_SYMBOL(__ucmpdi2);
+diff --git a/include/asm-mips/compiler.h b/include/asm-mips/compiler.h
+index 169ae26..4b56fe4 100644
+--- a/include/asm-mips/compiler.h
++++ b/include/asm-mips/compiler.h
+@@ -8,10 +8,21 @@
+ #ifndef _ASM_COMPILER_H
+ #define _ASM_COMPILER_H
+
++#include <asm/types.h>
++
+ #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ #define GCC_REG_ACCUM "$0"
+ #else
+ #define GCC_REG_ACCUM "accum"
+ #endif
+
++#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
++#define GCC_NO_H_CONSTRAINT
++#ifdef CONFIG_64BIT
++typedef unsigned int uintx_t __attribute__((mode(TI)));
++#else
++typedef u64 uintx_t;
++#endif
++#endif
++
+ #endif /* _ASM_COMPILER_H */
+diff --git a/include/asm-mips/delay.h b/include/asm-mips/delay.h
+index 223d156..7c9dc07 100644
+--- a/include/asm-mips/delay.h
++++ b/include/asm-mips/delay.h
+@@ -36,6 +36,37 @@ static inline void __delay(unsigned long loops)
+ : "0" (loops));
+ }
+
++/*
++ * convert usecs to loops
++ *
++ * handle removal of 'h' constraint in GCC 4.4
++ */
++
++#ifndef GCC_NO_H_CONSTRAINT /* gcc <= 4.3 */
++static inline unsigned long __usecs_to_loops(unsigned long usecs, unsigned long lpj)
++{
++ unsigned long lo;
++
++ if (sizeof(long) == 4)
++ __asm__("multu\t%2, %3"
++ : "=h" (usecs), "=l" (lo)
++ : "r" (usecs), "r" (lpj)
++ : GCC_REG_ACCUM);
++ else if (sizeof(long) == 8)
++ __asm__("dmultu\t%2, %3"
++ : "=h" (usecs), "=l" (lo)
++ : "r" (usecs), "r" (lpj)
++ : GCC_REG_ACCUM);
++
++ return usecs;
++}
++#else /* GCC_NO_H_CONSTRAINT, gcc >= 4.4 */
++static inline unsigned long __usecs_to_loops(unsigned long usecs,
++ unsigned long lpj)
++{
++ return ((uintx_t)usecs * lpj) >> BITS_PER_LONG;
++}
++#endif
+
+ /*
+ * Division by multiplication: you don't have to worry about
+@@ -50,8 +81,6 @@ static inline void __delay(unsigned long loops)
+
+ static inline void __udelay(unsigned long usecs, unsigned long lpj)
+ {
+- unsigned long lo;
+-
+ /*
+ * The rates of 128 is rounded wrongly by the catchall case
+ * for 64-bit. Excessive precission? Probably ...
+@@ -64,19 +93,7 @@ static inline void __udelay(unsigned long usecs, unsigned long lpj)
+ usecs *= (unsigned long) (((0x8000000000000000ULL / (500000 / HZ)) +
+ 0x80000000ULL) >> 32);
+ #endif
+-
+- if (sizeof(long) == 4)
+- __asm__("multu\t%2, %3"
+- : "=h" (usecs), "=l" (lo)
+- : "r" (usecs), "r" (lpj)
+- : GCC_REG_ACCUM);
+- else if (sizeof(long) == 8)
+- __asm__("dmultu\t%2, %3"
+- : "=h" (usecs), "=l" (lo)
+- : "r" (usecs), "r" (lpj)
+- : GCC_REG_ACCUM);
+-
+- __delay(usecs);
++ __delay(__usecs_to_loops(usecs, lpj));
+ }
+
+ #define __udelay_val cpu_data[raw_smp_processor_id()].udelay_val
+diff --git a/include/asm-mips/div64.h b/include/asm-mips/div64.h
+index 5f7dcf5..9325185 100644
+--- a/include/asm-mips/div64.h
++++ b/include/asm-mips/div64.h
+@@ -53,6 +53,23 @@
+ (res) = __quot; \
+ __mod; })
+
++/*
++ * __do_divu -- unsigned interger dividing
++ *
++ * handle removal of 'h' constraint in GCC 4.4
++ */
++#ifndef GCC_NO_H_CONSTRAINT /* gcc <= 4.3*/
++#define __do_divu() ({ \
++ __asm__("divu $0, %z2, %z3" \
++ : "=h" (__upper), "=l" (__high) \
++ : "Jr" (__high), "Jr" (__base) \
++ : GCC_REG_ACCUM); })
++#else /* gcc >= 4.4 */
++#define __do_divu() ({ \
++ __upper = (uintx_t)__high % __base; \
++ __high = (uintx_t)__high / __base; })
++#endif
++
+ #define do_div(n, base) ({ \
+ unsigned long long __quot; \
+ unsigned long __mod; \
+@@ -67,10 +84,7 @@
+ __upper = __high; \
+ \
+ if (__high) \
+- __asm__("divu $0, %z2, %z3" \
+- : "=h" (__upper), "=l" (__high) \
+- : "Jr" (__high), "Jr" (__base) \
+- : GCC_REG_ACCUM); \
++ __do_divu(); \
+ \
+ __mod = do_div64_32(__low, __upper, __low, __base); \
+ \
+diff --git a/arch/mips/brcmstb/lib/udivdi3.c b/arch/mips/brcmstb/lib/udivdi3.c
+index 49599d6..4d094ab 100644
+--- a/arch/mips/brcmstb/lib/udivdi3.c
++++ b/arch/mips/brcmstb/lib/udivdi3.c
+@@ -198,6 +198,35 @@ __udivmoddi4 (UDItype n, UDItype d, UDItype *rp)
+ n0 = n0 << bm;
+
+ udiv_qrnnd (q0, n1, n2, n1, d1);
++
++#undef umul_ppmm
++
++#if defined (__mips) && W_TYPE_SIZE == 32
++#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
++#define umul_ppmm(w1, w0, u, v) \
++do { \
++UDItype __ll = (UDItype)(u) * (v); \
++w1 = __ll >> 32; \
++w0 = __ll; \
++} while (0)
++#endif
++#endif
++
++
++#if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
++#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
++#define umul_ppmm(w1, w0, u, v) \
++do { \
++typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \
++__ll_UTItype __ll = (__ll_UTItype)(u) * (v); \
++w1 = __ll >> 64; \
++w0 = __ll; \
++} while (0)
++#endif
++#endif
++
++
++
+ umul_ppmm (m1, m0, q0, d0);
+
+ if (m1 > n1 || (m1 == n1 && m0 > n0))
+
--- /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: 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
+Duo's kernel size should be smaller than 2*1024*1024.
+Considering bad block existence, kernel size is recommended to be smaller than 2*1024*1024 - (128*1024*2)
--- /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="bm750"
+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
+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_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=m
+
+#
+# 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=m
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_SMIVGX is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO 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=m
+# 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=m
+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=m
+CONFIG_SQUASHFS=m
+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=m
+# 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=m
+# 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=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)
+@@ -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/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
+require linux-vuplus-2.6.18.inc
+
+PR = "r7"
+
+SRC_URI += "\
+ file://bm750_defconfig \
+ file://linux_bm750_nand.patch;patch=1;pnum=0 \
+ file://linux_bm750_proc.patch;patch=1;pnum=0 \
+ file://linux_bm750_serial.patch;patch=1;pnum=0 \
+ file://linux_bm750_setup.patch;patch=1;pnum=0 \
+ "
--- /dev/null
+DESCRIPTION = "Linux kernel for vuplus"
+LICENSE = "GPL"
+KV = "2.6.18-7.3"
+PV = "2.6.18"
+
+MODULE = "stblinux-2.6.18"
+
+
+SRC_URI_GCC44_PATCH = ${@base_contains('PREFERRED_GCC_VERSION', '4.4.3', 'file://linux_vuplus_gcc_4.4.patch;patch=1;pnum=1', '', d)}
+
+
+SRC_URI = "http://archive.vuplus.com/download/stblinux-${KV}.tar.bz2 \
+ file://linux_vuplus_resource.patch;patch=1;pnum=0 \
+ file://linux_vuplus_arch_makefile.patch;patch=1;pnum=0 \
+ file://linux_vuplus_kobject.patch;patch=1;pnum=0 \
+ file://linux-2.6.18-dvb-frontends.patch;patch=1;pnum=0 \
+ file://linux-2.6.18-dvb-core.patch;patch=1;pnum=0 \
+ file://dvb-include-2.6.18-5.3.patch;patch=1;pnum=0 \
+ "
+
+SRC_URI += ${SRC_URI_GCC44_PATCH}
+
+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}/${MACHINE}_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: 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: 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: 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/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);
++ //memory_size hack for solo
++ mem_size = 0x7000000;
+ #if defined (CONFIG_MIPS_BCM7440) || defined (CONFIG_MIPS_BCM7601) || defined (CONFIG_MIPS_BCM7635)
+
+ upper_mem_ram_size = 0;
--- /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=m
+
+#
+# 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=m
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_SMIVGX is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO 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=m
+# 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=m
+# 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=m
+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=m
+CONFIG_SQUASHFS=m
+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=m
+# 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_15=m
+# 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
--- /dev/null
+require linux-vuplus-2.6.18.inc
+
+PR = "r10"
+
+SRC_URI += "\
+ file://vusolo_defconfig \
+ file://linux-vusolo_nand4.patch;patch=1;pnum=0 \
+ file://linux-vusolo_info.patch;patch=1;pnum=0 \
+ file://linux-vusolo_setup.patch;patch=1;pnum=0 \
+ file://linux-vusolo_romblock.patch;patch=1;pnum=0 \
+ file://linux-vusolo_serial.patch;patch=1;pnum=0 \
+ "
--- /dev/null
+diff --git a/arch/mips/brcmstb/common/cfe_call.c b/arch/mips/brcmstb/common/cfe_call.c
+index 56f2bc9..38c2f77 100644
+--- a/arch/mips/brcmstb/common/cfe_call.c
++++ b/arch/mips/brcmstb/common/cfe_call.c
+@@ -34,6 +34,7 @@
+
+ extern unsigned int cfe_seal;
+
++#if 0 // by doliyu, to fixed mtd block
+ cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
+ { "LINUX_FFS_STARTAD", "LINUX_FFS_SIZE" },
+ { "SPLASH_PART_STARTAD", "SPLASH_PART_SIZE" },
+@@ -45,6 +46,13 @@ cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
+ */
+ { NULL, NULL },
+ };
++#else
++cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
++
++ { NULL, NULL },
++};
++
++#endif
+ EXPORT_SYMBOL(gCfeEnvVarPairs);
+
+ /*
+diff --git a/drivers/mtd/brcmnand/bcm7xxx-nand.c b/drivers/mtd/brcmnand/bcm7xxx-nand.c
+index 6cea6bf..d1cddfd 100644
+--- a/drivers/mtd/brcmnand/bcm7xxx-nand.c
++++ b/drivers/mtd/brcmnand/bcm7xxx-nand.c
+@@ -46,12 +46,13 @@ when who what
+ #include <linux/mtd/brcmnand.h>
+ #include "brcmnand_priv.h"
+
+-#define PRINTK(...)
+-//#define PRINTK printk
++//#define PRINTK(...)
++#define PRINTK printk
+
+ #define DRIVER_NAME "bcm7xxx-nand"
+ #define DRIVER_INFO "Broadcom STB NAND controller"
+
++
+ //#ifdef CONFIG_MTD_PARTITIONS
+ //static const char *part_probes[] = { "cmdlinepart", NULL, };
+ //#endif
+@@ -74,7 +75,9 @@ when who what
+ * start of flash 1f7f_ffff flashSize-8MB rootfs Linux File System
+ */
+ #define SMALLEST_FLASH_SIZE (16<<20)
+-#define DEFAULT_RESERVED_SIZE (8<<20)
++//#define DEFAULT_RESERVED_SIZE (8<<20)
++#define DEFAULT_RESERVED_SIZE (14<<20) //doliyu
++
+ #define DEFAULT_SPLASH_SIZE (1<<20)
+ #define DEFAULT_BBT0_SIZE_MB (1)
+ #define DEFAULT_BBT1_SIZE_MB (4)
+@@ -176,6 +179,7 @@ static struct mtd_partition bcm7XXX_new_partition[] =
+
+ static struct mtd_partition bcm7XXX_old_partition[] =
+ {
++#if 0
+ { 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,8 +193,66 @@ static struct mtd_partition bcm7XXX_old_partition[] =
+ /* 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 /* by doliyu : for splash init*/
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07200000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07200000, size: 4<<20 },
++ { name: "boot", offset: 0x07600000, size: 4<<20 },
++ { name: "splash", offset: 0x07A00000, size: 2<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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},
++ {name: NULL, offset: 0, size: 0}
++ #endif
++};
++
++
++static struct mtd_partition bcm7XXX_marusys_partition[] =
++{
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07400000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07400000, size: 4<<20 },
++ { name: "boot", offset: 0x07800000, size: 4<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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_marusys_splash_partition[] =
++{
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07200000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07200000, size: 4<<20 },
++ { name: "boot", offset: 0x07600000, size: 4<<20 },
++ { name: "splash", offset: 0x07A00000, size: 2<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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;
+
+@@ -198,7 +260,9 @@ static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+ static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_new_partition;
+
+ #else
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
++//static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
++static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_marusys_splash_partition;
++
+ #endif
+
+ struct brcmnand_info {
+@@ -261,7 +325,7 @@ brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int *numParts)
+ /*
+ * Is XOR disabled? if so use the new partition.
+ */
+- if (nandinfo->brcmnand.xor_disable) {
++ if (nandinfo->brcmnand.xor_disable[0]) { //by doliyu
+ bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+
+ if (device_size(mtd) <= (512ULL <<20)) {
+@@ -309,7 +373,7 @@ brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int *numParts)
+
+ 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",
+@@ -375,7 +439,7 @@ print_partition(*numParts);
+ 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("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);
+
+diff --git a/drivers/mtd/brcmnand/brcmnand_base.c b/drivers/mtd/brcmnand/brcmnand_base.c
+index 3bc428a..a43cb1f 100644
+--- a/drivers/mtd/brcmnand/brcmnand_base.c
++++ b/drivers/mtd/brcmnand/brcmnand_base.c
+@@ -537,7 +537,7 @@ static brcmnand_chip_Id brcmnand_chips[] = {
+ .chipId = HYNIX_HY27UT088G2A,
+ .mafId = FLASHTYPE_HYNIX,
+ .chipIdStr = "HYNIX_HY27UT088G2A",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
++ .options = NAND_USE_FLASH_BBT|NAND_SCAN_BI_3RD_PAGE, /* BBT on flash + BI on (last-2) page */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+ .timing1 = 0,
+@@ -550,7 +550,7 @@ static brcmnand_chip_Id brcmnand_chips[] = {
+ .chipId = HYNIX_HY27UAG8T2M,
+ .mafId = FLASHTYPE_HYNIX,
+ .chipIdStr = "HYNIX_HY27UAG8T2M",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
++ .options = NAND_USE_FLASH_BBT|NAND_SCAN_BI_3RD_PAGE, /* BBT on flash + BI on (last-2) page */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+ .timing1 = 0,
+@@ -605,13 +605,43 @@ static const unsigned char ffchars[] = {
+
+ //static unsigned char eccmask[128]; // Will be initialized during probe
+
++//static unsigned char eccmask[128]; // Will be initialized during probe
++
++#define BCHP_NAND_LAST_REG BCHP_NAND_BLK_WR_PROTECT
++static uint32_t brcmnand_registerHoles[] = {
++
++ // 3.3 and earlier
++ 0x281c,
++ 0x2844, 0x284c,
++ 0x285c,
++ 0x2888, 0x288c,
++ 0x28b8, 0x28bc,
++#if CONFIG_MTD_BRCMNAND_VERSION > CONFIG_MTD_BRCMNAND_VERS_3_3
++#error "Not supported in 2.6.18 kernels"
++ 0x28c4, 0x28c8, 0x28cc,
++ 0x2910, 0x2914, 0x2918, 0x291c,
++ 0x2920, 0x2924, 0x2928, 0x292c,
++#endif
++};
++
++// Is there a register at the location
++static int inRegisterHoles(uint32_t reg)
++{
++ int i;
++
++ for (i=0; i < ARRAY_SIZE(brcmnand_registerHoles); i++) {
++ if (reg == brcmnand_registerHoles[i])
++ return 1; // In register hole
++ }
++ return 0; // Not in hole
++}
+
+ static uint32_t brcmnand_ctrl_read(uint32_t nandCtrlReg)
+ {
+ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
+ + nandCtrlReg - BCHP_NAND_REVISION);
+
+- if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_LAST_REG ||
+ (nandCtrlReg & 0x3) != 0) {
+ printk("brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+@@ -625,7 +655,7 @@ static void brcmnand_ctrl_write(uint32_t nandCtrlReg, uint32_t val)
+ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
+ + nandCtrlReg - BCHP_NAND_REVISION);
+
+- if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_LAST_REG ||
+ (nandCtrlReg & 0x3) != 0) {
+ printk( "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+@@ -689,6 +719,30 @@ if (gdebug > 3) printk("%s: offset=%0llx cs=%d ldw = %08x, udw = %08x\n", __FUN
+ return (ldw); //(ldw ^ 0x1FC00000);
+ }
+
++/*
++ * Disable ECC, and return the original ACC register (for restore)
++ */
++uint32_t brcmnand_disable_ecc(void)
++{
++ uint32_t acc0;
++ uint32_t acc;
++
++ /* Disable ECC */
++ acc0 = brcmnand_ctrl_read(BCHP_NAND_ACC_CONTROL);
++ acc = acc0 & ~(BCHP_NAND_ACC_CONTROL_RD_ECC_EN_MASK | BCHP_NAND_ACC_CONTROL_RD_ECC_BLK0_EN_MASK);
++ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++
++ return acc0;
++}
++
++
++void brcmnand_restore_ecc(uint32_t orig_acc0)
++{
++ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, orig_acc0);
++}
++
++ // Restore acc
++
+ #if 1
+ /* Dont delete, may be useful for debugging */
+
+@@ -739,7 +793,7 @@ static void print_config_regs(void)
+ 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))
++#define NUM_NAND_REGS (1+((BCHP_NAND_LAST_REG-BCHP_NAND_REVISION)/4))
+
+ static void print_nand_ctrl_regs(void)
+ {
+@@ -1533,7 +1587,7 @@ void dump_nand_regs(struct brcmnand_chip* chip, loff_t offset, uint32_t pa, int
+ uint32_t reg = BCHP_NAND_REVISION+(i*4);
+ uint32_t regval;
+
+- if (reg == 0x281c) { // No NAND register at 0x281c
++ if (inRegisterHoles(reg)) { // No NAND register at 0x281c
+ regval = 0;
+ }
+ else {
+@@ -1603,6 +1657,7 @@ static int brcmnand_EDU_write_is_complete(struct mtd_info *mtd, int* outp_needBB
+ if (hif_err != 0) // No timeout
+ {
+ uint32_t flashStatus; // = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ int retries = 20;
+
+ #if 0
+ if (!(hif_err & HIF_INTR2_EDU_DONE))
+@@ -1612,11 +1667,7 @@ printk("hif_err=%08x\n", hif_err);
+ /******************* 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;
++
+
+ //Clear interrupt:
+ //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+@@ -1624,28 +1675,36 @@ printk("hif_err=%08x\n", hif_err);
+ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+
+ /* Just to be dead sure */
+- 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);
++ while (!(flashStatus & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK) && retries-- > 0) {
++ // Cant call the ctrl version, we are in ISR context
++ // ret = brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
++ udelay(5000); // Wait for a total of 100 usec
+ //dump_nand_regs(chip, 0, 0, numDumps++);
+- goto out;
++ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+ }
+
+-#ifdef EDU_DEBUG_5
+-/* else */ {
++ //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;
+
+-// 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 */
++ /* sanity check on last cmd status */
++ if ((edu_err & EDU_ERR_STATUS_NandWrite) && !(flashStatus & 0x1)) {
++ int cmd = chip->ctrl_read(BCHP_NAND_CMD_START);
++ printk(KERN_ERR"%s: false EDU write error status (edu_err: 0x%08X, flashStatus: 0x%08X) for NAND CMD %x \n",
++ __FUNCTION__, edu_err, flashStatus, cmd);
++ edu_err = EDU_get_error_status_register();
++ }
++
++ /* we primarily rely on NAND controller FLASH_STATUS bit 0, since EDU error may not be cleared yet */
++ if ((edu_err & EDU_ERR_STATUS_NandWrite) && (flashStatus & 0x01)) {
++ /* // Write is complete, but not successful, flash error, will mark block bad */
+ *outp_needBBT = 1;
+- printk("EDU_write_is_complete(): error 0x%08X\n", edu_err);
+- ret = 0;
++ printk(KERN_ERR"%s: flash write error (edu_err: 0x%08X, flashStatus: 0x%08X)\n",
++ __FUNCTION__, edu_err, flashStatus);
++ ret = 1; // Write is complete, but not successful
++
+ goto out;
+ }
+ else if (edu_err) {
+@@ -1743,6 +1802,42 @@ printk("%s: AUTO: oob=%p, chip->oob_poi=%p, ooboffs=%d, len=%d, bytes=%d, boffs=
+ }
+
+
++
++
++#define DEBUG_UNCERR
++#ifdef DEBUG_UNCERR
++static uint32_t uncErrOob[7];
++static u_char uncErrData[512];
++#endif
++
++void brcmnand_post_mortem_dump(struct mtd_info* mtd, loff_t offset)
++{
++ int i;
++
++ printk("%s at offset %llx\n", __FUNCTION__, offset);
++ dump_stack();
++
++ printk("NAND registers snapshot \n");
++ for (i=0; i<NUM_NAND_REGS; i++) {
++ uint32_t reg = BCHP_NAND_REVISION+(i*4);
++ uint32_t regval;
++
++ if (inRegisterHoles(reg)) { // No NAND register at 0x281c
++ regval = 0;
++ }
++ else {
++ regval = brcmnand_ctrl_read(reg);
++ }
++ if ((i % 4) == 0) {
++ printk("\n%08x:", reg);
++ }
++ printk(" %08x", regval);
++ }
++
++}
++
++
++
+ /*
+ * Returns 0 on success
+ * Expect a controller read was done before hand, and that the OOB data are read into NAND registers.
+@@ -1769,7 +1864,7 @@ static int brcmnand_handle_false_read_ecc_unc_errors(
+ //u_char oobbuf[16];
+ int erased, allFF;
+ int i;
+- uint32_t acc, acc0;
++ uint32_t acc0;
+ //int valid;
+
+ /*
+@@ -1779,19 +1874,17 @@ static int brcmnand_handle_false_read_ecc_unc_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);
++ acc0 = brcmnand_disable_ecc();
+
+ chip->ctrl_writeAddr(chip, offset, 0);
+ PLATFORM_IOFLUSH_WAR();
+- chip->ctrl_write(BCHP_NAND_CMD_START, OP_SPARE_AREA_READ);
++ chip->ctrl_write(BCHP_NAND_CMD_START, OP_PAGE_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);
++ brcmnand_restore_ecc(acc0);
+ #endif
+
+ for (i = 0; i < 4; i++) {
+@@ -1815,8 +1908,10 @@ print_oobbuf(p8, 16);
+ if (!erased) {
+ printk("p8[%d]=%02x\n", i, p8[i]);
+ break;
++ }
+ }
+- }
++
++
+ 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,
+@@ -1847,6 +1942,25 @@ chip->eccOobSize, chip->eccbytes, erased, allFF);}
+ /* Real error: Disturb read returns uncorrectable errors */
+ ret = -EBADMSG;
+ if (gdebug > 3 ) {printk("<-- %s: ret -EBADMSG\n", __FUNCTION__);}
++
++#ifdef DEBUG_UNCERR
++
++ // Copy the data buffer
++ brcmnand_from_flash_memcpy32(chip, uncErrData, offset, mtd->eccsize);
++ for (i = 0; i < 4; i++) {
++ uncErrOob[i] = p32[i];
++ }
++
++ printk("%s: Uncorrectable error at offset %llx\n", __FUNCTION__, offset);
++
++ printk("Data:\n");
++ print_databuf(uncErrData, mtd->eccsize);
++ printk("Spare Area\n");
++ print_oobbuf((u_char*) uncErrOob, 16);
++
++ brcmnand_post_mortem_dump(mtd, offset);
++
++#endif
+ }
+
+ return ret;
+@@ -2027,16 +2141,14 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ struct brcmnand_chip* chip = mtd->priv;
+ static uint32_t ucdata[128];
+ u_char* uncorr_data = (u_char*) ucdata;
+- uint32_t acc, acc0;
++ uint32_t acc0;
+ int valid;
+ unsigned long irqflags;
+
+ int ret = 0, retries=2;
+
+ /* 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);
++ acc0 = brcmnand_disable_ecc();
+
+ while (retries >= 0) {
+ // Resubmit the read-op
+@@ -2070,7 +2182,7 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ }
+
+ if (retries < 0) {
+- return ret;
++ goto restore_ecc;
+ }
+
+ // Reread the uncorrected buffer.
+@@ -2098,8 +2210,10 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ offset, inp_hwECC[0], inp_hwECC[1], inp_hwECC[2],
+ inoutp_swECC[0], inoutp_swECC[1], inoutp_swECC[2]);
+ }
++
++restore_ecc:
+ // Restore acc
+- brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++ brcmnand_restore_ecc(acc0);
+ return ret;
+ }
+ #endif
+@@ -2432,15 +2546,22 @@ brcmnand_edu_read_comp_intr(struct mtd_info* mtd,
+ 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 retries=20;
+
+ if (intr_status & HIF_INTR2_EDU_ERR) {
+ printk("%s: Should not call me with EDU ERR\n", __FUNCTION__);
+ BUG();
+ }
+ 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();
++ while (!(intfc_status & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK) && retries > 0) {
++ retries--;
++ udelay(5); // NAND guaranteed to finish read within 90us, this should be plenty of time
++ intfc_status = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ }
++ if (retries <= 0) {
++ printk("%s: Impossible, HIF_INTR2_CTRL_READY already asserted, intr_status=%08x, offset=%llx\n",
++ __FUNCTION__, intr_status, offset);
++ //BUG(); Should assert here, but don't want to crash. HW guy guaranteed that it is set!!!!
+ }
+
+ // Remember last good sector read. Needed for HIF_INTR2 workaround.
+@@ -3905,6 +4026,7 @@ static int brcmnand_refresh_blk(struct mtd_info *mtd, loff_t from)
+ * EDU ISR Implementation
+ */
+
++extern void EDU_issue_command(uint32_t dram_addr, uint32_t ext_addr,uint8 cmd);
+
+ /*
+ * Submit the read op, then return immediately, without waiting for completion.
+@@ -4437,7 +4559,7 @@ static int brcmnand_do_read_ops(struct mtd_info *mtd, loff_t from,
+ 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);
++ numPages = min(MAX_JOB_QUEUE_SIZE, (int) (readlen>>chip->page_shift));
+
+ // Only do Batch mode if all 3 conditions are satisfied.
+ if (!aligned || !buffer_aligned || numPages <= 1) {
+@@ -4935,22 +5057,26 @@ if (gdebug > 3) printk("-->%s: addr=%0llx\n", __FUNCTION__, addr);
+ * (2) OOB area is included in ECC calculation for BCH, so no need to check it
+ * separately.
+ */
+- if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- return 0;
+- }
++
+
+ #if 1
+ page = ((uint64_t) addr) >> chip->page_shift;
+ // Must read entire page
+ ret = chip->read_page(mtd, vbuf, oobbuf, page);
+ if (ret) {
+- printk(KERN_ERR "%s: brcmnand_read_page at %08x failed ret=%d\n",
++ printk(KERN_ERR "%s: read_page at %08x failed ret=%d\n",
+ __FUNCTION__, (unsigned int) addr, ret);
++ brcmnand_post_mortem_dump(mtd, addr);
+ return ret;
+ }
+
++
+ #endif
+
++ if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
++ return ret; // We won't verify the OOB if not Hamming
++ }
++
+ /*
+ * If there are no Input Buffer, there is nothing to verify.
+ * Reading the page should be enough.
+@@ -5087,6 +5213,7 @@ printk("-->%s, offset=%0llx\n", __FUNCTION__, offset);}
+ if (ret < 0) {
+ printk(KERN_ERR "%s: brcmnand_posted_write_cache failed at offset=%0llx, ret=%d\n",
+ __FUNCTION__, offset + dataWritten, ret);
++ dataWritten = 0;
+ return ret;
+ }
+ dataWritten += chip->eccsize;
+@@ -5142,7 +5269,7 @@ printk("-->%s, page=%0llx\n", __FUNCTION__, page);}
+ #endif
+
+
+- if (unlikely(!EDU_buffer_OK(inp_buf, EDU_WRITE)))
++ if (unlikely(!EDU_buffer_OK((void*) 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 */
+@@ -5186,6 +5313,9 @@ if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, tryin
+ while (!list_empty(&gJobQ.jobQ)) {
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+ ret = ISR_wait_for_queue_completion();
++ if (ret) {
++ dataWritten = 0;
++ }
+ spin_lock_irqsave(&gJobQ.lock, flags);
+ }
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+@@ -5267,6 +5397,9 @@ if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, tryin
+ while (!list_empty(&gJobQ.jobQ)) {
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+ ret = ISR_wait_for_queue_completion();
++ if (ret) {
++ dataWritten = 0;
++ }
+ spin_lock_irqsave(&gJobQ.lock, flags);
+ }
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+@@ -5428,7 +5561,7 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+ /*
+ * Group several pages for submission for small page NAND
+ */
+- numPages = min(MAX_JOB_QUEUE_SIZE, writelen>>chip->page_shift);
++ numPages = min(MAX_JOB_QUEUE_SIZE, (int) (writelen>>chip->page_shift));
+
+ // If Batch mode
+ if (buffer_aligned && numPages > 1 && chip->pageSize == chip->eccsize) {
+@@ -5455,6 +5588,10 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+ }
+
+ ret = brcmnand_isr_write_pages(mtd, buf, chip->oob_poi, realpage, numPages);
++ if (ret) {
++ ops->retlen = 0;
++ return ret;
++ }
+
+ }
+
+@@ -5520,8 +5657,8 @@ printk("-->%s, offset=%0llx\n", __FUNCTION__, to);}
+
+ /* Do not allow writes past end of device */
+ if (unlikely((to + len) > device_size(mtd))) {
+- DEBUG(MTD_DEBUG_LEVEL0, "%s: ", __FUNCTION__,
+- "Attempt to write beyond end of device\n");
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write beyond end of device\n",
++ __FUNCTION__);
+ printk("Attempt to write beyond end of device\n");
+ }
+ if (!len)
+@@ -5674,8 +5811,8 @@ printk("-->%s, offset=%0llx, len=%08x\n", __FUNCTION__, to, (int) ops->len);}
+
+ if (unlikely((to + ops->len) > device_size(mtd)))
+ {
+- DEBUG(MTD_DEBUG_LEVEL0, "%s: ", __FUNCTION__,
+- "Attempt to write beyond end of device\n");
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write beyond end of device\n",
++ __FUNCTION__);
+ printk("Attempt to write beyond end of device\n");
+ return -EINVAL;
+ }
+@@ -6137,8 +6274,9 @@ if (gdebug > 3 ) {printk( "%s: Erase past end of device, instr_addr=%016llx, in
+ */
+ /* Check if we have a bad block, we do not erase bad blocks */
+ if (brcmnand_block_checkbad(mtd, addr, 0, allowbbt)) {
+- printk (KERN_ERR "%s: attempt to erase a bad block at addr 0x%08x\n", __FUNCTION__, (unsigned int) addr);
++ printk (KERN_ERR "%s: attempt to erase a bad block at addr 0x%llx\n", __FUNCTION__, addr);
+ instr->state = MTD_ERASE_FAILED;
++dump_stack();
+ goto erase_one_block;
+ }
+
+@@ -6898,11 +7036,11 @@ static int brcmnand_probe(struct mtd_info *mtd, unsigned int chipSelect)
+ if (chip->cellinfo) {
+ unsigned long devIdExt = chip->ctrl_read(BCHP_NAND_FLASH_DEVICE_ID_EXT);
+ unsigned char devId5thByte = (devIdExt & 0xff000000) >> 24;
+- unsigned int nbrPlanes;
+- unsigned int planeSizeMB, chipSizeMB, nandConfigChipSize;
++ unsigned int nbrPlanes = 0;
++ unsigned int planeSizeMB = 0, chipSizeMB, nandConfigChipSize;
+ unsigned char devId4thdByte = (chip->device_id & 0xff);
+- unsigned int pageSize, pageSizeBits;
+- unsigned int blockSize, blockSizeBits;
++ unsigned int pageSize = 0, pageSizeBits = 0;
++ unsigned int blockSize = 0, blockSizeBits = 0;
+ //unsigned int oobSize;
+
+
+@@ -7043,7 +7181,7 @@ PRINTK("nandConfigChipSize = %04x\n", nandConfigChipSize);
+ else if ((brcmnand_chips[i].idOptions & BRCMNAND_ID_EXT_BYTES_TYPE2) ==
+ BRCMNAND_ID_EXT_BYTES_TYPE2)
+ {
+- unsigned int oobSize, oobSizePerPage;
++ unsigned int oobSize, oobSizePerPage = 0;
+ //uint32_t nandconfig, chipSizeShift;
+
+ /*---------------- 4th ID byte: page size, block size and OOB size ---------------- */
+@@ -7663,11 +7801,6 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ return (-EINVAL);
+ cs = chip->CS[chip->numchips - 1];
+ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+-
+-
+-
+-
+-
+ }
+
+ /*
+@@ -7678,6 +7811,7 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ printk("NAND_CS_NAND_XOR=%08x\n", nand_xor);
+ //
+ #ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
++#error ""
+ /* 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);
+@@ -7699,6 +7833,11 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ printk("Disabling XOR on CS#%1d\n", chip->CS[i]);
+ chip->xor_disable[i] = 1;
+ }
++ else
++ {
++ printk("Enable XOR on CS#%1d\n", chip->CS[i]);
++ chip->xor_disable[i] = 0;
++ }
+ }
+ }
+ #else
+@@ -8021,7 +8160,7 @@ printk("Corrected ECC to Hamming for SLC flashes: ACC_CONTROL = %08lx from %08lx
+ int corr_threshold;
+
+ if ( chip->ecclevel >= BRCMNAND_ECC_BCH_4) {
+- corr_threshold = 2;
++ corr_threshold = 3; // Changed from 2, since refresh is costly and vulnerable to AC-ON/OFF tests.
+ }
+ else {
+ corr_threshold = 1; // 1 , default for Hamming
+@@ -8227,6 +8366,13 @@ printk(KERN_INFO "ECC layout=%s\n", "brcmnand_oob_bch8_4k");
+ chip->ecclayout = &brcmnand_oob_bch8_4k;
+ break;
+ }
++ else if (NAND_IS_MLC(chip) && mtd->oobsize >= 216 &&
++ chip->ecclevel == BRCMNAND_ECC_BCH_4 && mtd->writesize == 4096)
++ {
++printk(KERN_INFO "ECC layout=%s\n", "brcmnand_oob_bch4_4k");
++ chip->ecclayout = &brcmnand_oob_bch4_4k;
++ break;
++ }
+
+ printk(KERN_WARNING "No oob scheme defined for oobsize %d\n", mtd->oobsize);
+ BUG();
+@@ -8389,8 +8535,8 @@ printk(KERN_INFO "%s, eccsize=%d, writesize=%d, eccsteps=%d, ecclevel=%d, eccbyt
+
+
+
+-#ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
+-gdebug=4;
++#if 0
++//gdebug=4;
+ printk("-----------------------------------------------------\n");
+ print_nand_ctrl_regs();
+ printk("-----------------------------------------------------\n");
+@@ -8411,7 +8557,6 @@ gdebug=4;
+ }
+ #endif
+
+-//gdebug=0;
+ PRINTK("%s 99\n", __FUNCTION__);
+
+ return err;
+diff --git a/drivers/mtd/brcmnand/brcmnand_bbt.c b/drivers/mtd/brcmnand/brcmnand_bbt.c
+index 91e8510..d8924de 100644
+--- a/drivers/mtd/brcmnand/brcmnand_bbt.c
++++ b/drivers/mtd/brcmnand/brcmnand_bbt.c
+@@ -67,6 +67,7 @@ when who what
+ */
+
+
++#include <linux/kernel.h>
+ #include <linux/slab.h>
+ #include <linux/types.h>
+ #include <linux/mtd/mtd.h>
+@@ -76,6 +77,7 @@ when who what
+ #include <linux/bitops.h>
+ #include <linux/delay.h>
+ #include <linux/vmalloc.h>
++#include <linux/syscalls.h>
+
+ #include "brcmnand_priv.h"
+
+@@ -84,10 +86,50 @@ when who what
+ #define PRINTK(...)
+ //#define PRINTK printk
+
++char brcmNandBBTMsg[1024];
++// #define BBT_DEBUG
++#ifdef BBT_DEBUG // Bypass quiet flag
++
++static int do_printk = 0; // To be turned on when we hit BBT out of space
++asmlinkage int bbt_vprintk(const char *fmt, va_list args)
++{
++ //unsigned long flags;
++ int printed_len;
++ //char *p;
++ //static char printk_buf[1024];
++ //static int log_level_unknown = 1;
++
++ extern void uart_puts(const char *);
++
++ printed_len = vsprintf(brcmNandBBTMsg, fmt, args);
++ uart_puts(brcmNandBBTMsg);
++
++ return printed_len;
++
++}
++asmlinkage int bbt_printk(const char *fmt, ...)
++{
++ va_list args;
++ int r;
++
++ if (!do_printk)
++ return 0;
++
++ va_start(args, fmt);
++ r = bbt_vprintk(fmt, args);
++ va_end(args);
++
++ return r;
++}
++
++#define PRINTK bbt_printk
++//#define printk bbt_printk
++
++#endif
++
+ extern int gClearBBT;
+ extern int gdebug;
+
+-char brcmNandBBTMsg[1024];
+
+ /* brcmnand=
+ * rescan: 1. Rescan for bad blocks, and update existing BBT
+@@ -204,7 +246,7 @@ __FUNCTION__,i, i, td->pattern[i], td->offs+i, p[td->offs + i]);
+ * Read the bad block table starting from page.
+ *
+ */
+-static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int num,
++static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, uint64_t page, int num,
+ int bits, int offs, int reserved_block_code)
+ {
+ int res, i, j, act = 0;
+@@ -212,7 +254,9 @@ static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int
+ size_t retlen, len, totlen;
+ loff_t from;
+ uint8_t msk = (uint8_t) ((1 << bits) - 1);
+-
++#ifdef BBT_DEBUG
++int save_do_printk = do_printk;
++#endif
+ totlen = (num * bits) >> 3;
+ from = ((loff_t)page) << this->page_shift;
+
+@@ -222,6 +266,8 @@ static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int
+ this->ctrl_write(BCHP_NAND_ECC_CORR_ADDR, 0);
+ this->ctrl_write(BCHP_NAND_ECC_UNC_ADDR, 0);
+
++//do_printk=1;
++
+
+ while (totlen) {
+ len = min (totlen, (size_t) (1 << this->bbt_erase_shift));
+@@ -229,10 +275,14 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ res = mtd->read(mtd, from, len, &retlen, buf);
+ if (res < 0) {
+ if (retlen != len) {
+- printk (KERN_INFO "brcmnand_bbt: Error reading bad block table\n");
++ printk (KERN_ERR "%s: Error reading bad block table, retlen=%d\n", __FUNCTION__);
+ return res;
+ }
+- printk (KERN_WARNING "brcmnand_bbt: ECC error while reading bad block table\n");
++ printk (KERN_ERR "%s: ECC error while reading bad block table\n", __FUNCTION__);
++PRINTK ("%s: ECC error while reading bad block table, res=%d\n", __FUNCTION__, res);
++
++ /* THT 11/10/09: If read fails, we should ignore the data, so return w/o analyzing it */
++ return res;
+ }
+
+ /* Analyse data */
+@@ -245,6 +295,8 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ if (reserved_block_code && (tmp == reserved_block_code)) {
+ printk (KERN_DEBUG "nand_read_bbt: Reserved block at 0x%08x\n",
+ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
++PRINTK ( "nand_read_bbt: Reserved block at 0x%08x\n",
++ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06);
+ mtd->ecc_stats.bbtblocks++;
+ continue;
+@@ -253,6 +305,8 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ * message to MTD_DEBUG_LEVEL0 */
+ printk (KERN_DEBUG "nand_read_bbt: Bad block at 0x%08x\n",
+ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
++PRINTK ( "nand_read_bbt: Bad block at 0x%08x\n",
++ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ /* Factory marked bad or worn out ? */
+ if (tmp == 0)
+ this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06);
+@@ -261,8 +315,11 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ mtd->ecc_stats.badblocks++;
+ }
+ }
++#ifdef DEBUG_BBT
++do_printk=save_do_printk;
++#endif
+ totlen -= len;
+- from += len;
++ from += (loff_t)len;
+ }
+ return 0;
+ }
+@@ -283,6 +340,12 @@ static int brcmnand_read_abs_bbt (struct mtd_info *mtd, uint8_t *buf, struct nan
+ struct brcmnand_chip *this = mtd->priv;
+ int res = 0, i;
+ int bits;
++#ifdef DEBUG_BBT
++int save_do_printk = do_printk;
++do_printk = 1;
++#endif
++PRINTK("-->brcmnand_read_abs_bbt td=%c%c%c%c, td->pages[0]=%llx\n",
++ td->pattern[0], td->pattern[1],td->pattern[2], td->pattern[3], td->pages[0]);
+
+ PRINTK("-->brcmnand_read_abs_bbt\n");
+ bits = td->options & NAND_BBT_NRBITS_MSK;
+@@ -293,6 +356,9 @@ PRINTK("-->brcmnand_read_abs_bbt\n");
+ res = brcmnand_read_bbt (mtd, buf, td->pages[i], this->chipSize >> this->bbt_erase_shift, bits, offs, td->reserved_block_code);
+ if (res) {
+ PRINTK("<-- brcmnand_read_abs_bbt ret = %d\n", res);
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return res;
+ }
+ offs += this->chipSize >> (this->bbt_erase_shift + 2);
+@@ -302,10 +368,16 @@ PRINTK("<-- brcmnand_read_abs_bbt ret = %d\n", res);
+ (uint32_t) (this->mtdSize >> this->bbt_erase_shift), bits, 0, td->reserved_block_code);
+ if (res) {
+ PRINTK("<-- brcmnand_read_abs_bbt 2 ret = %d\n", res);
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return res;
+ }
+ }
+ PRINTK("<-- brcmnand_read_abs_bbt ret 0\n");
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return 0;
+ }
+
+@@ -316,15 +388,23 @@ static int brcmnand_scan_read_raw(struct mtd_info *mtd, uint8_t *buf, loff_t off
+ size_t len)
+ {
+ struct mtd_oob_ops ops;
++ int ret;
+
+ ops.mode = MTD_OOB_RAW;
+ ops.ooboffs = 0;
+ ops.ooblen = mtd->oobsize;
+- ops.oobbuf = buf;
++ ops.oobbuf = &buf[mtd->writesize];
+ ops.datbuf = buf;
+ ops.len = len;
+
+- return mtd->read_oob(mtd, offs, &ops);
++ ret = mtd->read_oob(mtd, offs, &ops);
++
++PRINTK("%s: Reading BBT Sig @%0llx, OOB=\n", __FUNCTION__, offs);
++#ifdef DEBUG_BBT
++if (do_printk || gdebug)
++ print_oobbuf(ops.oobbuf, mtd->oobsize);
++#endif
++ return ret;
+ }
+
+ /*
+@@ -377,7 +457,9 @@ PRINTK("read primary version\n");
+ brcmnand_scan_read_raw(mtd, buf, td->pages[0] << this->page_shift,
+ mtd->writesize);
+ td->version[0] = buf[mtd->writesize + td->veroffs];
+- printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
++ printk(KERN_DEBUG "Bad block table at page %llx, version 0x%02X\n",
++ td->pages[0], td->version[0]);
++PRINTK( "Bad block table at page %llx, version 0x%02X\n",
+ td->pages[0], td->version[0]);
+ }
+
+@@ -387,8 +469,10 @@ PRINTK("read mirror version\n");
+ brcmnand_scan_read_raw(mtd, buf, md->pages[0] << this->page_shift,
+ mtd->writesize);
+ md->version[0] = buf[mtd->writesize + md->veroffs];
+- printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
++ printk(KERN_DEBUG "Bad block table at page %llx, version 0x%02X\n",
+ md->pages[0], md->version[0]);
++PRINTK( "Bad block table at page %llx, version 0x%02X\n",
++ td->pages[0], td->version[0]);
+ }
+ PRINTK("<-- %s\n", __FUNCTION__);
+ return 1;
+@@ -434,7 +518,7 @@ static int brcmnand_scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr
+ int pagesPerBlock = mtd->erasesize/mtd->writesize;
+
+ dir = -1;
+- offs += (pagesPerBlock -1 ) * mtd->writesize;
++ offs += (loff_t)((pagesPerBlock -1 ) * mtd->writesize);
+ }
+ ops.len = mtd->oobsize;
+ ops.ooblen = mtd->oobsize;
+@@ -444,19 +528,26 @@ static int brcmnand_scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr
+ ops.mode = MTD_OOB_PLACE;
+
+ for (j=0; j < len; j++) {
+- /*
+- * Read the full oob until read_oob is fixed to
+- * handle single byte reads for 16 bit
+- * buswidth
+- */
+ ret = mtd->read_oob(mtd, offs, &ops);
++ if (ret == -EBADMSG) {// Uncorrectable errors
++ uint32_t acc0;
++
++ // Disable ECC
++ acc0 = brcmnand_disable_ecc();
++
++ // Re-read the OOB
++ ret = mtd->read_oob(mtd, offs, &ops);
++
++ // Enable ECC back
++ brcmnand_restore_ecc(acc0);
++ }
+ if (ret)
+ return ret;
+
+ if (check_short_pattern(buf, bd))
+ return 1;
+
+- offs += (dir * mtd->writesize);
++ offs += (loff_t)(dir * mtd->writesize);
+ }
+ return 0;
+ }
+@@ -489,8 +580,14 @@ PRINTK("-->brcmnand_create_bbt, bbt_erase_shift=%d, this->page_shift=%d\n", this
+ if (bd->options & NAND_BBT_SCANALLPAGES)
+ len = 1 << (this->bbt_erase_shift - this->page_shift);
+ else { // Also for MLC
+- if (bd->options & NAND_BBT_SCAN2NDPAGE)
+- len = 2;
++ if (bd->options & NAND_BBT_SCAN2NDPAGE) {
++ if (this->options & NAND_SCAN_BI_3RD_PAGE) {
++ len = 3; // For Hynix MLC chips
++ }
++ else {
++ len = 2;
++ }
++ }
+ else
+ len = 1;
+ }
+@@ -546,7 +643,7 @@ from, bd->options, mtd64_ll_low(startblock), mtd64_ll_low(numblocks));
+ }
+
+ i += 2;
+- from += (1 << this->bbt_erase_shift);
++ from += (loff_t)(1 << this->bbt_erase_shift);
+ }
+ return 0;
+ }
+@@ -577,6 +674,7 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ int scanlen = mtd->writesize + mtd->oobsize;
+ int bbtblocks;
+ int blocktopage = this->bbt_erase_shift - this->page_shift;
++ int ret = 0;
+
+ /* Search direction top -> down ? */
+ if (td->options & NAND_BBT_LASTBLOCK) {
+@@ -604,15 +702,22 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ for (i = 0; i < chips; i++) {
+ /* Reset version information */
+ td->version[i] = 0;
+- td->pages[i] = -1;
++ td->pages[i] = BBT_NULL_PAGE;
+ /* Scan the maximum number of blocks */
+ for (block = 0; block < td->maxblocks; block++) {
+
+- int actblock = startblock + dir * block;
++ int64_t actblock = startblock + dir * block;
+ loff_t offs = (uint64_t) actblock << this->bbt_erase_shift;
+
++
+ /* Read first page */
+- brcmnand_scan_read_raw(mtd, buf, offs, mtd->writesize);
++ ret = brcmnand_scan_read_raw(mtd, buf, offs, mtd->writesize);
++
++ /* Here if the read routine returns -77 then the BBT data is invalid, ignore it */
++
++ // Ignore BBT if not there.
++ if (ret)
++ continue;
+ if (!check_pattern(buf, scanlen, mtd->writesize, td)) {
+ td->pages[i] = actblock << blocktopage;
+ if (td->options & NAND_BBT_VERSION) {
+@@ -625,10 +730,12 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ }
+ /* Check, if we found a bbt for each requested chip */
+ for (i = 0; i < chips; i++) {
+- if (td->pages[i] == -1)
+- printk (KERN_WARNING "Bad block table not found for chip %d\n", i);
++ if (td->pages[i] == BBT_NULL_PAGE)
++ printk (KERN_WARNING "Bad block table %c%c%c%c not found for chip %d\n",
++ td->pattern[0], td->pattern[1], td->pattern[2], td->pattern[3], i);
++
+ else
+- printk(KERN_DEBUG "Bad block table found at page %d, version 0x%02X\n", td->pages[i],
++ printk(KERN_DEBUG "Bad block table found at page %llx, version 0x%02X\n", td->pages[i],
+ td->version[i]);
+ }
+ return 0;
+@@ -674,6 +781,8 @@ static int brcmnand_search_read_bbts (struct mtd_info *mtd, uint8_t *buf,
+ * for BBT.
+ *
+ */
++// 0 == OK, 1 = outofspace for BBT0, 2=outofspace for BBT1
++static int outofspace_bbt = 0;
+ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ struct nand_bbt_descr *td, struct nand_bbt_descr *md,
+ int chipsel)
+@@ -682,7 +791,7 @@ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ struct erase_info einfo;
+ int i, j, res, chip = 0, skip, dir;
+ uint32_t bits, offs, sft, sftmsk, bbtoffs;
+- uint64_t startblock, numblocks, page, i64;
++ int64_t startblock, numblocks, page, i64;
+ int nrchips, pageoffs, ooboffs;
+ uint8_t msk[4];
+ uint8_t rcode = td->reserved_block_code;
+@@ -690,6 +799,7 @@ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ loff_t to;
+ struct mtd_oob_ops ops;
+
++bbt_outofspace_retry:
+
+ DEBUG(MTD_DEBUG_LEVEL3, "-->%s\n", __FUNCTION__);
+ ops.ooblen = mtd->oobsize;
+@@ -714,7 +824,8 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s\n", __FUNCTION__);
+ nrchips = 1;
+ }
+
+-PRINTK("numblocks=%d, nrchips=%d\n", numblocks, nrchips);
++PRINTK("%s Creating %c%c%c%c numblocks=%d, nrchips=%d, td->pages[0]=%llx\n",
++__FUNCTION__, td->pattern[0],td->pattern[1], td->pattern[2], td->pattern[3] , numblocks, nrchips, td->pages[0]);
+
+ /* Loop through the chips */
+ for (; chip < nrchips; chip++) {
+@@ -723,7 +834,7 @@ PRINTK("numblocks=%d, nrchips=%d\n", numblocks, nrchips);
+ * This applies for absolute placement too, as we have the
+ * page nr. in td->pages.
+ */
+- if (td->pages[chip] != -1LL) {
++ if (td->pages[chip] != BBT_NULL_PAGE) {
+ page = td->pages[chip];
+ PRINTK("There is already a version of the table, go ahead and write it\n");
+ goto write;
+@@ -741,11 +852,12 @@ PRINTK("There is already a version of the table, go ahead and write it\n");
+ skip = 0;
+
+ write_retry:
+-printk("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
++PRINTK("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
+ __FUNCTION__, startblock, dir, td->maxblocks, skip);
+
+ for (i = skip; i < td->maxblocks; i++) {
+- uint64_t block = startblock + dir * i;
++ uint64_t block = startblock + (int64_t) (dir * i);
++ // THT One byte contains 4 set of 2-bits, so divide block by 4 to index the BBT byte
+ uint32_t blockindex = (uint32_t) (block >> 2);
+
+ /* Check, if the block is bad */
+@@ -753,18 +865,36 @@ printk("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
+ PRINTK("%s: Checking BBT: i=%d, block=%0llx, BBT=%08x\n",
+ __FUNCTION__, i, block, this->bbt[blockindex]);
+
+- switch ((this->bbt[blockindex] >>
+- (2 * (block & 0x03))) & 0x03) {
++ // THT: bbt[blockindex] is the byte we are looking for, now get the 2 bits that
++ // is the BBT for the block (Shift (0,1,2,3) *2 positions depending on the block modulo 4)
++ switch ((this->bbt[blockindex] >> (2 * (block & 0x03)))
++ & 0x03) {
+ case 0x01:
+ case 0x03:
+ continue;
+ }
+ page = block << (this->bbt_erase_shift - this->page_shift);
++
++PRINTK("%s: Checking BBT2: page=%llx, md->pages[chip]=%llx\n",
++ __FUNCTION__, page, md->pages[chip]);
++
+ /* Check, if the block is used by the mirror table */
+ if (!md || md->pages[chip] != page)
+ goto write;
+ }
+- printk (KERN_ERR "No space left to write bad block table\n");
++
++#ifdef DEBUG_BBT
++ if (!do_printk) { // If we get here then turn on debugging and retry
++ do_printk=1;
++ chip = 0;
++ len = 0;
++ uint8_t rcode = td->reserved_block_code;
++ goto bbt_outofspace_retry;
++ }
++#endif
++ printk (KERN_ERR "No space left to write bad block table %c%c%c%c\n",
++ td->pattern[0], td->pattern[1], td->pattern[2], td->pattern[3]);
++ brcmnand_post_mortem_dump(mtd, page<<this->page_shift);
+ return -ENOSPC;
+ write:
+
+@@ -840,6 +970,11 @@ PRINTK("%s: Not NAND_BBT_SAVECONTENT\n", __FUNCTION__);
+ ooboffs = len;
+ /* Pattern is located in oob area of first page */
+ memcpy(&buf[ooboffs + td->offs], td->pattern, td->len);
++
++ // Write the version number (1 byte)
++ if (td->options & NAND_BBT_VERSION) {
++ buf[ooboffs + td->veroffs]=td->version[0];
++ }
+ }
+
+ /* walk through the memory table */
+@@ -955,21 +1090,30 @@ static int brcmnand_check_create (struct mtd_info *mtd, uint8_t *buf, struct nan
+ rd2 = NULL;
+ /* Per chip or per device ? */
+ chipsel = (td->options & NAND_BBT_PERCHIP) ? i : -1;
++
++ /*
++ * THT: Reset version to 0 if 0xff
++ */
++ if ((td->options & NAND_BBT_VERSION) && (td->version[i]==0xff) && td->pages[i] != BBT_NULL_PAGE)
++ td->version[i] = 0;
++ if ((md->options & NAND_BBT_VERSION) && (md->version[i]==0xff) && md->pages[i] != BBT_NULL_PAGE)
++ md->version[i] = 0;
++
+ /* Mirrored table available ? */
+ if (md) {
+- if (td->pages[i] == -1 && md->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE && md->pages[i] == BBT_NULL_PAGE) {
+ writeops = 0x03;
+ goto create;
+ }
+
+- if (td->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE) {
+ rd = md;
+ td->version[i] = md->version[i];
+ writeops = 1;
+ goto writecheck;
+ }
+
+- if (md->pages[i] == -1) {
++ if (md->pages[i] == BBT_NULL_PAGE) {
+ rd = td;
+ md->version[i] = td->version[i];
+ writeops = 2;
+@@ -996,7 +1140,7 @@ static int brcmnand_check_create (struct mtd_info *mtd, uint8_t *buf, struct nan
+ goto writecheck;
+
+ } else {
+- if (td->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE) {
+ writeops = 0x01;
+ goto create;
+ }
+@@ -1015,25 +1159,46 @@ create:
+ if (md)
+ md->version[i] = 1;
+ writecheck:
++ res = 0;
++
+ /* read back first ? */
+- if (rd)
+- brcmnand_read_abs_bbt (mtd, buf, rd, chipsel);
++ if (rd) {
++ res = brcmnand_read_abs_bbt (mtd, buf, rd, chipsel);
++ }
+ /* If they weren't versioned, read both. */
+- if (rd2)
+- brcmnand_read_abs_bbt (mtd, buf, rd2, chipsel);
++ if (rd2) {
++ if (res != 0) {
++ int bbtlen = (uint32_t) (this->mtdSize >> (this->bbt_erase_shift + 2));
++ /* Clear the in-memory BBT first */
++PRINTK("%s: Discarding previously read BBT %c%c%c%c, res=%d\n",
++__FUNCTION__, rd->pattern[0], rd->pattern[1], rd->pattern[2], rd->pattern[3], res);
++ memset(this->bbt, 0, bbtlen);
++ }
++ res = brcmnand_read_abs_bbt (mtd, buf, rd2, chipsel);
++ if (res != 0) {
++PRINTK("%s: Read BBT %c%c%c%c returns res=%d, discarding\n",
++__FUNCTION__, rd2->pattern[0], rd2->pattern[1], rd2->pattern[2], rd2->pattern[3], res);
++ }
++ }
+
+ /* Write the bad block table to the device ? */
+ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
+ res = brcmnand_write_bbt (mtd, buf, td, md, chipsel);
+- if (res < 0)
++ if (res < 0) {
++ if (res ==-ENOSPC)
++ outofspace_bbt |= 1;
+ return res;
++ }
+ }
+
+ /* Write the mirror bad block table to the device ? */
+ if ((writeops & 0x02) && md && (md->options & NAND_BBT_WRITE)) {
+ res = brcmnand_write_bbt (mtd, buf, md, td, chipsel);
+- if (res < 0)
++ if (res < 0) {
++ if (res ==-ENOSPC)
++ outofspace_bbt |= 2;
+ return res;
++ }
+ }
+ }
+ return 0;
+@@ -1067,7 +1232,7 @@ static void mark_bbt_region (struct mtd_info *mtd, struct nand_bbt_descr *td)
+ for (i = 0; i < chips; i++) {
+ if ((td->options & NAND_BBT_ABSPAGE) ||
+ !(td->options & NAND_BBT_WRITE)) {
+- if (td->pages[i] == -1)
++ if (td->pages[i] == BBT_NULL_PAGE)
+ continue;
+ block = td->pages[i] >> (this->bbt_erase_shift - this->page_shift);
+ block <<= 1;
+@@ -1231,9 +1396,14 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s offs=%0llx\n", __FUNCTION__, offs);
+ chipsel = -1;
+ }
+
+- td->version[chip]++;
++ (td->version[chip])++;
++ // THT Roll over
++ if (td->version[chip] == 0xff)
++ td->version[chip] =1;
+ if (md)
+- md->version[chip]++;
++ (md->version[chip])++;
++ if (md->version[chip] == 0xff)
++ md->version[chip] =1;
+
+ /* Write the bad block table to the device ? */
+ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
+@@ -1251,6 +1421,219 @@ out:
+ return res;
+ }
+
++/**
++ * brcmnand_reconstruct_bbt - [private] recreate bad block table(s)
++ * @mtd: MTD device structure
++ * @whichbbt: 1 = TD, 2 = MD
++ *
++ * The function reconstruct the bad block table(s) from the BI indicators.
++*/
++int brcmnand_reconstruct_bbt (struct mtd_info *mtd, int whichbbt)
++{
++ struct brcmnand_chip *this = mtd->priv;
++ int len, res = 0, writeops = 0;
++ int chip, chipsel;
++ uint8_t *buf = NULL;
++ struct nand_bbt_descr *td = this->bbt_td;
++ struct nand_bbt_descr *md = this->bbt_md;
++ uint32_t bbtSize;
++ uint32_t block;
++ uint64_t bOffset, startBlock, badBlock = 0;
++ int modified = 0;
++
++PRINTK( "-->%s whichBBT=%x\n", __FUNCTION__, whichbbt);
++
++ if (!this->bbt || !td)
++ return -EINVAL;
++
++
++ len = (uint32_t) (this->mtdSize >> (this->bbt_erase_shift + 2));
++ /* Allocate a temporary buffer for one eraseblock incl. oob */
++ len = (1 << this->bbt_erase_shift);
++ len += (len >> this->page_shift) * mtd->oobsize;
++ buf = vmalloc (len);
++ if (!buf) {
++ printk (KERN_ERR "brcmnand_update_bbt: Out of memory\n");
++ return -ENOMEM;
++ }
++
++ /*
++ * Wipe out the BBT entries for the BBT space, and reconstruct it,
++ * but do not modify the other entries outside the BBT
++ */
++ if (this->mtdSize <= (512<<20)) {
++ bbtSize = 1<<20;
++ }
++ else {
++ bbtSize = 4<<20;
++ }
++
++ /* Here we unset the entries in the BBT for the BBT region */
++ startBlock = this->mtdSize - bbtSize;
++ for (bOffset = startBlock; bOffset < this->mtdSize; bOffset += mtd->erasesize) {
++ // Calculate index into BBT and wipe it out.
++ uint32_t byteIndex = (uint32_t) bOffset >> 2;
++ uint8_t byte = this->bbt[byteIndex];
++ uint8_t byte0 = byte;
++
++ /* Clear the 2 bits for this block, then assign it back */
++ byte &= ~(0x03 << (2 * (bOffset & 0x03)));
++
++ /* If the contents changed, mark it */
++ if (byte != byte0) {
++ modified = 1;
++ badBlock = bOffset;
++ }
++
++ }
++
++ /* Now erase the BBT region, adding to bad block if erase fail */
++
++ if (modified) {
++ int64_t goodBlock = BBT_NULL_PAGE;
++
++ switch (writeops & 0x03) {
++ case 0x1: goodBlock = md->pages[0] >> this->page_shift; break;
++ case 0x2: goodBlock = td->pages[0] >> this->page_shift; break;
++ case 0x3: goodBlock = BBT_NULL_PAGE; break;
++ case 0: /* Impossible */ goodBlock = BBT_NULL_PAGE; break;
++ }
++
++#if 0
++ static char buf[512+58]; // 31 for alignment, +27 for OOB size
++ uint8_t* all0;
++ uint8_t* oob0;
++
++ all0 = (uint8_t*) ((((unsigned int) &buf[0]) + 31) & (~31));
++ oob0 = &all0[512];
++
++ memset(all0, 0, 512);
++ memset(oob0, 0, 27);
++#endif
++ for (bOffset = startBlock; bOffset < this->mtdSize; bOffset += mtd->erasesize) {
++ int needBBT = 0;
++
++
++ /* Skip over the good BBT */
++
++ if (bOffset == goodBlock)
++ continue;
++
++ PRINTK("Erasing block at %0llx\n", bOffset);
++ this->ctrl_writeAddr(this, bOffset, 0);
++
++ this->ctrl_write(BCHP_NAND_CMD_START, OP_BLOCK_ERASE);
++ // Wait until flash is ready
++ (void) this->write_is_complete(mtd, &needBBT);
++ if (needBBT) {
++ printk(KERN_WARNING "%s: Erase failure, marking bad block @%016llx\n", __FUNCTION__, bOffset);
++ modified = 1;
++ badBlock = bOffset;
++ (void) this->block_markbad(mtd, bOffset);
++ }
++ }
++ /* TBD: We should follow this with an ECC-disable write with all-0, ECC-enable then a re-erase
++ * But that is too dangerous for AC-on-off tests, especially for the BBT area
++ */
++#if 0
++
++ /* Disable ECC */
++ acc = bbt_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);
++ bbt_ctrl_write(BCHP_NAND_ACC_CONTROL, acc0);
++
++ chip->ctrl_writeAddr(chip, offset, 0);
++ PLATFORM_IOFLUSH_WAR();
++ chip->ctrl_write(BCHP_NAND_CMD_START, OP_PAGE_PROGRAM);
++
++ // Wait until cache is filled up, disabling ECC checking
++ (void) brcmnand_spare_is_valid(mtd, FL_READING, 1);
++
++ // Restore acc
++ bbt_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++#endif
++ }
++
++
++
++
++ writeops = whichbbt;
++ if (modified) writeops = 3; // Do both
++
++#if 0 // THT: TBD when we have per chip BBT
++ /* Do we have a bbt per chip ? */
++ if (td->options & NAND_BBT_PERCHIP) {
++ chip = (int) (offs >> this->chip_shift);
++ chipsel = chip;
++ } else {
++ chip = 0;
++ chipsel = -1;
++ }
++#endif
++
++ /* Warning this codes only support 1 NAND chip */
++do_both:
++ if (((writeops & 3) == 3) && (td->options & NAND_BBT_WRITE)) {
++ int res2 = 0;
++
++PRINTK("%s: Reconstructing both BBTs\n", __FUNCTION__);
++ res = 0;
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++ res = brcmnand_write_bbt (mtd, buf, td, md, 0);
++
++ res2 = brcmnand_write_bbt (mtd, buf, md, td, 0);
++
++ if (!res && res2) /* At least one table write succeed. */
++ res = res2;
++
++ goto out;
++ }
++
++
++ /* Write the bad block table to the device */
++
++ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
++PRINTK("%s: Recreating Bbt0\n", __FUNCTION__);
++ // Reset BBT0
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++
++ // Look for the location of 1BBT
++ res = brcmnand_search_bbt(mtd, buf, md);
++
++ if (res) { // Mirror not found
++ PRINTK("%s: Re-creating Bbt0, but 1bBT is also bad, rescan for both\n", __FUNCTION__);
++ writeops = 3;
++ goto do_both;
++ }
++
++PRINTK("%s: Reconstructing both BBT0 from BBT1 at %08x\n", __FUNCTION__, md->pages[0]);
++ res = brcmnand_write_bbt (mtd, buf, td, md, 0);
++ if (res < 0)
++ goto out;
++ }
++ /* Write the mirror bad block table to the device ? */
++ if ((writeops & 0x02) && md && (md->options & NAND_BBT_WRITE)) {
++PRINTK("%s: Recreating 1bBT\n", __FUNCTION__);
++ // Reset BBT0
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++
++ // Look for the location of Bbt0:
++ res = brcmnand_search_bbt(mtd, buf, td);
++
++ if (res) { // Mirror not found
++ PRINTK("%s: Re-creating Bbt0, but 1bBT is also bad, rescan for both\n", __FUNCTION__);
++ writeops = 3;
++ goto do_both;
++ }
++PRINTK("%s: Reconstructing both BBT1 from BBT0 at %08x\n", __FUNCTION__, td->pages[0]);
++ res = brcmnand_write_bbt (mtd, buf, md, td, 0);
++ }
++
++out:
++ vfree (buf);
++ return res;
++}
++
+ /* Define some generic bad / good block scan pattern which are used
+ * while scanning a device for factory marked good / bad blocks. */
+ static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
+@@ -1388,11 +1771,17 @@ static int brcmnand_displayBBT(struct mtd_info* mtd)
+ //unsigned char oobbuf[64];
+ //struct nand_oobinfo oobsel;
+ int res;
++#ifdef DEBUG_BBT
++ int dbg=do_printk;
++#endif
+ // Size of BBT is 1MB if total flash is less than 512MB, 4MB otherwise
+ int bbtSize = this->mtdSize > (512<<20) ? 4 << 20 : 1 << 20;
+
+ bOffsetStart = 0;
+- bOffsetEnd = this->mtdSize - bbtSize; // Skip BBT itself
++ bOffsetEnd = (loff_t)(this->mtdSize - bbtSize); // Skip BBT itself
++#ifdef DEBUG_BBT
++ do_printk=1;
++#endif
+
+ printk(KERN_INFO "----- Contents of BBT -----\n");
+ for (bOffset=bOffsetStart; bOffset < bOffsetEnd; bOffset = bOffset + mtd->erasesize) {
+@@ -1402,12 +1791,50 @@ static int brcmnand_displayBBT(struct mtd_info* mtd)
+ }
+ }
+ printk(KERN_INFO "----- END Contents of BBT -----\n");
++
++#ifdef DEBUG_BBT
++ do_printk=dbg;
++#endif
+ return 0;
+ }
+
+ #if 1
+ // Remove this block in production builds.
+
++
++//#define TEST_CLEAR_BBT1
++//#define TEST_INVALIDATE_BBT0
++
++#ifdef TEST_INVALIDATE_BBT0
++static uint32_t bbt_ctrl_read(uint32_t nandCtrlReg)
++{
++ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
++ + nandCtrlReg - BCHP_NAND_REVISION);
++
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ (nandCtrlReg & 0x3) != 0) {
++ printk("bbt_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);
++}
++
++
++static void bbt_ctrl_write(uint32_t nandCtrlReg, uint32_t val)
++{
++ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
++ + nandCtrlReg - BCHP_NAND_REVISION);
++
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ (nandCtrlReg & 0x3) != 0) {
++ printk( "bbt_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);
++}
++#endif
++
++
+ /*
+ * Process brcmnand= kernel command arg, BEFORE building/reading BBT table.
+ * Currently, the only accepted command is CLEARBBT, which in itself is a dangerous activity.
+@@ -1424,6 +1851,7 @@ static void brcmnand_preprocessKernelArg(struct mtd_info *mtd)
+ //int page;
+
+
++
+ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n", __FUNCTION__, gClearBBT, device_size(mtd), mtd->erasesize);
+
+
+@@ -1431,10 +1859,48 @@ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n", __FUNCTION__, gClearB
+
+ case NANDCMD_CLEARBBT: // Force rescan of BBT (DANGEROUS, may lose Mfg's BIs).
+
++#ifdef TEST_CLEAR_BBT1
++ bOffsetStart = 0x7ff00000;
++ bOffsetEnd = 0x7ff00000;
++printk("%s: gClearBBT=clearbbt, start=%0llx, end=%0llx\n", __FUNCTION__,
++ bOffsetStart, bOffsetEnd);
++#elif defined(TEST_INVALIDATE_BBT0)
++{
++uint32_t oob0[32];
++uint8_t* oob = (uint8_t*) &oob0[0];
++uint32_t acc0;
++uint64_t bbt0Page = ((uint64_t) 0x7ff80000) >> this->page_shift;
++int res;
++
++ bOffsetStart = 0x7ff80000; // FOrce it to skip erase
++ bOffsetEnd = 0x7ff00000;
++ res = this->read_page_oob(mtd, oob, bbt0Page);
++
++
++memset(&oob[9], 0, 4); // * Overwrite the ECC to force EBADMSG
++//bOffsetStart = 0x7ff80000;
++//bOffsetEnd = 0x7ff80000;
++
++ /* Disable ECC */
++ acc0 = brcmnand_disable_ecc();
++
++PRINTK("Invalidate ECC at page %llx\n", bbt0Page);
++
++ res = this->write_page_oob(mtd, oob, bbt0Page);
++
++ if (res) PRINTK("%s: write_page_oob failed, res=%d\n", __FUNCTION__, res);
++
++ // Restore acc0
++ brcmnand_restore_ecc(acc0);
++}
++#else
++
+ bOffsetStart = this->mtdSize - bbtSize;
+ bOffsetEnd = this->mtdSize - mtd->erasesize;
+ printk("%s: gClearBBT=clearbbt, start=%0llx, end=%0llx\n", __FUNCTION__,
+ bOffsetStart, bOffsetEnd);
++#endif
++
+ break;
+
+ case NANDCMD_SHOWBBT:
+@@ -1634,7 +2100,12 @@ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n",
+
+ /* How many pages should we scan */
+ if (this->badblock_pattern->options & NAND_BBT_SCAN2NDPAGE) {
+- numpages = 2;
++ if (this->options & NAND_SCAN_BI_3RD_PAGE) {
++ numpages = 3;
++ }
++ else {
++ numpages = 2;
++ }
+ } else {
+ numpages = 1;
+ }
+@@ -1865,6 +2336,18 @@ PRINTK("%s: gClearBBT = %d\n", __FUNCTION__, gClearBBT);
+ (void) brcmnand_postprocessKernelArg(mtd);
+ }
+
++ /* TESTING 1 2 3: Once we fixed the bug, there is no longer need for this */
++ if (outofspace_bbt) {
++#ifdef DEBUG_BBT
++ do_printk=1;
++#endif
++ brcmnand_reconstruct_bbt(mtd, outofspace_bbt);
++ outofspace_bbt = 0;
++#ifdef DEBUG_BBT
++ do_printk=0;
++#endif
++ }
++
+ return res;
+ }
+
+diff --git a/drivers/mtd/brcmnand/brcmnand_priv.h b/drivers/mtd/brcmnand/brcmnand_priv.h
+index cc0f009..90ece32 100755
+--- a/drivers/mtd/brcmnand/brcmnand_priv.h
++++ b/drivers/mtd/brcmnand/brcmnand_priv.h
+@@ -313,11 +313,20 @@ extern void* get_brcmnand_handle(void);
+ extern void print_oobbuf(const unsigned char* buf, int len);
+ extern void print_databuf(const unsigned char* buf, int len);
+
+-#if CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
++#ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+ extern int brcmnand_cet_update(struct mtd_info *mtd, loff_t from, int *status);
+ extern int brcmnand_cet_prepare_reboot(struct mtd_info *mtd);
+ extern int brcmnand_cet_erasecallback(struct mtd_info *mtd, u_int32_t addr);
+ extern int brcmnand_create_cet(struct mtd_info *mtd);
+ #endif
+
++/*
++ * Disable ECC, and return the original ACC register (for restore)
++ */
++uint32_t brcmnand_disable_ecc(void);
++
++void brcmnand_restore_ecc(uint32_t orig_acc0);
++
++void brcmnand_post_mortem_dump(struct mtd_info* mtd, loff_t offset);
++
+ #endif
+diff --git a/drivers/mtd/maps/bcm9xxxx-flash.c b/drivers/mtd/maps/bcm9xxxx-flash.c
+index ef050d2..adf8854 100644
+--- a/drivers/mtd/maps/bcm9xxxx-flash.c
++++ b/drivers/mtd/maps/bcm9xxxx-flash.c
+@@ -176,7 +176,7 @@ struct map_info bcm9XXXX_map
+ #define AVAIL1_PART (-1)
+ #endif
+ // DEFAULT_SIZE_MB will be defined later based on platforms.
+-#define DEFAULT_ROOTFS_SIZE (DEFAULT_SIZE_MB - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
++#define DEFAULT_ROOTFS_SIZE (((DEFAULT_SIZE_MB)<<20) - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
+
+
+ static struct mtd_partition bcm9XXXX_parts[] = {
+@@ -213,7 +213,7 @@ static struct mtd_partition bcm9XXXX_parts[] = {
+
+ /* default for 32MB+ platforms */
+
+-#define DEFAULT_SIZE_MB 32 /* 32MB flash */
++#define DEFAULT_SIZE_MB 64 /* 32MB flash */
+ #if defined( CONFIG_MTD_ECM_PARTITION)
+ { name: "rootfs", offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ { name: "avail1", offset: DEFAULT_ROOTFS_SIZE, size: DEFAULT_AVAIL1_SIZE },
+@@ -249,12 +249,27 @@ void (*gInitialize_Nor_Partition)(void) = (void (*)(void)) 0;
+ EXPORT_SYMBOL(gInitialize_Nor_Partition);
+ #endif
+
++
++
++#if 1 // Debugging
++static void print_partition(void)
++{
++ int i;
++
++ for (i=0; i<gNumParts; i++) {
++ PRINTK("i=%d, name=%s, start=%0llx, size=%0llx\n",
++ i, bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].offset,
++ bcm9XXXX_parts[i].size);
++ }
++}
++#endif
++
+ int __init init_bcm9XXXX_map(void)
+ {
+ unsigned int avail1_size = DEFAULT_AVAIL1_SIZE;
+ int i;
+ struct cfi_private *cfi;
+- u_int64_t ACTUAL_FLASH_SIZE = (u_int64_t) WINDOW_SIZE;
++ unsigned long ACTUAL_FLASH_SIZE = (unsigned long) WINDOW_SIZE;
+ unsigned long FLASH_BASE = WINDOW_ADDR;
+
+ #ifdef CONFIG_MTD_ECM_PARTITION
+@@ -284,6 +299,7 @@ int __init init_bcm9XXXX_map(void)
+
+ //bcm9XXXX_map.size = WINDOW_SIZE;
+ ACTUAL_FLASH_SIZE = 1 << cfi->cfiq->DevSize;
++
+ if (ACTUAL_FLASH_SIZE >= (4<<20)) {
+ FLASH_BASE = 0x20000000 - ACTUAL_FLASH_SIZE;
+ }
+@@ -292,6 +308,8 @@ int __init init_bcm9XXXX_map(void)
+ }
+
+
++PRINTK("%s: cfiq->DevSize=%08x, actual_flash_size=%08lx, Base=%08lx\n",
++ __FUNCTION__, cfi->cfiq->DevSize, ACTUAL_FLASH_SIZE, FLASH_BASE);
+ /*
+ * Now that we know the NOR flash size, map again with correct size and base address.
+ */
+@@ -316,6 +334,9 @@ int __init init_bcm9XXXX_map(void)
+ }
+ gNumParts = ARRAY_SIZE(bcm9XXXX_parts) - 2; /* Minus the 2 extra place holders */
+
++PRINTK("Before adjustment, gNumParts=%d, defaultSize=%dMB\n", gNumParts, DEFAULT_SIZE_MB);
++print_partition();
++
+
+ #ifdef CONFIG_MTD_BRCMNAND_NOR_ACCESS
+ /* If NOR flash is only 4MB, remove the NOR partition, leaving only CFE partition */
+@@ -329,7 +350,30 @@ int __init init_bcm9XXXX_map(void)
+ bcm9XXXX_parts[1].size = bcm9XXXX_parts[0].offset; // NOR flash ends where CFE starts.
+ bcm9XXXX_parts[1].offset = 0;
+
+-#elif defined( CONFIG_MTD_ECM_PARTITION )
++#else
++ /* NOR as only device */
++ #if defined (DEFAULT_SIZE_MB )
++ {
++ unsigned long defaultSize = DEFAULT_SIZE_MB << 20;
++ int i;
++
++ if (ACTUAL_FLASH_SIZE != defaultSize) {
++ // Adjust rootfs partition size, all others remain the same.
++ // rootfs
++ bcm9XXXX_parts[0].offset = 0; // CFE starts at 1FC00000H
++ bcm9XXXX_parts[0].size += (int64_t) (ACTUAL_FLASH_SIZE - defaultSize);
++ //avail1
++ for (i=1; i<gNumParts; i++) {
++ // Adjust partition offset, but only for non NULL partitions. Size remains the same.
++ if ((bcm9XXXX_parts[0].offset != 0 && bcm9XXXX_parts[0].size != 0))
++ {
++ bcm9XXXX_parts[i].offset += (int64_t) (ACTUAL_FLASH_SIZE - defaultSize);
++ }
++ }
++ }
++ }
++ #endif
++ #if defined( CONFIG_MTD_ECM_PARTITION )
+ if (ACTUAL_FLASH_SIZE < (64<<20)) {
+ ecm_size = DEFAULT_OCAP_SIZE;
+ avail1_size = 0;
+@@ -371,7 +415,7 @@ bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+
+
+-#elif defined( DEFAULT_SIZE_MB )
++ #elif defined( DEFAULT_SIZE_MB )
+ if (ACTUAL_FLASH_SIZE != (DEFAULT_SIZE_MB << 20)) {
+ int64_t diffSize = (uint64_t) ACTUAL_FLASH_SIZE - (uint64_t) (DEFAULT_SIZE_MB << 20);
+
+@@ -388,7 +432,8 @@ PRINTK("Part[0] After name=%s, size=%llx, offset=%llx\n", bcm9XXXX_parts[0].name
+ PRINTK("Part[%d] After: name=%s, size=%llx, offset=%llx\n", i, bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+ }
+-#endif
++ #endif // ECM_PARTITION ... else
++#endif // NOR+NAND ... else
+
+
+ if (gBcmSplash) {
+@@ -436,7 +481,8 @@ bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+
+
+-
++PRINTK("After adjustment\n");
++print_partition();
+
+ #if defined(CONFIG_MTD_BRCMNAND)
+ #if defined(CONFIG_MTD_BRCMNAND_NOR_ACCESS)
+diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
+index 0753e22..6ccc89d 100755
+--- a/include/linux/mtd/nand.h
++++ b/include/linux/mtd/nand.h
+@@ -184,6 +184,10 @@ typedef enum {
+ /* This option is defined if the board driver allocates its own buffers
+ (e.g. because it needs them DMA-coherent */
+ #define NAND_OWN_BUFFERS 0x00040000
++
++/* For Hynix MLC flashes, the BI are written to last and (last-2) pages. */
++#define NAND_SCAN_BI_3RD_PAGE 0x00100000
++
+ /* Options set by nand scan */
+ /* Nand scan has allocated controller struct */
+ #define NAND_CONTROLLER_ALLOC 0x80000000
+@@ -492,9 +496,11 @@ extern struct nand_manufacturers nand_manuf_ids[];
+ * that the pattern and the version count are always located in the oob area
+ * of the first block.
+ */
++#define BBT_NULL_PAGE (-1LL)
+ struct nand_bbt_descr {
+ int options;
+- int pages[NAND_MAX_CHIPS];
++
++ int64_t pages[NAND_MAX_CHIPS];
+ int offs;
+ int veroffs;
+ uint8_t version[NAND_MAX_CHIPS];
+@@ -534,6 +540,8 @@ struct nand_bbt_descr {
+ #define NAND_BBT_SAVECONTENT 0x00002000
+ /* Search good / bad pattern on the first and the second page */
+ #define NAND_BBT_SCAN2NDPAGE 0x00004000
++/* For Hynix MLC flashes BI are marked on last and (last-2) pages */
++#define NAND_BBT_SCAN3RDPAGE 0x00008000
+
+ /* The maximum number of blocks to scan for a bbt */
+ #define NAND_BBT_SCAN_MAXBLOCKS 4
--- /dev/null
+diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
+index 0a5babf..d5299d9 100644
+--- a/arch/mips/Kconfig
++++ b/arch/mips/Kconfig
+@@ -157,7 +157,6 @@ config MIPS_BCM7405DX_NAND
+ select BMIPS4380
+ select MTD_BRCMNAND
+ select MTD_BRCMNAND_VERIFY_WRITE
+- select MTD_BLOCK_ROMBLOCK
+
+ config MIPS_BCM97459BX_NAND
+ bool "Support for BCM97459Bx with NAND flash"
+diff --git a/arch/mips/brcmstb/common/cfe_call.c b/arch/mips/brcmstb/common/cfe_call.c
+index 56f2bc9..38c2f77 100644
+--- a/arch/mips/brcmstb/common/cfe_call.c
++++ b/arch/mips/brcmstb/common/cfe_call.c
+@@ -34,6 +34,7 @@
+
+ extern unsigned int cfe_seal;
+
++#if 0 // by doliyu, to fixed mtd block
+ cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
+ { "LINUX_FFS_STARTAD", "LINUX_FFS_SIZE" },
+ { "SPLASH_PART_STARTAD", "SPLASH_PART_SIZE" },
+@@ -45,6 +46,13 @@ cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
+ */
+ { NULL, NULL },
+ };
++#else
++cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
++
++ { NULL, NULL },
++};
++
++#endif
+ EXPORT_SYMBOL(gCfeEnvVarPairs);
+
+ /*
+diff --git a/drivers/mtd/brcmnand/bcm7xxx-nand.c b/drivers/mtd/brcmnand/bcm7xxx-nand.c
+index 6cea6bf..d1cddfd 100644
+--- a/drivers/mtd/brcmnand/bcm7xxx-nand.c
++++ b/drivers/mtd/brcmnand/bcm7xxx-nand.c
+@@ -46,12 +46,13 @@ when who what
+ #include <linux/mtd/brcmnand.h>
+ #include "brcmnand_priv.h"
+
+-#define PRINTK(...)
+-//#define PRINTK printk
++//#define PRINTK(...)
++#define PRINTK printk
+
+ #define DRIVER_NAME "bcm7xxx-nand"
+ #define DRIVER_INFO "Broadcom STB NAND controller"
+
++
+ //#ifdef CONFIG_MTD_PARTITIONS
+ //static const char *part_probes[] = { "cmdlinepart", NULL, };
+ //#endif
+@@ -74,7 +75,9 @@ when who what
+ * start of flash 1f7f_ffff flashSize-8MB rootfs Linux File System
+ */
+ #define SMALLEST_FLASH_SIZE (16<<20)
+-#define DEFAULT_RESERVED_SIZE (8<<20)
++//#define DEFAULT_RESERVED_SIZE (8<<20)
++#define DEFAULT_RESERVED_SIZE (14<<20) //doliyu
++
+ #define DEFAULT_SPLASH_SIZE (1<<20)
+ #define DEFAULT_BBT0_SIZE_MB (1)
+ #define DEFAULT_BBT1_SIZE_MB (4)
+@@ -176,6 +179,7 @@ static struct mtd_partition bcm7XXX_new_partition[] =
+
+ static struct mtd_partition bcm7XXX_old_partition[] =
+ {
++#if 0
+ { 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,8 +193,66 @@ static struct mtd_partition bcm7XXX_old_partition[] =
+ /* 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 /* by doliyu : for splash init*/
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07200000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07200000, size: 4<<20 },
++ { name: "boot", offset: 0x07600000, size: 4<<20 },
++ { name: "splash", offset: 0x07A00000, size: 2<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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},
++ {name: NULL, offset: 0, size: 0}
++ #endif
++};
++
++
++static struct mtd_partition bcm7XXX_marusys_partition[] =
++{
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07400000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07400000, size: 4<<20 },
++ { name: "boot", offset: 0x07800000, size: 4<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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_marusys_splash_partition[] =
++{
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07200000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07200000, size: 4<<20 },
++ { name: "boot", offset: 0x07600000, size: 4<<20 },
++ { name: "splash", offset: 0x07A00000, size: 2<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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;
+
+@@ -198,7 +260,9 @@ static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+ static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_new_partition;
+
+ #else
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
++//static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
++static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_marusys_splash_partition;
++
+ #endif
+
+ struct brcmnand_info {
+@@ -261,7 +325,7 @@ brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int *numParts)
+ /*
+ * Is XOR disabled? if so use the new partition.
+ */
+- if (nandinfo->brcmnand.xor_disable) {
++ if (nandinfo->brcmnand.xor_disable[0]) { //by doliyu
+ bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+
+ if (device_size(mtd) <= (512ULL <<20)) {
+@@ -309,7 +373,7 @@ brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int *numParts)
+
+ 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",
+@@ -375,7 +439,7 @@ print_partition(*numParts);
+ 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("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);
+
+diff --git a/drivers/mtd/brcmnand/brcmnand_base.c b/drivers/mtd/brcmnand/brcmnand_base.c
+index 3bc428a..a43cb1f 100644
+--- a/drivers/mtd/brcmnand/brcmnand_base.c
++++ b/drivers/mtd/brcmnand/brcmnand_base.c
+@@ -537,7 +537,7 @@ static brcmnand_chip_Id brcmnand_chips[] = {
+ .chipId = HYNIX_HY27UT088G2A,
+ .mafId = FLASHTYPE_HYNIX,
+ .chipIdStr = "HYNIX_HY27UT088G2A",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
++ .options = NAND_USE_FLASH_BBT|NAND_SCAN_BI_3RD_PAGE, /* BBT on flash + BI on (last-2) page */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+ .timing1 = 0,
+@@ -550,7 +550,7 @@ static brcmnand_chip_Id brcmnand_chips[] = {
+ .chipId = HYNIX_HY27UAG8T2M,
+ .mafId = FLASHTYPE_HYNIX,
+ .chipIdStr = "HYNIX_HY27UAG8T2M",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
++ .options = NAND_USE_FLASH_BBT|NAND_SCAN_BI_3RD_PAGE, /* BBT on flash + BI on (last-2) page */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+ .timing1 = 0,
+@@ -605,13 +605,43 @@ static const unsigned char ffchars[] = {
+
+ //static unsigned char eccmask[128]; // Will be initialized during probe
+
++//static unsigned char eccmask[128]; // Will be initialized during probe
++
++#define BCHP_NAND_LAST_REG BCHP_NAND_BLK_WR_PROTECT
++static uint32_t brcmnand_registerHoles[] = {
++
++ // 3.3 and earlier
++ 0x281c,
++ 0x2844, 0x284c,
++ 0x285c,
++ 0x2888, 0x288c,
++ 0x28b8, 0x28bc,
++#if CONFIG_MTD_BRCMNAND_VERSION > CONFIG_MTD_BRCMNAND_VERS_3_3
++#error "Not supported in 2.6.18 kernels"
++ 0x28c4, 0x28c8, 0x28cc,
++ 0x2910, 0x2914, 0x2918, 0x291c,
++ 0x2920, 0x2924, 0x2928, 0x292c,
++#endif
++};
++
++// Is there a register at the location
++static int inRegisterHoles(uint32_t reg)
++{
++ int i;
++
++ for (i=0; i < ARRAY_SIZE(brcmnand_registerHoles); i++) {
++ if (reg == brcmnand_registerHoles[i])
++ return 1; // In register hole
++ }
++ return 0; // Not in hole
++}
+
+ static uint32_t brcmnand_ctrl_read(uint32_t nandCtrlReg)
+ {
+ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
+ + nandCtrlReg - BCHP_NAND_REVISION);
+
+- if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_LAST_REG ||
+ (nandCtrlReg & 0x3) != 0) {
+ printk("brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+@@ -625,7 +655,7 @@ static void brcmnand_ctrl_write(uint32_t nandCtrlReg, uint32_t val)
+ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
+ + nandCtrlReg - BCHP_NAND_REVISION);
+
+- if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_LAST_REG ||
+ (nandCtrlReg & 0x3) != 0) {
+ printk( "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+@@ -689,6 +719,30 @@ if (gdebug > 3) printk("%s: offset=%0llx cs=%d ldw = %08x, udw = %08x\n", __FUN
+ return (ldw); //(ldw ^ 0x1FC00000);
+ }
+
++/*
++ * Disable ECC, and return the original ACC register (for restore)
++ */
++uint32_t brcmnand_disable_ecc(void)
++{
++ uint32_t acc0;
++ uint32_t acc;
++
++ /* Disable ECC */
++ acc0 = brcmnand_ctrl_read(BCHP_NAND_ACC_CONTROL);
++ acc = acc0 & ~(BCHP_NAND_ACC_CONTROL_RD_ECC_EN_MASK | BCHP_NAND_ACC_CONTROL_RD_ECC_BLK0_EN_MASK);
++ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++
++ return acc0;
++}
++
++
++void brcmnand_restore_ecc(uint32_t orig_acc0)
++{
++ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, orig_acc0);
++}
++
++ // Restore acc
++
+ #if 1
+ /* Dont delete, may be useful for debugging */
+
+@@ -739,7 +793,7 @@ static void print_config_regs(void)
+ 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))
++#define NUM_NAND_REGS (1+((BCHP_NAND_LAST_REG-BCHP_NAND_REVISION)/4))
+
+ static void print_nand_ctrl_regs(void)
+ {
+@@ -1533,7 +1587,7 @@ void dump_nand_regs(struct brcmnand_chip* chip, loff_t offset, uint32_t pa, int
+ uint32_t reg = BCHP_NAND_REVISION+(i*4);
+ uint32_t regval;
+
+- if (reg == 0x281c) { // No NAND register at 0x281c
++ if (inRegisterHoles(reg)) { // No NAND register at 0x281c
+ regval = 0;
+ }
+ else {
+@@ -1603,6 +1657,7 @@ static int brcmnand_EDU_write_is_complete(struct mtd_info *mtd, int* outp_needBB
+ if (hif_err != 0) // No timeout
+ {
+ uint32_t flashStatus; // = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ int retries = 20;
+
+ #if 0
+ if (!(hif_err & HIF_INTR2_EDU_DONE))
+@@ -1612,11 +1667,7 @@ printk("hif_err=%08x\n", hif_err);
+ /******************* 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;
++
+
+ //Clear interrupt:
+ //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+@@ -1624,28 +1675,36 @@ printk("hif_err=%08x\n", hif_err);
+ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+
+ /* Just to be dead sure */
+- 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);
++ while (!(flashStatus & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK) && retries-- > 0) {
++ // Cant call the ctrl version, we are in ISR context
++ // ret = brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
++ udelay(5000); // Wait for a total of 100 usec
+ //dump_nand_regs(chip, 0, 0, numDumps++);
+- goto out;
++ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+ }
+
+-#ifdef EDU_DEBUG_5
+-/* else */ {
++ //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;
+
+-// 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 */
++ /* sanity check on last cmd status */
++ if ((edu_err & EDU_ERR_STATUS_NandWrite) && !(flashStatus & 0x1)) {
++ int cmd = chip->ctrl_read(BCHP_NAND_CMD_START);
++ printk(KERN_ERR"%s: false EDU write error status (edu_err: 0x%08X, flashStatus: 0x%08X) for NAND CMD %x \n",
++ __FUNCTION__, edu_err, flashStatus, cmd);
++ edu_err = EDU_get_error_status_register();
++ }
++
++ /* we primarily rely on NAND controller FLASH_STATUS bit 0, since EDU error may not be cleared yet */
++ if ((edu_err & EDU_ERR_STATUS_NandWrite) && (flashStatus & 0x01)) {
++ /* // Write is complete, but not successful, flash error, will mark block bad */
+ *outp_needBBT = 1;
+- printk("EDU_write_is_complete(): error 0x%08X\n", edu_err);
+- ret = 0;
++ printk(KERN_ERR"%s: flash write error (edu_err: 0x%08X, flashStatus: 0x%08X)\n",
++ __FUNCTION__, edu_err, flashStatus);
++ ret = 1; // Write is complete, but not successful
++
+ goto out;
+ }
+ else if (edu_err) {
+@@ -1743,6 +1802,42 @@ printk("%s: AUTO: oob=%p, chip->oob_poi=%p, ooboffs=%d, len=%d, bytes=%d, boffs=
+ }
+
+
++
++
++#define DEBUG_UNCERR
++#ifdef DEBUG_UNCERR
++static uint32_t uncErrOob[7];
++static u_char uncErrData[512];
++#endif
++
++void brcmnand_post_mortem_dump(struct mtd_info* mtd, loff_t offset)
++{
++ int i;
++
++ printk("%s at offset %llx\n", __FUNCTION__, offset);
++ dump_stack();
++
++ printk("NAND registers snapshot \n");
++ for (i=0; i<NUM_NAND_REGS; i++) {
++ uint32_t reg = BCHP_NAND_REVISION+(i*4);
++ uint32_t regval;
++
++ if (inRegisterHoles(reg)) { // No NAND register at 0x281c
++ regval = 0;
++ }
++ else {
++ regval = brcmnand_ctrl_read(reg);
++ }
++ if ((i % 4) == 0) {
++ printk("\n%08x:", reg);
++ }
++ printk(" %08x", regval);
++ }
++
++}
++
++
++
+ /*
+ * Returns 0 on success
+ * Expect a controller read was done before hand, and that the OOB data are read into NAND registers.
+@@ -1769,7 +1864,7 @@ static int brcmnand_handle_false_read_ecc_unc_errors(
+ //u_char oobbuf[16];
+ int erased, allFF;
+ int i;
+- uint32_t acc, acc0;
++ uint32_t acc0;
+ //int valid;
+
+ /*
+@@ -1779,19 +1874,17 @@ static int brcmnand_handle_false_read_ecc_unc_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);
++ acc0 = brcmnand_disable_ecc();
+
+ chip->ctrl_writeAddr(chip, offset, 0);
+ PLATFORM_IOFLUSH_WAR();
+- chip->ctrl_write(BCHP_NAND_CMD_START, OP_SPARE_AREA_READ);
++ chip->ctrl_write(BCHP_NAND_CMD_START, OP_PAGE_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);
++ brcmnand_restore_ecc(acc0);
+ #endif
+
+ for (i = 0; i < 4; i++) {
+@@ -1815,8 +1908,10 @@ print_oobbuf(p8, 16);
+ if (!erased) {
+ printk("p8[%d]=%02x\n", i, p8[i]);
+ break;
++ }
+ }
+- }
++
++
+ 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,
+@@ -1847,6 +1942,25 @@ chip->eccOobSize, chip->eccbytes, erased, allFF);}
+ /* Real error: Disturb read returns uncorrectable errors */
+ ret = -EBADMSG;
+ if (gdebug > 3 ) {printk("<-- %s: ret -EBADMSG\n", __FUNCTION__);}
++
++#ifdef DEBUG_UNCERR
++
++ // Copy the data buffer
++ brcmnand_from_flash_memcpy32(chip, uncErrData, offset, mtd->eccsize);
++ for (i = 0; i < 4; i++) {
++ uncErrOob[i] = p32[i];
++ }
++
++ printk("%s: Uncorrectable error at offset %llx\n", __FUNCTION__, offset);
++
++ printk("Data:\n");
++ print_databuf(uncErrData, mtd->eccsize);
++ printk("Spare Area\n");
++ print_oobbuf((u_char*) uncErrOob, 16);
++
++ brcmnand_post_mortem_dump(mtd, offset);
++
++#endif
+ }
+
+ return ret;
+@@ -2027,16 +2141,14 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ struct brcmnand_chip* chip = mtd->priv;
+ static uint32_t ucdata[128];
+ u_char* uncorr_data = (u_char*) ucdata;
+- uint32_t acc, acc0;
++ uint32_t acc0;
+ int valid;
+ unsigned long irqflags;
+
+ int ret = 0, retries=2;
+
+ /* 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);
++ acc0 = brcmnand_disable_ecc();
+
+ while (retries >= 0) {
+ // Resubmit the read-op
+@@ -2070,7 +2182,7 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ }
+
+ if (retries < 0) {
+- return ret;
++ goto restore_ecc;
+ }
+
+ // Reread the uncorrected buffer.
+@@ -2098,8 +2210,10 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ offset, inp_hwECC[0], inp_hwECC[1], inp_hwECC[2],
+ inoutp_swECC[0], inoutp_swECC[1], inoutp_swECC[2]);
+ }
++
++restore_ecc:
+ // Restore acc
+- brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++ brcmnand_restore_ecc(acc0);
+ return ret;
+ }
+ #endif
+@@ -2432,15 +2546,22 @@ brcmnand_edu_read_comp_intr(struct mtd_info* mtd,
+ 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 retries=20;
+
+ if (intr_status & HIF_INTR2_EDU_ERR) {
+ printk("%s: Should not call me with EDU ERR\n", __FUNCTION__);
+ BUG();
+ }
+ 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();
++ while (!(intfc_status & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK) && retries > 0) {
++ retries--;
++ udelay(5); // NAND guaranteed to finish read within 90us, this should be plenty of time
++ intfc_status = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ }
++ if (retries <= 0) {
++ printk("%s: Impossible, HIF_INTR2_CTRL_READY already asserted, intr_status=%08x, offset=%llx\n",
++ __FUNCTION__, intr_status, offset);
++ //BUG(); Should assert here, but don't want to crash. HW guy guaranteed that it is set!!!!
+ }
+
+ // Remember last good sector read. Needed for HIF_INTR2 workaround.
+@@ -3905,6 +4026,7 @@ static int brcmnand_refresh_blk(struct mtd_info *mtd, loff_t from)
+ * EDU ISR Implementation
+ */
+
++extern void EDU_issue_command(uint32_t dram_addr, uint32_t ext_addr,uint8 cmd);
+
+ /*
+ * Submit the read op, then return immediately, without waiting for completion.
+@@ -4437,7 +4559,7 @@ static int brcmnand_do_read_ops(struct mtd_info *mtd, loff_t from,
+ 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);
++ numPages = min(MAX_JOB_QUEUE_SIZE, (int) (readlen>>chip->page_shift));
+
+ // Only do Batch mode if all 3 conditions are satisfied.
+ if (!aligned || !buffer_aligned || numPages <= 1) {
+@@ -4935,22 +5057,26 @@ if (gdebug > 3) printk("-->%s: addr=%0llx\n", __FUNCTION__, addr);
+ * (2) OOB area is included in ECC calculation for BCH, so no need to check it
+ * separately.
+ */
+- if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- return 0;
+- }
++
+
+ #if 1
+ page = ((uint64_t) addr) >> chip->page_shift;
+ // Must read entire page
+ ret = chip->read_page(mtd, vbuf, oobbuf, page);
+ if (ret) {
+- printk(KERN_ERR "%s: brcmnand_read_page at %08x failed ret=%d\n",
++ printk(KERN_ERR "%s: read_page at %08x failed ret=%d\n",
+ __FUNCTION__, (unsigned int) addr, ret);
++ brcmnand_post_mortem_dump(mtd, addr);
+ return ret;
+ }
+
++
+ #endif
+
++ if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
++ return ret; // We won't verify the OOB if not Hamming
++ }
++
+ /*
+ * If there are no Input Buffer, there is nothing to verify.
+ * Reading the page should be enough.
+@@ -5087,6 +5213,7 @@ printk("-->%s, offset=%0llx\n", __FUNCTION__, offset);}
+ if (ret < 0) {
+ printk(KERN_ERR "%s: brcmnand_posted_write_cache failed at offset=%0llx, ret=%d\n",
+ __FUNCTION__, offset + dataWritten, ret);
++ dataWritten = 0;
+ return ret;
+ }
+ dataWritten += chip->eccsize;
+@@ -5142,7 +5269,7 @@ printk("-->%s, page=%0llx\n", __FUNCTION__, page);}
+ #endif
+
+
+- if (unlikely(!EDU_buffer_OK(inp_buf, EDU_WRITE)))
++ if (unlikely(!EDU_buffer_OK((void*) 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 */
+@@ -5186,6 +5313,9 @@ if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, tryin
+ while (!list_empty(&gJobQ.jobQ)) {
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+ ret = ISR_wait_for_queue_completion();
++ if (ret) {
++ dataWritten = 0;
++ }
+ spin_lock_irqsave(&gJobQ.lock, flags);
+ }
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+@@ -5267,6 +5397,9 @@ if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, tryin
+ while (!list_empty(&gJobQ.jobQ)) {
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+ ret = ISR_wait_for_queue_completion();
++ if (ret) {
++ dataWritten = 0;
++ }
+ spin_lock_irqsave(&gJobQ.lock, flags);
+ }
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+@@ -5428,7 +5561,7 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+ /*
+ * Group several pages for submission for small page NAND
+ */
+- numPages = min(MAX_JOB_QUEUE_SIZE, writelen>>chip->page_shift);
++ numPages = min(MAX_JOB_QUEUE_SIZE, (int) (writelen>>chip->page_shift));
+
+ // If Batch mode
+ if (buffer_aligned && numPages > 1 && chip->pageSize == chip->eccsize) {
+@@ -5455,6 +5588,10 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+ }
+
+ ret = brcmnand_isr_write_pages(mtd, buf, chip->oob_poi, realpage, numPages);
++ if (ret) {
++ ops->retlen = 0;
++ return ret;
++ }
+
+ }
+
+@@ -5520,8 +5657,8 @@ printk("-->%s, offset=%0llx\n", __FUNCTION__, to);}
+
+ /* Do not allow writes past end of device */
+ if (unlikely((to + len) > device_size(mtd))) {
+- DEBUG(MTD_DEBUG_LEVEL0, "%s: ", __FUNCTION__,
+- "Attempt to write beyond end of device\n");
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write beyond end of device\n",
++ __FUNCTION__);
+ printk("Attempt to write beyond end of device\n");
+ }
+ if (!len)
+@@ -5674,8 +5811,8 @@ printk("-->%s, offset=%0llx, len=%08x\n", __FUNCTION__, to, (int) ops->len);}
+
+ if (unlikely((to + ops->len) > device_size(mtd)))
+ {
+- DEBUG(MTD_DEBUG_LEVEL0, "%s: ", __FUNCTION__,
+- "Attempt to write beyond end of device\n");
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write beyond end of device\n",
++ __FUNCTION__);
+ printk("Attempt to write beyond end of device\n");
+ return -EINVAL;
+ }
+@@ -6137,8 +6274,9 @@ if (gdebug > 3 ) {printk( "%s: Erase past end of device, instr_addr=%016llx, in
+ */
+ /* Check if we have a bad block, we do not erase bad blocks */
+ if (brcmnand_block_checkbad(mtd, addr, 0, allowbbt)) {
+- printk (KERN_ERR "%s: attempt to erase a bad block at addr 0x%08x\n", __FUNCTION__, (unsigned int) addr);
++ printk (KERN_ERR "%s: attempt to erase a bad block at addr 0x%llx\n", __FUNCTION__, addr);
+ instr->state = MTD_ERASE_FAILED;
++dump_stack();
+ goto erase_one_block;
+ }
+
+@@ -6898,11 +7036,11 @@ static int brcmnand_probe(struct mtd_info *mtd, unsigned int chipSelect)
+ if (chip->cellinfo) {
+ unsigned long devIdExt = chip->ctrl_read(BCHP_NAND_FLASH_DEVICE_ID_EXT);
+ unsigned char devId5thByte = (devIdExt & 0xff000000) >> 24;
+- unsigned int nbrPlanes;
+- unsigned int planeSizeMB, chipSizeMB, nandConfigChipSize;
++ unsigned int nbrPlanes = 0;
++ unsigned int planeSizeMB = 0, chipSizeMB, nandConfigChipSize;
+ unsigned char devId4thdByte = (chip->device_id & 0xff);
+- unsigned int pageSize, pageSizeBits;
+- unsigned int blockSize, blockSizeBits;
++ unsigned int pageSize = 0, pageSizeBits = 0;
++ unsigned int blockSize = 0, blockSizeBits = 0;
+ //unsigned int oobSize;
+
+
+@@ -7043,7 +7181,7 @@ PRINTK("nandConfigChipSize = %04x\n", nandConfigChipSize);
+ else if ((brcmnand_chips[i].idOptions & BRCMNAND_ID_EXT_BYTES_TYPE2) ==
+ BRCMNAND_ID_EXT_BYTES_TYPE2)
+ {
+- unsigned int oobSize, oobSizePerPage;
++ unsigned int oobSize, oobSizePerPage = 0;
+ //uint32_t nandconfig, chipSizeShift;
+
+ /*---------------- 4th ID byte: page size, block size and OOB size ---------------- */
+@@ -7663,11 +7801,6 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ return (-EINVAL);
+ cs = chip->CS[chip->numchips - 1];
+ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+-
+-
+-
+-
+-
+ }
+
+ /*
+@@ -7678,6 +7811,7 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ printk("NAND_CS_NAND_XOR=%08x\n", nand_xor);
+ //
+ #ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
++#error ""
+ /* 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);
+@@ -7699,6 +7833,11 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ printk("Disabling XOR on CS#%1d\n", chip->CS[i]);
+ chip->xor_disable[i] = 1;
+ }
++ else
++ {
++ printk("Enable XOR on CS#%1d\n", chip->CS[i]);
++ chip->xor_disable[i] = 0;
++ }
+ }
+ }
+ #else
+@@ -8021,7 +8160,7 @@ printk("Corrected ECC to Hamming for SLC flashes: ACC_CONTROL = %08lx from %08lx
+ int corr_threshold;
+
+ if ( chip->ecclevel >= BRCMNAND_ECC_BCH_4) {
+- corr_threshold = 2;
++ corr_threshold = 3; // Changed from 2, since refresh is costly and vulnerable to AC-ON/OFF tests.
+ }
+ else {
+ corr_threshold = 1; // 1 , default for Hamming
+@@ -8227,6 +8366,13 @@ printk(KERN_INFO "ECC layout=%s\n", "brcmnand_oob_bch8_4k");
+ chip->ecclayout = &brcmnand_oob_bch8_4k;
+ break;
+ }
++ else if (NAND_IS_MLC(chip) && mtd->oobsize >= 216 &&
++ chip->ecclevel == BRCMNAND_ECC_BCH_4 && mtd->writesize == 4096)
++ {
++printk(KERN_INFO "ECC layout=%s\n", "brcmnand_oob_bch4_4k");
++ chip->ecclayout = &brcmnand_oob_bch4_4k;
++ break;
++ }
+
+ printk(KERN_WARNING "No oob scheme defined for oobsize %d\n", mtd->oobsize);
+ BUG();
+@@ -8389,8 +8535,8 @@ printk(KERN_INFO "%s, eccsize=%d, writesize=%d, eccsteps=%d, ecclevel=%d, eccbyt
+
+
+
+-#ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
+-gdebug=4;
++#if 0
++//gdebug=4;
+ printk("-----------------------------------------------------\n");
+ print_nand_ctrl_regs();
+ printk("-----------------------------------------------------\n");
+@@ -8411,7 +8557,6 @@ gdebug=4;
+ }
+ #endif
+
+-//gdebug=0;
+ PRINTK("%s 99\n", __FUNCTION__);
+
+ return err;
+diff --git a/drivers/mtd/brcmnand/brcmnand_bbt.c b/drivers/mtd/brcmnand/brcmnand_bbt.c
+index 91e8510..d8924de 100644
+--- a/drivers/mtd/brcmnand/brcmnand_bbt.c
++++ b/drivers/mtd/brcmnand/brcmnand_bbt.c
+@@ -67,6 +67,7 @@ when who what
+ */
+
+
++#include <linux/kernel.h>
+ #include <linux/slab.h>
+ #include <linux/types.h>
+ #include <linux/mtd/mtd.h>
+@@ -76,6 +77,7 @@ when who what
+ #include <linux/bitops.h>
+ #include <linux/delay.h>
+ #include <linux/vmalloc.h>
++#include <linux/syscalls.h>
+
+ #include "brcmnand_priv.h"
+
+@@ -84,10 +86,50 @@ when who what
+ #define PRINTK(...)
+ //#define PRINTK printk
+
++char brcmNandBBTMsg[1024];
++// #define BBT_DEBUG
++#ifdef BBT_DEBUG // Bypass quiet flag
++
++static int do_printk = 0; // To be turned on when we hit BBT out of space
++asmlinkage int bbt_vprintk(const char *fmt, va_list args)
++{
++ //unsigned long flags;
++ int printed_len;
++ //char *p;
++ //static char printk_buf[1024];
++ //static int log_level_unknown = 1;
++
++ extern void uart_puts(const char *);
++
++ printed_len = vsprintf(brcmNandBBTMsg, fmt, args);
++ uart_puts(brcmNandBBTMsg);
++
++ return printed_len;
++
++}
++asmlinkage int bbt_printk(const char *fmt, ...)
++{
++ va_list args;
++ int r;
++
++ if (!do_printk)
++ return 0;
++
++ va_start(args, fmt);
++ r = bbt_vprintk(fmt, args);
++ va_end(args);
++
++ return r;
++}
++
++#define PRINTK bbt_printk
++//#define printk bbt_printk
++
++#endif
++
+ extern int gClearBBT;
+ extern int gdebug;
+
+-char brcmNandBBTMsg[1024];
+
+ /* brcmnand=
+ * rescan: 1. Rescan for bad blocks, and update existing BBT
+@@ -204,7 +246,7 @@ __FUNCTION__,i, i, td->pattern[i], td->offs+i, p[td->offs + i]);
+ * Read the bad block table starting from page.
+ *
+ */
+-static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int num,
++static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, uint64_t page, int num,
+ int bits, int offs, int reserved_block_code)
+ {
+ int res, i, j, act = 0;
+@@ -212,7 +254,9 @@ static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int
+ size_t retlen, len, totlen;
+ loff_t from;
+ uint8_t msk = (uint8_t) ((1 << bits) - 1);
+-
++#ifdef BBT_DEBUG
++int save_do_printk = do_printk;
++#endif
+ totlen = (num * bits) >> 3;
+ from = ((loff_t)page) << this->page_shift;
+
+@@ -222,6 +266,8 @@ static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int
+ this->ctrl_write(BCHP_NAND_ECC_CORR_ADDR, 0);
+ this->ctrl_write(BCHP_NAND_ECC_UNC_ADDR, 0);
+
++//do_printk=1;
++
+
+ while (totlen) {
+ len = min (totlen, (size_t) (1 << this->bbt_erase_shift));
+@@ -229,10 +275,14 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ res = mtd->read(mtd, from, len, &retlen, buf);
+ if (res < 0) {
+ if (retlen != len) {
+- printk (KERN_INFO "brcmnand_bbt: Error reading bad block table\n");
++ printk (KERN_ERR "%s: Error reading bad block table, retlen=%d\n", __FUNCTION__);
+ return res;
+ }
+- printk (KERN_WARNING "brcmnand_bbt: ECC error while reading bad block table\n");
++ printk (KERN_ERR "%s: ECC error while reading bad block table\n", __FUNCTION__);
++PRINTK ("%s: ECC error while reading bad block table, res=%d\n", __FUNCTION__, res);
++
++ /* THT 11/10/09: If read fails, we should ignore the data, so return w/o analyzing it */
++ return res;
+ }
+
+ /* Analyse data */
+@@ -245,6 +295,8 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ if (reserved_block_code && (tmp == reserved_block_code)) {
+ printk (KERN_DEBUG "nand_read_bbt: Reserved block at 0x%08x\n",
+ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
++PRINTK ( "nand_read_bbt: Reserved block at 0x%08x\n",
++ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06);
+ mtd->ecc_stats.bbtblocks++;
+ continue;
+@@ -253,6 +305,8 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ * message to MTD_DEBUG_LEVEL0 */
+ printk (KERN_DEBUG "nand_read_bbt: Bad block at 0x%08x\n",
+ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
++PRINTK ( "nand_read_bbt: Bad block at 0x%08x\n",
++ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ /* Factory marked bad or worn out ? */
+ if (tmp == 0)
+ this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06);
+@@ -261,8 +315,11 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ mtd->ecc_stats.badblocks++;
+ }
+ }
++#ifdef DEBUG_BBT
++do_printk=save_do_printk;
++#endif
+ totlen -= len;
+- from += len;
++ from += (loff_t)len;
+ }
+ return 0;
+ }
+@@ -283,6 +340,12 @@ static int brcmnand_read_abs_bbt (struct mtd_info *mtd, uint8_t *buf, struct nan
+ struct brcmnand_chip *this = mtd->priv;
+ int res = 0, i;
+ int bits;
++#ifdef DEBUG_BBT
++int save_do_printk = do_printk;
++do_printk = 1;
++#endif
++PRINTK("-->brcmnand_read_abs_bbt td=%c%c%c%c, td->pages[0]=%llx\n",
++ td->pattern[0], td->pattern[1],td->pattern[2], td->pattern[3], td->pages[0]);
+
+ PRINTK("-->brcmnand_read_abs_bbt\n");
+ bits = td->options & NAND_BBT_NRBITS_MSK;
+@@ -293,6 +356,9 @@ PRINTK("-->brcmnand_read_abs_bbt\n");
+ res = brcmnand_read_bbt (mtd, buf, td->pages[i], this->chipSize >> this->bbt_erase_shift, bits, offs, td->reserved_block_code);
+ if (res) {
+ PRINTK("<-- brcmnand_read_abs_bbt ret = %d\n", res);
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return res;
+ }
+ offs += this->chipSize >> (this->bbt_erase_shift + 2);
+@@ -302,10 +368,16 @@ PRINTK("<-- brcmnand_read_abs_bbt ret = %d\n", res);
+ (uint32_t) (this->mtdSize >> this->bbt_erase_shift), bits, 0, td->reserved_block_code);
+ if (res) {
+ PRINTK("<-- brcmnand_read_abs_bbt 2 ret = %d\n", res);
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return res;
+ }
+ }
+ PRINTK("<-- brcmnand_read_abs_bbt ret 0\n");
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return 0;
+ }
+
+@@ -316,15 +388,23 @@ static int brcmnand_scan_read_raw(struct mtd_info *mtd, uint8_t *buf, loff_t off
+ size_t len)
+ {
+ struct mtd_oob_ops ops;
++ int ret;
+
+ ops.mode = MTD_OOB_RAW;
+ ops.ooboffs = 0;
+ ops.ooblen = mtd->oobsize;
+- ops.oobbuf = buf;
++ ops.oobbuf = &buf[mtd->writesize];
+ ops.datbuf = buf;
+ ops.len = len;
+
+- return mtd->read_oob(mtd, offs, &ops);
++ ret = mtd->read_oob(mtd, offs, &ops);
++
++PRINTK("%s: Reading BBT Sig @%0llx, OOB=\n", __FUNCTION__, offs);
++#ifdef DEBUG_BBT
++if (do_printk || gdebug)
++ print_oobbuf(ops.oobbuf, mtd->oobsize);
++#endif
++ return ret;
+ }
+
+ /*
+@@ -377,7 +457,9 @@ PRINTK("read primary version\n");
+ brcmnand_scan_read_raw(mtd, buf, td->pages[0] << this->page_shift,
+ mtd->writesize);
+ td->version[0] = buf[mtd->writesize + td->veroffs];
+- printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
++ printk(KERN_DEBUG "Bad block table at page %llx, version 0x%02X\n",
++ td->pages[0], td->version[0]);
++PRINTK( "Bad block table at page %llx, version 0x%02X\n",
+ td->pages[0], td->version[0]);
+ }
+
+@@ -387,8 +469,10 @@ PRINTK("read mirror version\n");
+ brcmnand_scan_read_raw(mtd, buf, md->pages[0] << this->page_shift,
+ mtd->writesize);
+ md->version[0] = buf[mtd->writesize + md->veroffs];
+- printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
++ printk(KERN_DEBUG "Bad block table at page %llx, version 0x%02X\n",
+ md->pages[0], md->version[0]);
++PRINTK( "Bad block table at page %llx, version 0x%02X\n",
++ td->pages[0], td->version[0]);
+ }
+ PRINTK("<-- %s\n", __FUNCTION__);
+ return 1;
+@@ -434,7 +518,7 @@ static int brcmnand_scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr
+ int pagesPerBlock = mtd->erasesize/mtd->writesize;
+
+ dir = -1;
+- offs += (pagesPerBlock -1 ) * mtd->writesize;
++ offs += (loff_t)((pagesPerBlock -1 ) * mtd->writesize);
+ }
+ ops.len = mtd->oobsize;
+ ops.ooblen = mtd->oobsize;
+@@ -444,19 +528,26 @@ static int brcmnand_scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr
+ ops.mode = MTD_OOB_PLACE;
+
+ for (j=0; j < len; j++) {
+- /*
+- * Read the full oob until read_oob is fixed to
+- * handle single byte reads for 16 bit
+- * buswidth
+- */
+ ret = mtd->read_oob(mtd, offs, &ops);
++ if (ret == -EBADMSG) {// Uncorrectable errors
++ uint32_t acc0;
++
++ // Disable ECC
++ acc0 = brcmnand_disable_ecc();
++
++ // Re-read the OOB
++ ret = mtd->read_oob(mtd, offs, &ops);
++
++ // Enable ECC back
++ brcmnand_restore_ecc(acc0);
++ }
+ if (ret)
+ return ret;
+
+ if (check_short_pattern(buf, bd))
+ return 1;
+
+- offs += (dir * mtd->writesize);
++ offs += (loff_t)(dir * mtd->writesize);
+ }
+ return 0;
+ }
+@@ -489,8 +580,14 @@ PRINTK("-->brcmnand_create_bbt, bbt_erase_shift=%d, this->page_shift=%d\n", this
+ if (bd->options & NAND_BBT_SCANALLPAGES)
+ len = 1 << (this->bbt_erase_shift - this->page_shift);
+ else { // Also for MLC
+- if (bd->options & NAND_BBT_SCAN2NDPAGE)
+- len = 2;
++ if (bd->options & NAND_BBT_SCAN2NDPAGE) {
++ if (this->options & NAND_SCAN_BI_3RD_PAGE) {
++ len = 3; // For Hynix MLC chips
++ }
++ else {
++ len = 2;
++ }
++ }
+ else
+ len = 1;
+ }
+@@ -546,7 +643,7 @@ from, bd->options, mtd64_ll_low(startblock), mtd64_ll_low(numblocks));
+ }
+
+ i += 2;
+- from += (1 << this->bbt_erase_shift);
++ from += (loff_t)(1 << this->bbt_erase_shift);
+ }
+ return 0;
+ }
+@@ -577,6 +674,7 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ int scanlen = mtd->writesize + mtd->oobsize;
+ int bbtblocks;
+ int blocktopage = this->bbt_erase_shift - this->page_shift;
++ int ret = 0;
+
+ /* Search direction top -> down ? */
+ if (td->options & NAND_BBT_LASTBLOCK) {
+@@ -604,15 +702,22 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ for (i = 0; i < chips; i++) {
+ /* Reset version information */
+ td->version[i] = 0;
+- td->pages[i] = -1;
++ td->pages[i] = BBT_NULL_PAGE;
+ /* Scan the maximum number of blocks */
+ for (block = 0; block < td->maxblocks; block++) {
+
+- int actblock = startblock + dir * block;
++ int64_t actblock = startblock + dir * block;
+ loff_t offs = (uint64_t) actblock << this->bbt_erase_shift;
+
++
+ /* Read first page */
+- brcmnand_scan_read_raw(mtd, buf, offs, mtd->writesize);
++ ret = brcmnand_scan_read_raw(mtd, buf, offs, mtd->writesize);
++
++ /* Here if the read routine returns -77 then the BBT data is invalid, ignore it */
++
++ // Ignore BBT if not there.
++ if (ret)
++ continue;
+ if (!check_pattern(buf, scanlen, mtd->writesize, td)) {
+ td->pages[i] = actblock << blocktopage;
+ if (td->options & NAND_BBT_VERSION) {
+@@ -625,10 +730,12 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ }
+ /* Check, if we found a bbt for each requested chip */
+ for (i = 0; i < chips; i++) {
+- if (td->pages[i] == -1)
+- printk (KERN_WARNING "Bad block table not found for chip %d\n", i);
++ if (td->pages[i] == BBT_NULL_PAGE)
++ printk (KERN_WARNING "Bad block table %c%c%c%c not found for chip %d\n",
++ td->pattern[0], td->pattern[1], td->pattern[2], td->pattern[3], i);
++
+ else
+- printk(KERN_DEBUG "Bad block table found at page %d, version 0x%02X\n", td->pages[i],
++ printk(KERN_DEBUG "Bad block table found at page %llx, version 0x%02X\n", td->pages[i],
+ td->version[i]);
+ }
+ return 0;
+@@ -674,6 +781,8 @@ static int brcmnand_search_read_bbts (struct mtd_info *mtd, uint8_t *buf,
+ * for BBT.
+ *
+ */
++// 0 == OK, 1 = outofspace for BBT0, 2=outofspace for BBT1
++static int outofspace_bbt = 0;
+ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ struct nand_bbt_descr *td, struct nand_bbt_descr *md,
+ int chipsel)
+@@ -682,7 +791,7 @@ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ struct erase_info einfo;
+ int i, j, res, chip = 0, skip, dir;
+ uint32_t bits, offs, sft, sftmsk, bbtoffs;
+- uint64_t startblock, numblocks, page, i64;
++ int64_t startblock, numblocks, page, i64;
+ int nrchips, pageoffs, ooboffs;
+ uint8_t msk[4];
+ uint8_t rcode = td->reserved_block_code;
+@@ -690,6 +799,7 @@ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ loff_t to;
+ struct mtd_oob_ops ops;
+
++bbt_outofspace_retry:
+
+ DEBUG(MTD_DEBUG_LEVEL3, "-->%s\n", __FUNCTION__);
+ ops.ooblen = mtd->oobsize;
+@@ -714,7 +824,8 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s\n", __FUNCTION__);
+ nrchips = 1;
+ }
+
+-PRINTK("numblocks=%d, nrchips=%d\n", numblocks, nrchips);
++PRINTK("%s Creating %c%c%c%c numblocks=%d, nrchips=%d, td->pages[0]=%llx\n",
++__FUNCTION__, td->pattern[0],td->pattern[1], td->pattern[2], td->pattern[3] , numblocks, nrchips, td->pages[0]);
+
+ /* Loop through the chips */
+ for (; chip < nrchips; chip++) {
+@@ -723,7 +834,7 @@ PRINTK("numblocks=%d, nrchips=%d\n", numblocks, nrchips);
+ * This applies for absolute placement too, as we have the
+ * page nr. in td->pages.
+ */
+- if (td->pages[chip] != -1LL) {
++ if (td->pages[chip] != BBT_NULL_PAGE) {
+ page = td->pages[chip];
+ PRINTK("There is already a version of the table, go ahead and write it\n");
+ goto write;
+@@ -741,11 +852,12 @@ PRINTK("There is already a version of the table, go ahead and write it\n");
+ skip = 0;
+
+ write_retry:
+-printk("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
++PRINTK("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
+ __FUNCTION__, startblock, dir, td->maxblocks, skip);
+
+ for (i = skip; i < td->maxblocks; i++) {
+- uint64_t block = startblock + dir * i;
++ uint64_t block = startblock + (int64_t) (dir * i);
++ // THT One byte contains 4 set of 2-bits, so divide block by 4 to index the BBT byte
+ uint32_t blockindex = (uint32_t) (block >> 2);
+
+ /* Check, if the block is bad */
+@@ -753,18 +865,36 @@ printk("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
+ PRINTK("%s: Checking BBT: i=%d, block=%0llx, BBT=%08x\n",
+ __FUNCTION__, i, block, this->bbt[blockindex]);
+
+- switch ((this->bbt[blockindex] >>
+- (2 * (block & 0x03))) & 0x03) {
++ // THT: bbt[blockindex] is the byte we are looking for, now get the 2 bits that
++ // is the BBT for the block (Shift (0,1,2,3) *2 positions depending on the block modulo 4)
++ switch ((this->bbt[blockindex] >> (2 * (block & 0x03)))
++ & 0x03) {
+ case 0x01:
+ case 0x03:
+ continue;
+ }
+ page = block << (this->bbt_erase_shift - this->page_shift);
++
++PRINTK("%s: Checking BBT2: page=%llx, md->pages[chip]=%llx\n",
++ __FUNCTION__, page, md->pages[chip]);
++
+ /* Check, if the block is used by the mirror table */
+ if (!md || md->pages[chip] != page)
+ goto write;
+ }
+- printk (KERN_ERR "No space left to write bad block table\n");
++
++#ifdef DEBUG_BBT
++ if (!do_printk) { // If we get here then turn on debugging and retry
++ do_printk=1;
++ chip = 0;
++ len = 0;
++ uint8_t rcode = td->reserved_block_code;
++ goto bbt_outofspace_retry;
++ }
++#endif
++ printk (KERN_ERR "No space left to write bad block table %c%c%c%c\n",
++ td->pattern[0], td->pattern[1], td->pattern[2], td->pattern[3]);
++ brcmnand_post_mortem_dump(mtd, page<<this->page_shift);
+ return -ENOSPC;
+ write:
+
+@@ -840,6 +970,11 @@ PRINTK("%s: Not NAND_BBT_SAVECONTENT\n", __FUNCTION__);
+ ooboffs = len;
+ /* Pattern is located in oob area of first page */
+ memcpy(&buf[ooboffs + td->offs], td->pattern, td->len);
++
++ // Write the version number (1 byte)
++ if (td->options & NAND_BBT_VERSION) {
++ buf[ooboffs + td->veroffs]=td->version[0];
++ }
+ }
+
+ /* walk through the memory table */
+@@ -955,21 +1090,30 @@ static int brcmnand_check_create (struct mtd_info *mtd, uint8_t *buf, struct nan
+ rd2 = NULL;
+ /* Per chip or per device ? */
+ chipsel = (td->options & NAND_BBT_PERCHIP) ? i : -1;
++
++ /*
++ * THT: Reset version to 0 if 0xff
++ */
++ if ((td->options & NAND_BBT_VERSION) && (td->version[i]==0xff) && td->pages[i] != BBT_NULL_PAGE)
++ td->version[i] = 0;
++ if ((md->options & NAND_BBT_VERSION) && (md->version[i]==0xff) && md->pages[i] != BBT_NULL_PAGE)
++ md->version[i] = 0;
++
+ /* Mirrored table available ? */
+ if (md) {
+- if (td->pages[i] == -1 && md->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE && md->pages[i] == BBT_NULL_PAGE) {
+ writeops = 0x03;
+ goto create;
+ }
+
+- if (td->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE) {
+ rd = md;
+ td->version[i] = md->version[i];
+ writeops = 1;
+ goto writecheck;
+ }
+
+- if (md->pages[i] == -1) {
++ if (md->pages[i] == BBT_NULL_PAGE) {
+ rd = td;
+ md->version[i] = td->version[i];
+ writeops = 2;
+@@ -996,7 +1140,7 @@ static int brcmnand_check_create (struct mtd_info *mtd, uint8_t *buf, struct nan
+ goto writecheck;
+
+ } else {
+- if (td->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE) {
+ writeops = 0x01;
+ goto create;
+ }
+@@ -1015,25 +1159,46 @@ create:
+ if (md)
+ md->version[i] = 1;
+ writecheck:
++ res = 0;
++
+ /* read back first ? */
+- if (rd)
+- brcmnand_read_abs_bbt (mtd, buf, rd, chipsel);
++ if (rd) {
++ res = brcmnand_read_abs_bbt (mtd, buf, rd, chipsel);
++ }
+ /* If they weren't versioned, read both. */
+- if (rd2)
+- brcmnand_read_abs_bbt (mtd, buf, rd2, chipsel);
++ if (rd2) {
++ if (res != 0) {
++ int bbtlen = (uint32_t) (this->mtdSize >> (this->bbt_erase_shift + 2));
++ /* Clear the in-memory BBT first */
++PRINTK("%s: Discarding previously read BBT %c%c%c%c, res=%d\n",
++__FUNCTION__, rd->pattern[0], rd->pattern[1], rd->pattern[2], rd->pattern[3], res);
++ memset(this->bbt, 0, bbtlen);
++ }
++ res = brcmnand_read_abs_bbt (mtd, buf, rd2, chipsel);
++ if (res != 0) {
++PRINTK("%s: Read BBT %c%c%c%c returns res=%d, discarding\n",
++__FUNCTION__, rd2->pattern[0], rd2->pattern[1], rd2->pattern[2], rd2->pattern[3], res);
++ }
++ }
+
+ /* Write the bad block table to the device ? */
+ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
+ res = brcmnand_write_bbt (mtd, buf, td, md, chipsel);
+- if (res < 0)
++ if (res < 0) {
++ if (res ==-ENOSPC)
++ outofspace_bbt |= 1;
+ return res;
++ }
+ }
+
+ /* Write the mirror bad block table to the device ? */
+ if ((writeops & 0x02) && md && (md->options & NAND_BBT_WRITE)) {
+ res = brcmnand_write_bbt (mtd, buf, md, td, chipsel);
+- if (res < 0)
++ if (res < 0) {
++ if (res ==-ENOSPC)
++ outofspace_bbt |= 2;
+ return res;
++ }
+ }
+ }
+ return 0;
+@@ -1067,7 +1232,7 @@ static void mark_bbt_region (struct mtd_info *mtd, struct nand_bbt_descr *td)
+ for (i = 0; i < chips; i++) {
+ if ((td->options & NAND_BBT_ABSPAGE) ||
+ !(td->options & NAND_BBT_WRITE)) {
+- if (td->pages[i] == -1)
++ if (td->pages[i] == BBT_NULL_PAGE)
+ continue;
+ block = td->pages[i] >> (this->bbt_erase_shift - this->page_shift);
+ block <<= 1;
+@@ -1231,9 +1396,14 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s offs=%0llx\n", __FUNCTION__, offs);
+ chipsel = -1;
+ }
+
+- td->version[chip]++;
++ (td->version[chip])++;
++ // THT Roll over
++ if (td->version[chip] == 0xff)
++ td->version[chip] =1;
+ if (md)
+- md->version[chip]++;
++ (md->version[chip])++;
++ if (md->version[chip] == 0xff)
++ md->version[chip] =1;
+
+ /* Write the bad block table to the device ? */
+ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
+@@ -1251,6 +1421,219 @@ out:
+ return res;
+ }
+
++/**
++ * brcmnand_reconstruct_bbt - [private] recreate bad block table(s)
++ * @mtd: MTD device structure
++ * @whichbbt: 1 = TD, 2 = MD
++ *
++ * The function reconstruct the bad block table(s) from the BI indicators.
++*/
++int brcmnand_reconstruct_bbt (struct mtd_info *mtd, int whichbbt)
++{
++ struct brcmnand_chip *this = mtd->priv;
++ int len, res = 0, writeops = 0;
++ int chip, chipsel;
++ uint8_t *buf = NULL;
++ struct nand_bbt_descr *td = this->bbt_td;
++ struct nand_bbt_descr *md = this->bbt_md;
++ uint32_t bbtSize;
++ uint32_t block;
++ uint64_t bOffset, startBlock, badBlock = 0;
++ int modified = 0;
++
++PRINTK( "-->%s whichBBT=%x\n", __FUNCTION__, whichbbt);
++
++ if (!this->bbt || !td)
++ return -EINVAL;
++
++
++ len = (uint32_t) (this->mtdSize >> (this->bbt_erase_shift + 2));
++ /* Allocate a temporary buffer for one eraseblock incl. oob */
++ len = (1 << this->bbt_erase_shift);
++ len += (len >> this->page_shift) * mtd->oobsize;
++ buf = vmalloc (len);
++ if (!buf) {
++ printk (KERN_ERR "brcmnand_update_bbt: Out of memory\n");
++ return -ENOMEM;
++ }
++
++ /*
++ * Wipe out the BBT entries for the BBT space, and reconstruct it,
++ * but do not modify the other entries outside the BBT
++ */
++ if (this->mtdSize <= (512<<20)) {
++ bbtSize = 1<<20;
++ }
++ else {
++ bbtSize = 4<<20;
++ }
++
++ /* Here we unset the entries in the BBT for the BBT region */
++ startBlock = this->mtdSize - bbtSize;
++ for (bOffset = startBlock; bOffset < this->mtdSize; bOffset += mtd->erasesize) {
++ // Calculate index into BBT and wipe it out.
++ uint32_t byteIndex = (uint32_t) bOffset >> 2;
++ uint8_t byte = this->bbt[byteIndex];
++ uint8_t byte0 = byte;
++
++ /* Clear the 2 bits for this block, then assign it back */
++ byte &= ~(0x03 << (2 * (bOffset & 0x03)));
++
++ /* If the contents changed, mark it */
++ if (byte != byte0) {
++ modified = 1;
++ badBlock = bOffset;
++ }
++
++ }
++
++ /* Now erase the BBT region, adding to bad block if erase fail */
++
++ if (modified) {
++ int64_t goodBlock = BBT_NULL_PAGE;
++
++ switch (writeops & 0x03) {
++ case 0x1: goodBlock = md->pages[0] >> this->page_shift; break;
++ case 0x2: goodBlock = td->pages[0] >> this->page_shift; break;
++ case 0x3: goodBlock = BBT_NULL_PAGE; break;
++ case 0: /* Impossible */ goodBlock = BBT_NULL_PAGE; break;
++ }
++
++#if 0
++ static char buf[512+58]; // 31 for alignment, +27 for OOB size
++ uint8_t* all0;
++ uint8_t* oob0;
++
++ all0 = (uint8_t*) ((((unsigned int) &buf[0]) + 31) & (~31));
++ oob0 = &all0[512];
++
++ memset(all0, 0, 512);
++ memset(oob0, 0, 27);
++#endif
++ for (bOffset = startBlock; bOffset < this->mtdSize; bOffset += mtd->erasesize) {
++ int needBBT = 0;
++
++
++ /* Skip over the good BBT */
++
++ if (bOffset == goodBlock)
++ continue;
++
++ PRINTK("Erasing block at %0llx\n", bOffset);
++ this->ctrl_writeAddr(this, bOffset, 0);
++
++ this->ctrl_write(BCHP_NAND_CMD_START, OP_BLOCK_ERASE);
++ // Wait until flash is ready
++ (void) this->write_is_complete(mtd, &needBBT);
++ if (needBBT) {
++ printk(KERN_WARNING "%s: Erase failure, marking bad block @%016llx\n", __FUNCTION__, bOffset);
++ modified = 1;
++ badBlock = bOffset;
++ (void) this->block_markbad(mtd, bOffset);
++ }
++ }
++ /* TBD: We should follow this with an ECC-disable write with all-0, ECC-enable then a re-erase
++ * But that is too dangerous for AC-on-off tests, especially for the BBT area
++ */
++#if 0
++
++ /* Disable ECC */
++ acc = bbt_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);
++ bbt_ctrl_write(BCHP_NAND_ACC_CONTROL, acc0);
++
++ chip->ctrl_writeAddr(chip, offset, 0);
++ PLATFORM_IOFLUSH_WAR();
++ chip->ctrl_write(BCHP_NAND_CMD_START, OP_PAGE_PROGRAM);
++
++ // Wait until cache is filled up, disabling ECC checking
++ (void) brcmnand_spare_is_valid(mtd, FL_READING, 1);
++
++ // Restore acc
++ bbt_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++#endif
++ }
++
++
++
++
++ writeops = whichbbt;
++ if (modified) writeops = 3; // Do both
++
++#if 0 // THT: TBD when we have per chip BBT
++ /* Do we have a bbt per chip ? */
++ if (td->options & NAND_BBT_PERCHIP) {
++ chip = (int) (offs >> this->chip_shift);
++ chipsel = chip;
++ } else {
++ chip = 0;
++ chipsel = -1;
++ }
++#endif
++
++ /* Warning this codes only support 1 NAND chip */
++do_both:
++ if (((writeops & 3) == 3) && (td->options & NAND_BBT_WRITE)) {
++ int res2 = 0;
++
++PRINTK("%s: Reconstructing both BBTs\n", __FUNCTION__);
++ res = 0;
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++ res = brcmnand_write_bbt (mtd, buf, td, md, 0);
++
++ res2 = brcmnand_write_bbt (mtd, buf, md, td, 0);
++
++ if (!res && res2) /* At least one table write succeed. */
++ res = res2;
++
++ goto out;
++ }
++
++
++ /* Write the bad block table to the device */
++
++ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
++PRINTK("%s: Recreating Bbt0\n", __FUNCTION__);
++ // Reset BBT0
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++
++ // Look for the location of 1BBT
++ res = brcmnand_search_bbt(mtd, buf, md);
++
++ if (res) { // Mirror not found
++ PRINTK("%s: Re-creating Bbt0, but 1bBT is also bad, rescan for both\n", __FUNCTION__);
++ writeops = 3;
++ goto do_both;
++ }
++
++PRINTK("%s: Reconstructing both BBT0 from BBT1 at %08x\n", __FUNCTION__, md->pages[0]);
++ res = brcmnand_write_bbt (mtd, buf, td, md, 0);
++ if (res < 0)
++ goto out;
++ }
++ /* Write the mirror bad block table to the device ? */
++ if ((writeops & 0x02) && md && (md->options & NAND_BBT_WRITE)) {
++PRINTK("%s: Recreating 1bBT\n", __FUNCTION__);
++ // Reset BBT0
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++
++ // Look for the location of Bbt0:
++ res = brcmnand_search_bbt(mtd, buf, td);
++
++ if (res) { // Mirror not found
++ PRINTK("%s: Re-creating Bbt0, but 1bBT is also bad, rescan for both\n", __FUNCTION__);
++ writeops = 3;
++ goto do_both;
++ }
++PRINTK("%s: Reconstructing both BBT1 from BBT0 at %08x\n", __FUNCTION__, td->pages[0]);
++ res = brcmnand_write_bbt (mtd, buf, md, td, 0);
++ }
++
++out:
++ vfree (buf);
++ return res;
++}
++
+ /* Define some generic bad / good block scan pattern which are used
+ * while scanning a device for factory marked good / bad blocks. */
+ static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
+@@ -1388,11 +1771,17 @@ static int brcmnand_displayBBT(struct mtd_info* mtd)
+ //unsigned char oobbuf[64];
+ //struct nand_oobinfo oobsel;
+ int res;
++#ifdef DEBUG_BBT
++ int dbg=do_printk;
++#endif
+ // Size of BBT is 1MB if total flash is less than 512MB, 4MB otherwise
+ int bbtSize = this->mtdSize > (512<<20) ? 4 << 20 : 1 << 20;
+
+ bOffsetStart = 0;
+- bOffsetEnd = this->mtdSize - bbtSize; // Skip BBT itself
++ bOffsetEnd = (loff_t)(this->mtdSize - bbtSize); // Skip BBT itself
++#ifdef DEBUG_BBT
++ do_printk=1;
++#endif
+
+ printk(KERN_INFO "----- Contents of BBT -----\n");
+ for (bOffset=bOffsetStart; bOffset < bOffsetEnd; bOffset = bOffset + mtd->erasesize) {
+@@ -1402,12 +1791,50 @@ static int brcmnand_displayBBT(struct mtd_info* mtd)
+ }
+ }
+ printk(KERN_INFO "----- END Contents of BBT -----\n");
++
++#ifdef DEBUG_BBT
++ do_printk=dbg;
++#endif
+ return 0;
+ }
+
+ #if 1
+ // Remove this block in production builds.
+
++
++//#define TEST_CLEAR_BBT1
++//#define TEST_INVALIDATE_BBT0
++
++#ifdef TEST_INVALIDATE_BBT0
++static uint32_t bbt_ctrl_read(uint32_t nandCtrlReg)
++{
++ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
++ + nandCtrlReg - BCHP_NAND_REVISION);
++
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ (nandCtrlReg & 0x3) != 0) {
++ printk("bbt_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);
++}
++
++
++static void bbt_ctrl_write(uint32_t nandCtrlReg, uint32_t val)
++{
++ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
++ + nandCtrlReg - BCHP_NAND_REVISION);
++
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ (nandCtrlReg & 0x3) != 0) {
++ printk( "bbt_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);
++}
++#endif
++
++
+ /*
+ * Process brcmnand= kernel command arg, BEFORE building/reading BBT table.
+ * Currently, the only accepted command is CLEARBBT, which in itself is a dangerous activity.
+@@ -1424,6 +1851,7 @@ static void brcmnand_preprocessKernelArg(struct mtd_info *mtd)
+ //int page;
+
+
++
+ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n", __FUNCTION__, gClearBBT, device_size(mtd), mtd->erasesize);
+
+
+@@ -1431,10 +1859,48 @@ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n", __FUNCTION__, gClearB
+
+ case NANDCMD_CLEARBBT: // Force rescan of BBT (DANGEROUS, may lose Mfg's BIs).
+
++#ifdef TEST_CLEAR_BBT1
++ bOffsetStart = 0x7ff00000;
++ bOffsetEnd = 0x7ff00000;
++printk("%s: gClearBBT=clearbbt, start=%0llx, end=%0llx\n", __FUNCTION__,
++ bOffsetStart, bOffsetEnd);
++#elif defined(TEST_INVALIDATE_BBT0)
++{
++uint32_t oob0[32];
++uint8_t* oob = (uint8_t*) &oob0[0];
++uint32_t acc0;
++uint64_t bbt0Page = ((uint64_t) 0x7ff80000) >> this->page_shift;
++int res;
++
++ bOffsetStart = 0x7ff80000; // FOrce it to skip erase
++ bOffsetEnd = 0x7ff00000;
++ res = this->read_page_oob(mtd, oob, bbt0Page);
++
++
++memset(&oob[9], 0, 4); // * Overwrite the ECC to force EBADMSG
++//bOffsetStart = 0x7ff80000;
++//bOffsetEnd = 0x7ff80000;
++
++ /* Disable ECC */
++ acc0 = brcmnand_disable_ecc();
++
++PRINTK("Invalidate ECC at page %llx\n", bbt0Page);
++
++ res = this->write_page_oob(mtd, oob, bbt0Page);
++
++ if (res) PRINTK("%s: write_page_oob failed, res=%d\n", __FUNCTION__, res);
++
++ // Restore acc0
++ brcmnand_restore_ecc(acc0);
++}
++#else
++
+ bOffsetStart = this->mtdSize - bbtSize;
+ bOffsetEnd = this->mtdSize - mtd->erasesize;
+ printk("%s: gClearBBT=clearbbt, start=%0llx, end=%0llx\n", __FUNCTION__,
+ bOffsetStart, bOffsetEnd);
++#endif
++
+ break;
+
+ case NANDCMD_SHOWBBT:
+@@ -1634,7 +2100,12 @@ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n",
+
+ /* How many pages should we scan */
+ if (this->badblock_pattern->options & NAND_BBT_SCAN2NDPAGE) {
+- numpages = 2;
++ if (this->options & NAND_SCAN_BI_3RD_PAGE) {
++ numpages = 3;
++ }
++ else {
++ numpages = 2;
++ }
+ } else {
+ numpages = 1;
+ }
+@@ -1865,6 +2336,18 @@ PRINTK("%s: gClearBBT = %d\n", __FUNCTION__, gClearBBT);
+ (void) brcmnand_postprocessKernelArg(mtd);
+ }
+
++ /* TESTING 1 2 3: Once we fixed the bug, there is no longer need for this */
++ if (outofspace_bbt) {
++#ifdef DEBUG_BBT
++ do_printk=1;
++#endif
++ brcmnand_reconstruct_bbt(mtd, outofspace_bbt);
++ outofspace_bbt = 0;
++#ifdef DEBUG_BBT
++ do_printk=0;
++#endif
++ }
++
+ return res;
+ }
+
+diff --git a/drivers/mtd/brcmnand/brcmnand_priv.h b/drivers/mtd/brcmnand/brcmnand_priv.h
+index cc0f009..90ece32 100755
+--- a/drivers/mtd/brcmnand/brcmnand_priv.h
++++ b/drivers/mtd/brcmnand/brcmnand_priv.h
+@@ -313,11 +313,20 @@ extern void* get_brcmnand_handle(void);
+ extern void print_oobbuf(const unsigned char* buf, int len);
+ extern void print_databuf(const unsigned char* buf, int len);
+
+-#if CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
++#ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+ extern int brcmnand_cet_update(struct mtd_info *mtd, loff_t from, int *status);
+ extern int brcmnand_cet_prepare_reboot(struct mtd_info *mtd);
+ extern int brcmnand_cet_erasecallback(struct mtd_info *mtd, u_int32_t addr);
+ extern int brcmnand_create_cet(struct mtd_info *mtd);
+ #endif
+
++/*
++ * Disable ECC, and return the original ACC register (for restore)
++ */
++uint32_t brcmnand_disable_ecc(void);
++
++void brcmnand_restore_ecc(uint32_t orig_acc0);
++
++void brcmnand_post_mortem_dump(struct mtd_info* mtd, loff_t offset);
++
+ #endif
+diff --git a/drivers/mtd/maps/bcm9xxxx-flash.c b/drivers/mtd/maps/bcm9xxxx-flash.c
+index ef050d2..adf8854 100644
+--- a/drivers/mtd/maps/bcm9xxxx-flash.c
++++ b/drivers/mtd/maps/bcm9xxxx-flash.c
+@@ -176,7 +176,7 @@ struct map_info bcm9XXXX_map
+ #define AVAIL1_PART (-1)
+ #endif
+ // DEFAULT_SIZE_MB will be defined later based on platforms.
+-#define DEFAULT_ROOTFS_SIZE (DEFAULT_SIZE_MB - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
++#define DEFAULT_ROOTFS_SIZE (((DEFAULT_SIZE_MB)<<20) - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
+
+
+ static struct mtd_partition bcm9XXXX_parts[] = {
+@@ -213,7 +213,7 @@ static struct mtd_partition bcm9XXXX_parts[] = {
+
+ /* default for 32MB+ platforms */
+
+-#define DEFAULT_SIZE_MB 32 /* 32MB flash */
++#define DEFAULT_SIZE_MB 64 /* 32MB flash */
+ #if defined( CONFIG_MTD_ECM_PARTITION)
+ { name: "rootfs", offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ { name: "avail1", offset: DEFAULT_ROOTFS_SIZE, size: DEFAULT_AVAIL1_SIZE },
+@@ -249,12 +249,27 @@ void (*gInitialize_Nor_Partition)(void) = (void (*)(void)) 0;
+ EXPORT_SYMBOL(gInitialize_Nor_Partition);
+ #endif
+
++
++
++#if 1 // Debugging
++static void print_partition(void)
++{
++ int i;
++
++ for (i=0; i<gNumParts; i++) {
++ PRINTK("i=%d, name=%s, start=%0llx, size=%0llx\n",
++ i, bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].offset,
++ bcm9XXXX_parts[i].size);
++ }
++}
++#endif
++
+ int __init init_bcm9XXXX_map(void)
+ {
+ unsigned int avail1_size = DEFAULT_AVAIL1_SIZE;
+ int i;
+ struct cfi_private *cfi;
+- u_int64_t ACTUAL_FLASH_SIZE = (u_int64_t) WINDOW_SIZE;
++ unsigned long ACTUAL_FLASH_SIZE = (unsigned long) WINDOW_SIZE;
+ unsigned long FLASH_BASE = WINDOW_ADDR;
+
+ #ifdef CONFIG_MTD_ECM_PARTITION
+@@ -284,6 +299,7 @@ int __init init_bcm9XXXX_map(void)
+
+ //bcm9XXXX_map.size = WINDOW_SIZE;
+ ACTUAL_FLASH_SIZE = 1 << cfi->cfiq->DevSize;
++
+ if (ACTUAL_FLASH_SIZE >= (4<<20)) {
+ FLASH_BASE = 0x20000000 - ACTUAL_FLASH_SIZE;
+ }
+@@ -292,6 +308,8 @@ int __init init_bcm9XXXX_map(void)
+ }
+
+
++PRINTK("%s: cfiq->DevSize=%08x, actual_flash_size=%08lx, Base=%08lx\n",
++ __FUNCTION__, cfi->cfiq->DevSize, ACTUAL_FLASH_SIZE, FLASH_BASE);
+ /*
+ * Now that we know the NOR flash size, map again with correct size and base address.
+ */
+@@ -316,6 +334,9 @@ int __init init_bcm9XXXX_map(void)
+ }
+ gNumParts = ARRAY_SIZE(bcm9XXXX_parts) - 2; /* Minus the 2 extra place holders */
+
++PRINTK("Before adjustment, gNumParts=%d, defaultSize=%dMB\n", gNumParts, DEFAULT_SIZE_MB);
++print_partition();
++
+
+ #ifdef CONFIG_MTD_BRCMNAND_NOR_ACCESS
+ /* If NOR flash is only 4MB, remove the NOR partition, leaving only CFE partition */
+@@ -329,7 +350,30 @@ int __init init_bcm9XXXX_map(void)
+ bcm9XXXX_parts[1].size = bcm9XXXX_parts[0].offset; // NOR flash ends where CFE starts.
+ bcm9XXXX_parts[1].offset = 0;
+
+-#elif defined( CONFIG_MTD_ECM_PARTITION )
++#else
++ /* NOR as only device */
++ #if defined (DEFAULT_SIZE_MB )
++ {
++ unsigned long defaultSize = DEFAULT_SIZE_MB << 20;
++ int i;
++
++ if (ACTUAL_FLASH_SIZE != defaultSize) {
++ // Adjust rootfs partition size, all others remain the same.
++ // rootfs
++ bcm9XXXX_parts[0].offset = 0; // CFE starts at 1FC00000H
++ bcm9XXXX_parts[0].size += (int64_t) (ACTUAL_FLASH_SIZE - defaultSize);
++ //avail1
++ for (i=1; i<gNumParts; i++) {
++ // Adjust partition offset, but only for non NULL partitions. Size remains the same.
++ if ((bcm9XXXX_parts[0].offset != 0 && bcm9XXXX_parts[0].size != 0))
++ {
++ bcm9XXXX_parts[i].offset += (int64_t) (ACTUAL_FLASH_SIZE - defaultSize);
++ }
++ }
++ }
++ }
++ #endif
++ #if defined( CONFIG_MTD_ECM_PARTITION )
+ if (ACTUAL_FLASH_SIZE < (64<<20)) {
+ ecm_size = DEFAULT_OCAP_SIZE;
+ avail1_size = 0;
+@@ -371,7 +415,7 @@ bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+
+
+-#elif defined( DEFAULT_SIZE_MB )
++ #elif defined( DEFAULT_SIZE_MB )
+ if (ACTUAL_FLASH_SIZE != (DEFAULT_SIZE_MB << 20)) {
+ int64_t diffSize = (uint64_t) ACTUAL_FLASH_SIZE - (uint64_t) (DEFAULT_SIZE_MB << 20);
+
+@@ -388,7 +432,8 @@ PRINTK("Part[0] After name=%s, size=%llx, offset=%llx\n", bcm9XXXX_parts[0].name
+ PRINTK("Part[%d] After: name=%s, size=%llx, offset=%llx\n", i, bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+ }
+-#endif
++ #endif // ECM_PARTITION ... else
++#endif // NOR+NAND ... else
+
+
+ if (gBcmSplash) {
+@@ -436,7 +481,8 @@ bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+
+
+-
++PRINTK("After adjustment\n");
++print_partition();
+
+ #if defined(CONFIG_MTD_BRCMNAND)
+ #if defined(CONFIG_MTD_BRCMNAND_NOR_ACCESS)
+diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
+index 0753e22..6ccc89d 100755
+--- a/include/linux/mtd/nand.h
++++ b/include/linux/mtd/nand.h
+@@ -184,6 +184,10 @@ typedef enum {
+ /* This option is defined if the board driver allocates its own buffers
+ (e.g. because it needs them DMA-coherent */
+ #define NAND_OWN_BUFFERS 0x00040000
++
++/* For Hynix MLC flashes, the BI are written to last and (last-2) pages. */
++#define NAND_SCAN_BI_3RD_PAGE 0x00100000
++
+ /* Options set by nand scan */
+ /* Nand scan has allocated controller struct */
+ #define NAND_CONTROLLER_ALLOC 0x80000000
+@@ -492,9 +496,11 @@ extern struct nand_manufacturers nand_manuf_ids[];
+ * that the pattern and the version count are always located in the oob area
+ * of the first block.
+ */
++#define BBT_NULL_PAGE (-1LL)
+ struct nand_bbt_descr {
+ int options;
+- int pages[NAND_MAX_CHIPS];
++
++ int64_t pages[NAND_MAX_CHIPS];
+ int offs;
+ int veroffs;
+ uint8_t version[NAND_MAX_CHIPS];
+@@ -534,6 +540,8 @@ struct nand_bbt_descr {
+ #define NAND_BBT_SAVECONTENT 0x00002000
+ /* Search good / bad pattern on the first and the second page */
+ #define NAND_BBT_SCAN2NDPAGE 0x00004000
++/* For Hynix MLC flashes BI are marked on last and (last-2) pages */
++#define NAND_BBT_SCAN3RDPAGE 0x00008000
+
+ /* The maximum number of blocks to scan for a bbt */
+ #define NAND_BBT_SCAN_MAXBLOCKS 4
--- /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/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
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18-7.4
+# Mon Aug 16 19:39:36 2010
+#
+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=y
+# CONFIG_MIPS_BCM97459BX_NAND is not set
+# CONFIG_MIPS_BCM7335BX is not set
+# CONFIG_MIPS_BCM7335BX_NAND is not set
+# CONFIG_MIPS_BCM7340AX is not set
+# CONFIG_MIPS_BCM7336AX is not set
+# CONFIG_MIPS_BCM7420AX is not set
+# CONFIG_MIPS_BCM7420BX is not set
+# CONFIG_MIPS_BCM7420AX_NAND is not set
+# CONFIG_MIPS_BCM7420BX_NAND 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 is not set
+# 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_BCM7635AX_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=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_BCM7405D0=y
+CONFIG_MIPS_BCM7405=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_NODES_SHIFT=6
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=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 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_CPUSETS 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_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
+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=9
+CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING=y
+# CONFIG_MTD_BRCMNAND_DISABLE_XOR is not set
+
+#
+# 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=y
+#CONFIG_BLK_DEV_RAM_COUNT=16
+#CONFIG_BLK_DEV_RAM_SIZE=8704
+#CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# 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=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=m
+
+#
+# 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=y
+# 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=m
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_SMIVGX is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO 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=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# 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=m
+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=m
+# 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 is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS 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_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=m
+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 is not set
+# 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=m
+CONFIG_SQUASHFS=m
+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=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS 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 is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+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=15
+# CONFIG_DEBUG_FS is not set
+# CONFIG_WANT_EXTRA_DEBUG_INFORMATION is not set
+CONFIG_CROSSCOMPILE=y
+CONFIG_CMDLINE="rw console=uart,mmio,0x10400b00,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
+require linux-vuplus-2.6.18.inc
+
+PR = "r9"
+
+SRC_URI += "\
+ file://vuultimo_defconfig \
+ file://linux_vuultimo_nand2.patch;patch=1;pnum=1 \
+ file://linux_vuultimo_proc.patch;patch=1;pnum=0 \
+ file://linux_vuultimo_serial.patch;patch=1;pnum=0 \
+ "
+
--- /dev/null
+diff --git a/arch/mips/brcmstb/common/cfe_call.c b/arch/mips/brcmstb/common/cfe_call.c
+index 56f2bc9..38c2f77 100644
+--- a/arch/mips/brcmstb/common/cfe_call.c
++++ b/arch/mips/brcmstb/common/cfe_call.c
+@@ -34,6 +34,7 @@
+
+ extern unsigned int cfe_seal;
+
++#if 0 // by doliyu, to fixed mtd block
+ cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
+ { "LINUX_FFS_STARTAD", "LINUX_FFS_SIZE" },
+ { "SPLASH_PART_STARTAD", "SPLASH_PART_SIZE" },
+@@ -45,6 +46,13 @@ cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
+ */
+ { NULL, NULL },
+ };
++#else
++cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
++
++ { NULL, NULL },
++};
++
++#endif
+ EXPORT_SYMBOL(gCfeEnvVarPairs);
+
+ /*
+diff --git a/drivers/mtd/brcmnand/bcm7xxx-nand.c b/drivers/mtd/brcmnand/bcm7xxx-nand.c
+index 6cea6bf..d1cddfd 100644
+--- a/drivers/mtd/brcmnand/bcm7xxx-nand.c
++++ b/drivers/mtd/brcmnand/bcm7xxx-nand.c
+@@ -46,12 +46,13 @@ when who what
+ #include <linux/mtd/brcmnand.h>
+ #include "brcmnand_priv.h"
+
+-#define PRINTK(...)
+-//#define PRINTK printk
++//#define PRINTK(...)
++#define PRINTK printk
+
+ #define DRIVER_NAME "bcm7xxx-nand"
+ #define DRIVER_INFO "Broadcom STB NAND controller"
+
++
+ //#ifdef CONFIG_MTD_PARTITIONS
+ //static const char *part_probes[] = { "cmdlinepart", NULL, };
+ //#endif
+@@ -74,7 +75,9 @@ when who what
+ * start of flash 1f7f_ffff flashSize-8MB rootfs Linux File System
+ */
+ #define SMALLEST_FLASH_SIZE (16<<20)
+-#define DEFAULT_RESERVED_SIZE (8<<20)
++//#define DEFAULT_RESERVED_SIZE (8<<20)
++#define DEFAULT_RESERVED_SIZE (14<<20) //doliyu
++
+ #define DEFAULT_SPLASH_SIZE (1<<20)
+ #define DEFAULT_BBT0_SIZE_MB (1)
+ #define DEFAULT_BBT1_SIZE_MB (4)
+@@ -176,6 +179,7 @@ static struct mtd_partition bcm7XXX_new_partition[] =
+
+ static struct mtd_partition bcm7XXX_old_partition[] =
+ {
++#if 0
+ { 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,8 +193,66 @@ static struct mtd_partition bcm7XXX_old_partition[] =
+ /* 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 /* by doliyu : for splash init*/
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07200000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07200000, size: 4<<20 },
++ { name: "boot", offset: 0x07600000, size: 4<<20 },
++ { name: "splash", offset: 0x07A00000, size: 2<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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},
++ {name: NULL, offset: 0, size: 0}
++ #endif
++};
++
++
++static struct mtd_partition bcm7XXX_marusys_partition[] =
++{
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07400000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07400000, size: 4<<20 },
++ { name: "boot", offset: 0x07800000, size: 4<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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_marusys_splash_partition[] =
++{
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07200000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07200000, size: 4<<20 },
++ { name: "boot", offset: 0x07600000, size: 4<<20 },
++ { name: "splash", offset: 0x07A00000, size: 2<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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;
+
+@@ -198,7 +260,9 @@ static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+ static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_new_partition;
+
+ #else
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
++//static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
++static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_marusys_splash_partition;
++
+ #endif
+
+ struct brcmnand_info {
+@@ -261,7 +325,7 @@ brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int *numParts)
+ /*
+ * Is XOR disabled? if so use the new partition.
+ */
+- if (nandinfo->brcmnand.xor_disable) {
++ if (nandinfo->brcmnand.xor_disable[0]) { //by doliyu
+ bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+
+ if (device_size(mtd) <= (512ULL <<20)) {
+@@ -309,7 +373,7 @@ brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int *numParts)
+
+ 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",
+@@ -375,7 +439,7 @@ print_partition(*numParts);
+ 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("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);
+
+diff --git a/drivers/mtd/brcmnand/brcmnand_base.c b/drivers/mtd/brcmnand/brcmnand_base.c
+index 3bc428a..a43cb1f 100644
+--- a/drivers/mtd/brcmnand/brcmnand_base.c
++++ b/drivers/mtd/brcmnand/brcmnand_base.c
+@@ -537,7 +537,7 @@ static brcmnand_chip_Id brcmnand_chips[] = {
+ .chipId = HYNIX_HY27UT088G2A,
+ .mafId = FLASHTYPE_HYNIX,
+ .chipIdStr = "HYNIX_HY27UT088G2A",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
++ .options = NAND_USE_FLASH_BBT|NAND_SCAN_BI_3RD_PAGE, /* BBT on flash + BI on (last-2) page */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+ .timing1 = 0,
+@@ -550,7 +550,7 @@ static brcmnand_chip_Id brcmnand_chips[] = {
+ .chipId = HYNIX_HY27UAG8T2M,
+ .mafId = FLASHTYPE_HYNIX,
+ .chipIdStr = "HYNIX_HY27UAG8T2M",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
++ .options = NAND_USE_FLASH_BBT|NAND_SCAN_BI_3RD_PAGE, /* BBT on flash + BI on (last-2) page */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+ .timing1 = 0,
+@@ -605,13 +605,43 @@ static const unsigned char ffchars[] = {
+
+ //static unsigned char eccmask[128]; // Will be initialized during probe
+
++//static unsigned char eccmask[128]; // Will be initialized during probe
++
++#define BCHP_NAND_LAST_REG BCHP_NAND_BLK_WR_PROTECT
++static uint32_t brcmnand_registerHoles[] = {
++
++ // 3.3 and earlier
++ 0x281c,
++ 0x2844, 0x284c,
++ 0x285c,
++ 0x2888, 0x288c,
++ 0x28b8, 0x28bc,
++#if CONFIG_MTD_BRCMNAND_VERSION > CONFIG_MTD_BRCMNAND_VERS_3_3
++#error "Not supported in 2.6.18 kernels"
++ 0x28c4, 0x28c8, 0x28cc,
++ 0x2910, 0x2914, 0x2918, 0x291c,
++ 0x2920, 0x2924, 0x2928, 0x292c,
++#endif
++};
++
++// Is there a register at the location
++static int inRegisterHoles(uint32_t reg)
++{
++ int i;
++
++ for (i=0; i < ARRAY_SIZE(brcmnand_registerHoles); i++) {
++ if (reg == brcmnand_registerHoles[i])
++ return 1; // In register hole
++ }
++ return 0; // Not in hole
++}
+
+ static uint32_t brcmnand_ctrl_read(uint32_t nandCtrlReg)
+ {
+ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
+ + nandCtrlReg - BCHP_NAND_REVISION);
+
+- if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_LAST_REG ||
+ (nandCtrlReg & 0x3) != 0) {
+ printk("brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+@@ -625,7 +655,7 @@ static void brcmnand_ctrl_write(uint32_t nandCtrlReg, uint32_t val)
+ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
+ + nandCtrlReg - BCHP_NAND_REVISION);
+
+- if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_LAST_REG ||
+ (nandCtrlReg & 0x3) != 0) {
+ printk( "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+@@ -689,6 +719,30 @@ if (gdebug > 3) printk("%s: offset=%0llx cs=%d ldw = %08x, udw = %08x\n", __FUN
+ return (ldw); //(ldw ^ 0x1FC00000);
+ }
+
++/*
++ * Disable ECC, and return the original ACC register (for restore)
++ */
++uint32_t brcmnand_disable_ecc(void)
++{
++ uint32_t acc0;
++ uint32_t acc;
++
++ /* Disable ECC */
++ acc0 = brcmnand_ctrl_read(BCHP_NAND_ACC_CONTROL);
++ acc = acc0 & ~(BCHP_NAND_ACC_CONTROL_RD_ECC_EN_MASK | BCHP_NAND_ACC_CONTROL_RD_ECC_BLK0_EN_MASK);
++ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++
++ return acc0;
++}
++
++
++void brcmnand_restore_ecc(uint32_t orig_acc0)
++{
++ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, orig_acc0);
++}
++
++ // Restore acc
++
+ #if 1
+ /* Dont delete, may be useful for debugging */
+
+@@ -739,7 +793,7 @@ static void print_config_regs(void)
+ 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))
++#define NUM_NAND_REGS (1+((BCHP_NAND_LAST_REG-BCHP_NAND_REVISION)/4))
+
+ static void print_nand_ctrl_regs(void)
+ {
+@@ -1533,7 +1587,7 @@ void dump_nand_regs(struct brcmnand_chip* chip, loff_t offset, uint32_t pa, int
+ uint32_t reg = BCHP_NAND_REVISION+(i*4);
+ uint32_t regval;
+
+- if (reg == 0x281c) { // No NAND register at 0x281c
++ if (inRegisterHoles(reg)) { // No NAND register at 0x281c
+ regval = 0;
+ }
+ else {
+@@ -1603,6 +1657,7 @@ static int brcmnand_EDU_write_is_complete(struct mtd_info *mtd, int* outp_needBB
+ if (hif_err != 0) // No timeout
+ {
+ uint32_t flashStatus; // = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ int retries = 20;
+
+ #if 0
+ if (!(hif_err & HIF_INTR2_EDU_DONE))
+@@ -1612,11 +1667,7 @@ printk("hif_err=%08x\n", hif_err);
+ /******************* 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;
++
+
+ //Clear interrupt:
+ //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+@@ -1624,28 +1675,36 @@ printk("hif_err=%08x\n", hif_err);
+ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+
+ /* Just to be dead sure */
+- 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);
++ while (!(flashStatus & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK) && retries-- > 0) {
++ // Cant call the ctrl version, we are in ISR context
++ // ret = brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
++ udelay(5000); // Wait for a total of 100 usec
+ //dump_nand_regs(chip, 0, 0, numDumps++);
+- goto out;
++ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+ }
+
+-#ifdef EDU_DEBUG_5
+-/* else */ {
++ //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;
+
+-// 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 */
++ /* sanity check on last cmd status */
++ if ((edu_err & EDU_ERR_STATUS_NandWrite) && !(flashStatus & 0x1)) {
++ int cmd = chip->ctrl_read(BCHP_NAND_CMD_START);
++ printk(KERN_ERR"%s: false EDU write error status (edu_err: 0x%08X, flashStatus: 0x%08X) for NAND CMD %x \n",
++ __FUNCTION__, edu_err, flashStatus, cmd);
++ edu_err = EDU_get_error_status_register();
++ }
++
++ /* we primarily rely on NAND controller FLASH_STATUS bit 0, since EDU error may not be cleared yet */
++ if ((edu_err & EDU_ERR_STATUS_NandWrite) && (flashStatus & 0x01)) {
++ /* // Write is complete, but not successful, flash error, will mark block bad */
+ *outp_needBBT = 1;
+- printk("EDU_write_is_complete(): error 0x%08X\n", edu_err);
+- ret = 0;
++ printk(KERN_ERR"%s: flash write error (edu_err: 0x%08X, flashStatus: 0x%08X)\n",
++ __FUNCTION__, edu_err, flashStatus);
++ ret = 1; // Write is complete, but not successful
++
+ goto out;
+ }
+ else if (edu_err) {
+@@ -1743,6 +1802,42 @@ printk("%s: AUTO: oob=%p, chip->oob_poi=%p, ooboffs=%d, len=%d, bytes=%d, boffs=
+ }
+
+
++
++
++#define DEBUG_UNCERR
++#ifdef DEBUG_UNCERR
++static uint32_t uncErrOob[7];
++static u_char uncErrData[512];
++#endif
++
++void brcmnand_post_mortem_dump(struct mtd_info* mtd, loff_t offset)
++{
++ int i;
++
++ printk("%s at offset %llx\n", __FUNCTION__, offset);
++ dump_stack();
++
++ printk("NAND registers snapshot \n");
++ for (i=0; i<NUM_NAND_REGS; i++) {
++ uint32_t reg = BCHP_NAND_REVISION+(i*4);
++ uint32_t regval;
++
++ if (inRegisterHoles(reg)) { // No NAND register at 0x281c
++ regval = 0;
++ }
++ else {
++ regval = brcmnand_ctrl_read(reg);
++ }
++ if ((i % 4) == 0) {
++ printk("\n%08x:", reg);
++ }
++ printk(" %08x", regval);
++ }
++
++}
++
++
++
+ /*
+ * Returns 0 on success
+ * Expect a controller read was done before hand, and that the OOB data are read into NAND registers.
+@@ -1769,7 +1864,7 @@ static int brcmnand_handle_false_read_ecc_unc_errors(
+ //u_char oobbuf[16];
+ int erased, allFF;
+ int i;
+- uint32_t acc, acc0;
++ uint32_t acc0;
+ //int valid;
+
+ /*
+@@ -1779,19 +1874,17 @@ static int brcmnand_handle_false_read_ecc_unc_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);
++ acc0 = brcmnand_disable_ecc();
+
+ chip->ctrl_writeAddr(chip, offset, 0);
+ PLATFORM_IOFLUSH_WAR();
+- chip->ctrl_write(BCHP_NAND_CMD_START, OP_SPARE_AREA_READ);
++ chip->ctrl_write(BCHP_NAND_CMD_START, OP_PAGE_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);
++ brcmnand_restore_ecc(acc0);
+ #endif
+
+ for (i = 0; i < 4; i++) {
+@@ -1815,8 +1908,10 @@ print_oobbuf(p8, 16);
+ if (!erased) {
+ printk("p8[%d]=%02x\n", i, p8[i]);
+ break;
++ }
+ }
+- }
++
++
+ 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,
+@@ -1847,6 +1942,25 @@ chip->eccOobSize, chip->eccbytes, erased, allFF);}
+ /* Real error: Disturb read returns uncorrectable errors */
+ ret = -EBADMSG;
+ if (gdebug > 3 ) {printk("<-- %s: ret -EBADMSG\n", __FUNCTION__);}
++
++#ifdef DEBUG_UNCERR
++
++ // Copy the data buffer
++ brcmnand_from_flash_memcpy32(chip, uncErrData, offset, mtd->eccsize);
++ for (i = 0; i < 4; i++) {
++ uncErrOob[i] = p32[i];
++ }
++
++ printk("%s: Uncorrectable error at offset %llx\n", __FUNCTION__, offset);
++
++ printk("Data:\n");
++ print_databuf(uncErrData, mtd->eccsize);
++ printk("Spare Area\n");
++ print_oobbuf((u_char*) uncErrOob, 16);
++
++ brcmnand_post_mortem_dump(mtd, offset);
++
++#endif
+ }
+
+ return ret;
+@@ -2027,16 +2141,14 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ struct brcmnand_chip* chip = mtd->priv;
+ static uint32_t ucdata[128];
+ u_char* uncorr_data = (u_char*) ucdata;
+- uint32_t acc, acc0;
++ uint32_t acc0;
+ int valid;
+ unsigned long irqflags;
+
+ int ret = 0, retries=2;
+
+ /* 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);
++ acc0 = brcmnand_disable_ecc();
+
+ while (retries >= 0) {
+ // Resubmit the read-op
+@@ -2070,7 +2182,7 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ }
+
+ if (retries < 0) {
+- return ret;
++ goto restore_ecc;
+ }
+
+ // Reread the uncorrected buffer.
+@@ -2098,8 +2210,10 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ offset, inp_hwECC[0], inp_hwECC[1], inp_hwECC[2],
+ inoutp_swECC[0], inoutp_swECC[1], inoutp_swECC[2]);
+ }
++
++restore_ecc:
+ // Restore acc
+- brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++ brcmnand_restore_ecc(acc0);
+ return ret;
+ }
+ #endif
+@@ -2432,15 +2546,22 @@ brcmnand_edu_read_comp_intr(struct mtd_info* mtd,
+ 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 retries=20;
+
+ if (intr_status & HIF_INTR2_EDU_ERR) {
+ printk("%s: Should not call me with EDU ERR\n", __FUNCTION__);
+ BUG();
+ }
+ 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();
++ while (!(intfc_status & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK) && retries > 0) {
++ retries--;
++ udelay(5); // NAND guaranteed to finish read within 90us, this should be plenty of time
++ intfc_status = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ }
++ if (retries <= 0) {
++ printk("%s: Impossible, HIF_INTR2_CTRL_READY already asserted, intr_status=%08x, offset=%llx\n",
++ __FUNCTION__, intr_status, offset);
++ //BUG(); Should assert here, but don't want to crash. HW guy guaranteed that it is set!!!!
+ }
+
+ // Remember last good sector read. Needed for HIF_INTR2 workaround.
+@@ -3905,6 +4026,7 @@ static int brcmnand_refresh_blk(struct mtd_info *mtd, loff_t from)
+ * EDU ISR Implementation
+ */
+
++extern void EDU_issue_command(uint32_t dram_addr, uint32_t ext_addr,uint8 cmd);
+
+ /*
+ * Submit the read op, then return immediately, without waiting for completion.
+@@ -4437,7 +4559,7 @@ static int brcmnand_do_read_ops(struct mtd_info *mtd, loff_t from,
+ 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);
++ numPages = min(MAX_JOB_QUEUE_SIZE, (int) (readlen>>chip->page_shift));
+
+ // Only do Batch mode if all 3 conditions are satisfied.
+ if (!aligned || !buffer_aligned || numPages <= 1) {
+@@ -4935,22 +5057,26 @@ if (gdebug > 3) printk("-->%s: addr=%0llx\n", __FUNCTION__, addr);
+ * (2) OOB area is included in ECC calculation for BCH, so no need to check it
+ * separately.
+ */
+- if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- return 0;
+- }
++
+
+ #if 1
+ page = ((uint64_t) addr) >> chip->page_shift;
+ // Must read entire page
+ ret = chip->read_page(mtd, vbuf, oobbuf, page);
+ if (ret) {
+- printk(KERN_ERR "%s: brcmnand_read_page at %08x failed ret=%d\n",
++ printk(KERN_ERR "%s: read_page at %08x failed ret=%d\n",
+ __FUNCTION__, (unsigned int) addr, ret);
++ brcmnand_post_mortem_dump(mtd, addr);
+ return ret;
+ }
+
++
+ #endif
+
++ if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
++ return ret; // We won't verify the OOB if not Hamming
++ }
++
+ /*
+ * If there are no Input Buffer, there is nothing to verify.
+ * Reading the page should be enough.
+@@ -5087,6 +5213,7 @@ printk("-->%s, offset=%0llx\n", __FUNCTION__, offset);}
+ if (ret < 0) {
+ printk(KERN_ERR "%s: brcmnand_posted_write_cache failed at offset=%0llx, ret=%d\n",
+ __FUNCTION__, offset + dataWritten, ret);
++ dataWritten = 0;
+ return ret;
+ }
+ dataWritten += chip->eccsize;
+@@ -5142,7 +5269,7 @@ printk("-->%s, page=%0llx\n", __FUNCTION__, page);}
+ #endif
+
+
+- if (unlikely(!EDU_buffer_OK(inp_buf, EDU_WRITE)))
++ if (unlikely(!EDU_buffer_OK((void*) 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 */
+@@ -5186,6 +5313,9 @@ if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, tryin
+ while (!list_empty(&gJobQ.jobQ)) {
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+ ret = ISR_wait_for_queue_completion();
++ if (ret) {
++ dataWritten = 0;
++ }
+ spin_lock_irqsave(&gJobQ.lock, flags);
+ }
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+@@ -5267,6 +5397,9 @@ if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, tryin
+ while (!list_empty(&gJobQ.jobQ)) {
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+ ret = ISR_wait_for_queue_completion();
++ if (ret) {
++ dataWritten = 0;
++ }
+ spin_lock_irqsave(&gJobQ.lock, flags);
+ }
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+@@ -5428,7 +5561,7 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+ /*
+ * Group several pages for submission for small page NAND
+ */
+- numPages = min(MAX_JOB_QUEUE_SIZE, writelen>>chip->page_shift);
++ numPages = min(MAX_JOB_QUEUE_SIZE, (int) (writelen>>chip->page_shift));
+
+ // If Batch mode
+ if (buffer_aligned && numPages > 1 && chip->pageSize == chip->eccsize) {
+@@ -5455,6 +5588,10 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+ }
+
+ ret = brcmnand_isr_write_pages(mtd, buf, chip->oob_poi, realpage, numPages);
++ if (ret) {
++ ops->retlen = 0;
++ return ret;
++ }
+
+ }
+
+@@ -5520,8 +5657,8 @@ printk("-->%s, offset=%0llx\n", __FUNCTION__, to);}
+
+ /* Do not allow writes past end of device */
+ if (unlikely((to + len) > device_size(mtd))) {
+- DEBUG(MTD_DEBUG_LEVEL0, "%s: ", __FUNCTION__,
+- "Attempt to write beyond end of device\n");
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write beyond end of device\n",
++ __FUNCTION__);
+ printk("Attempt to write beyond end of device\n");
+ }
+ if (!len)
+@@ -5674,8 +5811,8 @@ printk("-->%s, offset=%0llx, len=%08x\n", __FUNCTION__, to, (int) ops->len);}
+
+ if (unlikely((to + ops->len) > device_size(mtd)))
+ {
+- DEBUG(MTD_DEBUG_LEVEL0, "%s: ", __FUNCTION__,
+- "Attempt to write beyond end of device\n");
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write beyond end of device\n",
++ __FUNCTION__);
+ printk("Attempt to write beyond end of device\n");
+ return -EINVAL;
+ }
+@@ -6137,8 +6274,9 @@ if (gdebug > 3 ) {printk( "%s: Erase past end of device, instr_addr=%016llx, in
+ */
+ /* Check if we have a bad block, we do not erase bad blocks */
+ if (brcmnand_block_checkbad(mtd, addr, 0, allowbbt)) {
+- printk (KERN_ERR "%s: attempt to erase a bad block at addr 0x%08x\n", __FUNCTION__, (unsigned int) addr);
++ printk (KERN_ERR "%s: attempt to erase a bad block at addr 0x%llx\n", __FUNCTION__, addr);
+ instr->state = MTD_ERASE_FAILED;
++dump_stack();
+ goto erase_one_block;
+ }
+
+@@ -6898,11 +7036,11 @@ static int brcmnand_probe(struct mtd_info *mtd, unsigned int chipSelect)
+ if (chip->cellinfo) {
+ unsigned long devIdExt = chip->ctrl_read(BCHP_NAND_FLASH_DEVICE_ID_EXT);
+ unsigned char devId5thByte = (devIdExt & 0xff000000) >> 24;
+- unsigned int nbrPlanes;
+- unsigned int planeSizeMB, chipSizeMB, nandConfigChipSize;
++ unsigned int nbrPlanes = 0;
++ unsigned int planeSizeMB = 0, chipSizeMB, nandConfigChipSize;
+ unsigned char devId4thdByte = (chip->device_id & 0xff);
+- unsigned int pageSize, pageSizeBits;
+- unsigned int blockSize, blockSizeBits;
++ unsigned int pageSize = 0, pageSizeBits = 0;
++ unsigned int blockSize = 0, blockSizeBits = 0;
+ //unsigned int oobSize;
+
+
+@@ -7043,7 +7181,7 @@ PRINTK("nandConfigChipSize = %04x\n", nandConfigChipSize);
+ else if ((brcmnand_chips[i].idOptions & BRCMNAND_ID_EXT_BYTES_TYPE2) ==
+ BRCMNAND_ID_EXT_BYTES_TYPE2)
+ {
+- unsigned int oobSize, oobSizePerPage;
++ unsigned int oobSize, oobSizePerPage = 0;
+ //uint32_t nandconfig, chipSizeShift;
+
+ /*---------------- 4th ID byte: page size, block size and OOB size ---------------- */
+@@ -7663,11 +7801,6 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ return (-EINVAL);
+ cs = chip->CS[chip->numchips - 1];
+ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+-
+-
+-
+-
+-
+ }
+
+ /*
+@@ -7678,6 +7811,7 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ printk("NAND_CS_NAND_XOR=%08x\n", nand_xor);
+ //
+ #ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
++#error ""
+ /* 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);
+@@ -7699,6 +7833,11 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ printk("Disabling XOR on CS#%1d\n", chip->CS[i]);
+ chip->xor_disable[i] = 1;
+ }
++ else
++ {
++ printk("Enable XOR on CS#%1d\n", chip->CS[i]);
++ chip->xor_disable[i] = 0;
++ }
+ }
+ }
+ #else
+@@ -8021,7 +8160,7 @@ printk("Corrected ECC to Hamming for SLC flashes: ACC_CONTROL = %08lx from %08lx
+ int corr_threshold;
+
+ if ( chip->ecclevel >= BRCMNAND_ECC_BCH_4) {
+- corr_threshold = 2;
++ corr_threshold = 3; // Changed from 2, since refresh is costly and vulnerable to AC-ON/OFF tests.
+ }
+ else {
+ corr_threshold = 1; // 1 , default for Hamming
+@@ -8227,6 +8366,13 @@ printk(KERN_INFO "ECC layout=%s\n", "brcmnand_oob_bch8_4k");
+ chip->ecclayout = &brcmnand_oob_bch8_4k;
+ break;
+ }
++ else if (NAND_IS_MLC(chip) && mtd->oobsize >= 216 &&
++ chip->ecclevel == BRCMNAND_ECC_BCH_4 && mtd->writesize == 4096)
++ {
++printk(KERN_INFO "ECC layout=%s\n", "brcmnand_oob_bch4_4k");
++ chip->ecclayout = &brcmnand_oob_bch4_4k;
++ break;
++ }
+
+ printk(KERN_WARNING "No oob scheme defined for oobsize %d\n", mtd->oobsize);
+ BUG();
+@@ -8389,8 +8535,8 @@ printk(KERN_INFO "%s, eccsize=%d, writesize=%d, eccsteps=%d, ecclevel=%d, eccbyt
+
+
+
+-#ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
+-gdebug=4;
++#if 0
++//gdebug=4;
+ printk("-----------------------------------------------------\n");
+ print_nand_ctrl_regs();
+ printk("-----------------------------------------------------\n");
+@@ -8411,7 +8557,6 @@ gdebug=4;
+ }
+ #endif
+
+-//gdebug=0;
+ PRINTK("%s 99\n", __FUNCTION__);
+
+ return err;
+diff --git a/drivers/mtd/brcmnand/brcmnand_bbt.c b/drivers/mtd/brcmnand/brcmnand_bbt.c
+index 91e8510..d8924de 100644
+--- a/drivers/mtd/brcmnand/brcmnand_bbt.c
++++ b/drivers/mtd/brcmnand/brcmnand_bbt.c
+@@ -67,6 +67,7 @@ when who what
+ */
+
+
++#include <linux/kernel.h>
+ #include <linux/slab.h>
+ #include <linux/types.h>
+ #include <linux/mtd/mtd.h>
+@@ -76,6 +77,7 @@ when who what
+ #include <linux/bitops.h>
+ #include <linux/delay.h>
+ #include <linux/vmalloc.h>
++#include <linux/syscalls.h>
+
+ #include "brcmnand_priv.h"
+
+@@ -84,10 +86,50 @@ when who what
+ #define PRINTK(...)
+ //#define PRINTK printk
+
++char brcmNandBBTMsg[1024];
++// #define BBT_DEBUG
++#ifdef BBT_DEBUG // Bypass quiet flag
++
++static int do_printk = 0; // To be turned on when we hit BBT out of space
++asmlinkage int bbt_vprintk(const char *fmt, va_list args)
++{
++ //unsigned long flags;
++ int printed_len;
++ //char *p;
++ //static char printk_buf[1024];
++ //static int log_level_unknown = 1;
++
++ extern void uart_puts(const char *);
++
++ printed_len = vsprintf(brcmNandBBTMsg, fmt, args);
++ uart_puts(brcmNandBBTMsg);
++
++ return printed_len;
++
++}
++asmlinkage int bbt_printk(const char *fmt, ...)
++{
++ va_list args;
++ int r;
++
++ if (!do_printk)
++ return 0;
++
++ va_start(args, fmt);
++ r = bbt_vprintk(fmt, args);
++ va_end(args);
++
++ return r;
++}
++
++#define PRINTK bbt_printk
++//#define printk bbt_printk
++
++#endif
++
+ extern int gClearBBT;
+ extern int gdebug;
+
+-char brcmNandBBTMsg[1024];
+
+ /* brcmnand=
+ * rescan: 1. Rescan for bad blocks, and update existing BBT
+@@ -204,7 +246,7 @@ __FUNCTION__,i, i, td->pattern[i], td->offs+i, p[td->offs + i]);
+ * Read the bad block table starting from page.
+ *
+ */
+-static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int num,
++static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, uint64_t page, int num,
+ int bits, int offs, int reserved_block_code)
+ {
+ int res, i, j, act = 0;
+@@ -212,7 +254,9 @@ static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int
+ size_t retlen, len, totlen;
+ loff_t from;
+ uint8_t msk = (uint8_t) ((1 << bits) - 1);
+-
++#ifdef BBT_DEBUG
++int save_do_printk = do_printk;
++#endif
+ totlen = (num * bits) >> 3;
+ from = ((loff_t)page) << this->page_shift;
+
+@@ -222,6 +266,8 @@ static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int
+ this->ctrl_write(BCHP_NAND_ECC_CORR_ADDR, 0);
+ this->ctrl_write(BCHP_NAND_ECC_UNC_ADDR, 0);
+
++//do_printk=1;
++
+
+ while (totlen) {
+ len = min (totlen, (size_t) (1 << this->bbt_erase_shift));
+@@ -229,10 +275,14 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ res = mtd->read(mtd, from, len, &retlen, buf);
+ if (res < 0) {
+ if (retlen != len) {
+- printk (KERN_INFO "brcmnand_bbt: Error reading bad block table\n");
++ printk (KERN_ERR "%s: Error reading bad block table, retlen=%d\n", __FUNCTION__);
+ return res;
+ }
+- printk (KERN_WARNING "brcmnand_bbt: ECC error while reading bad block table\n");
++ printk (KERN_ERR "%s: ECC error while reading bad block table\n", __FUNCTION__);
++PRINTK ("%s: ECC error while reading bad block table, res=%d\n", __FUNCTION__, res);
++
++ /* THT 11/10/09: If read fails, we should ignore the data, so return w/o analyzing it */
++ return res;
+ }
+
+ /* Analyse data */
+@@ -245,6 +295,8 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ if (reserved_block_code && (tmp == reserved_block_code)) {
+ printk (KERN_DEBUG "nand_read_bbt: Reserved block at 0x%08x\n",
+ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
++PRINTK ( "nand_read_bbt: Reserved block at 0x%08x\n",
++ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06);
+ mtd->ecc_stats.bbtblocks++;
+ continue;
+@@ -253,6 +305,8 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ * message to MTD_DEBUG_LEVEL0 */
+ printk (KERN_DEBUG "nand_read_bbt: Bad block at 0x%08x\n",
+ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
++PRINTK ( "nand_read_bbt: Bad block at 0x%08x\n",
++ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ /* Factory marked bad or worn out ? */
+ if (tmp == 0)
+ this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06);
+@@ -261,8 +315,11 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ mtd->ecc_stats.badblocks++;
+ }
+ }
++#ifdef DEBUG_BBT
++do_printk=save_do_printk;
++#endif
+ totlen -= len;
+- from += len;
++ from += (loff_t)len;
+ }
+ return 0;
+ }
+@@ -283,6 +340,12 @@ static int brcmnand_read_abs_bbt (struct mtd_info *mtd, uint8_t *buf, struct nan
+ struct brcmnand_chip *this = mtd->priv;
+ int res = 0, i;
+ int bits;
++#ifdef DEBUG_BBT
++int save_do_printk = do_printk;
++do_printk = 1;
++#endif
++PRINTK("-->brcmnand_read_abs_bbt td=%c%c%c%c, td->pages[0]=%llx\n",
++ td->pattern[0], td->pattern[1],td->pattern[2], td->pattern[3], td->pages[0]);
+
+ PRINTK("-->brcmnand_read_abs_bbt\n");
+ bits = td->options & NAND_BBT_NRBITS_MSK;
+@@ -293,6 +356,9 @@ PRINTK("-->brcmnand_read_abs_bbt\n");
+ res = brcmnand_read_bbt (mtd, buf, td->pages[i], this->chipSize >> this->bbt_erase_shift, bits, offs, td->reserved_block_code);
+ if (res) {
+ PRINTK("<-- brcmnand_read_abs_bbt ret = %d\n", res);
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return res;
+ }
+ offs += this->chipSize >> (this->bbt_erase_shift + 2);
+@@ -302,10 +368,16 @@ PRINTK("<-- brcmnand_read_abs_bbt ret = %d\n", res);
+ (uint32_t) (this->mtdSize >> this->bbt_erase_shift), bits, 0, td->reserved_block_code);
+ if (res) {
+ PRINTK("<-- brcmnand_read_abs_bbt 2 ret = %d\n", res);
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return res;
+ }
+ }
+ PRINTK("<-- brcmnand_read_abs_bbt ret 0\n");
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return 0;
+ }
+
+@@ -316,15 +388,23 @@ static int brcmnand_scan_read_raw(struct mtd_info *mtd, uint8_t *buf, loff_t off
+ size_t len)
+ {
+ struct mtd_oob_ops ops;
++ int ret;
+
+ ops.mode = MTD_OOB_RAW;
+ ops.ooboffs = 0;
+ ops.ooblen = mtd->oobsize;
+- ops.oobbuf = buf;
++ ops.oobbuf = &buf[mtd->writesize];
+ ops.datbuf = buf;
+ ops.len = len;
+
+- return mtd->read_oob(mtd, offs, &ops);
++ ret = mtd->read_oob(mtd, offs, &ops);
++
++PRINTK("%s: Reading BBT Sig @%0llx, OOB=\n", __FUNCTION__, offs);
++#ifdef DEBUG_BBT
++if (do_printk || gdebug)
++ print_oobbuf(ops.oobbuf, mtd->oobsize);
++#endif
++ return ret;
+ }
+
+ /*
+@@ -377,7 +457,9 @@ PRINTK("read primary version\n");
+ brcmnand_scan_read_raw(mtd, buf, td->pages[0] << this->page_shift,
+ mtd->writesize);
+ td->version[0] = buf[mtd->writesize + td->veroffs];
+- printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
++ printk(KERN_DEBUG "Bad block table at page %llx, version 0x%02X\n",
++ td->pages[0], td->version[0]);
++PRINTK( "Bad block table at page %llx, version 0x%02X\n",
+ td->pages[0], td->version[0]);
+ }
+
+@@ -387,8 +469,10 @@ PRINTK("read mirror version\n");
+ brcmnand_scan_read_raw(mtd, buf, md->pages[0] << this->page_shift,
+ mtd->writesize);
+ md->version[0] = buf[mtd->writesize + md->veroffs];
+- printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
++ printk(KERN_DEBUG "Bad block table at page %llx, version 0x%02X\n",
+ md->pages[0], md->version[0]);
++PRINTK( "Bad block table at page %llx, version 0x%02X\n",
++ td->pages[0], td->version[0]);
+ }
+ PRINTK("<-- %s\n", __FUNCTION__);
+ return 1;
+@@ -434,7 +518,7 @@ static int brcmnand_scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr
+ int pagesPerBlock = mtd->erasesize/mtd->writesize;
+
+ dir = -1;
+- offs += (pagesPerBlock -1 ) * mtd->writesize;
++ offs += (loff_t)((pagesPerBlock -1 ) * mtd->writesize);
+ }
+ ops.len = mtd->oobsize;
+ ops.ooblen = mtd->oobsize;
+@@ -444,19 +528,26 @@ static int brcmnand_scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr
+ ops.mode = MTD_OOB_PLACE;
+
+ for (j=0; j < len; j++) {
+- /*
+- * Read the full oob until read_oob is fixed to
+- * handle single byte reads for 16 bit
+- * buswidth
+- */
+ ret = mtd->read_oob(mtd, offs, &ops);
++ if (ret == -EBADMSG) {// Uncorrectable errors
++ uint32_t acc0;
++
++ // Disable ECC
++ acc0 = brcmnand_disable_ecc();
++
++ // Re-read the OOB
++ ret = mtd->read_oob(mtd, offs, &ops);
++
++ // Enable ECC back
++ brcmnand_restore_ecc(acc0);
++ }
+ if (ret)
+ return ret;
+
+ if (check_short_pattern(buf, bd))
+ return 1;
+
+- offs += (dir * mtd->writesize);
++ offs += (loff_t)(dir * mtd->writesize);
+ }
+ return 0;
+ }
+@@ -489,8 +580,14 @@ PRINTK("-->brcmnand_create_bbt, bbt_erase_shift=%d, this->page_shift=%d\n", this
+ if (bd->options & NAND_BBT_SCANALLPAGES)
+ len = 1 << (this->bbt_erase_shift - this->page_shift);
+ else { // Also for MLC
+- if (bd->options & NAND_BBT_SCAN2NDPAGE)
+- len = 2;
++ if (bd->options & NAND_BBT_SCAN2NDPAGE) {
++ if (this->options & NAND_SCAN_BI_3RD_PAGE) {
++ len = 3; // For Hynix MLC chips
++ }
++ else {
++ len = 2;
++ }
++ }
+ else
+ len = 1;
+ }
+@@ -546,7 +643,7 @@ from, bd->options, mtd64_ll_low(startblock), mtd64_ll_low(numblocks));
+ }
+
+ i += 2;
+- from += (1 << this->bbt_erase_shift);
++ from += (loff_t)(1 << this->bbt_erase_shift);
+ }
+ return 0;
+ }
+@@ -577,6 +674,7 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ int scanlen = mtd->writesize + mtd->oobsize;
+ int bbtblocks;
+ int blocktopage = this->bbt_erase_shift - this->page_shift;
++ int ret = 0;
+
+ /* Search direction top -> down ? */
+ if (td->options & NAND_BBT_LASTBLOCK) {
+@@ -604,15 +702,22 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ for (i = 0; i < chips; i++) {
+ /* Reset version information */
+ td->version[i] = 0;
+- td->pages[i] = -1;
++ td->pages[i] = BBT_NULL_PAGE;
+ /* Scan the maximum number of blocks */
+ for (block = 0; block < td->maxblocks; block++) {
+
+- int actblock = startblock + dir * block;
++ int64_t actblock = startblock + dir * block;
+ loff_t offs = (uint64_t) actblock << this->bbt_erase_shift;
+
++
+ /* Read first page */
+- brcmnand_scan_read_raw(mtd, buf, offs, mtd->writesize);
++ ret = brcmnand_scan_read_raw(mtd, buf, offs, mtd->writesize);
++
++ /* Here if the read routine returns -77 then the BBT data is invalid, ignore it */
++
++ // Ignore BBT if not there.
++ if (ret)
++ continue;
+ if (!check_pattern(buf, scanlen, mtd->writesize, td)) {
+ td->pages[i] = actblock << blocktopage;
+ if (td->options & NAND_BBT_VERSION) {
+@@ -625,10 +730,12 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ }
+ /* Check, if we found a bbt for each requested chip */
+ for (i = 0; i < chips; i++) {
+- if (td->pages[i] == -1)
+- printk (KERN_WARNING "Bad block table not found for chip %d\n", i);
++ if (td->pages[i] == BBT_NULL_PAGE)
++ printk (KERN_WARNING "Bad block table %c%c%c%c not found for chip %d\n",
++ td->pattern[0], td->pattern[1], td->pattern[2], td->pattern[3], i);
++
+ else
+- printk(KERN_DEBUG "Bad block table found at page %d, version 0x%02X\n", td->pages[i],
++ printk(KERN_DEBUG "Bad block table found at page %llx, version 0x%02X\n", td->pages[i],
+ td->version[i]);
+ }
+ return 0;
+@@ -674,6 +781,8 @@ static int brcmnand_search_read_bbts (struct mtd_info *mtd, uint8_t *buf,
+ * for BBT.
+ *
+ */
++// 0 == OK, 1 = outofspace for BBT0, 2=outofspace for BBT1
++static int outofspace_bbt = 0;
+ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ struct nand_bbt_descr *td, struct nand_bbt_descr *md,
+ int chipsel)
+@@ -682,7 +791,7 @@ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ struct erase_info einfo;
+ int i, j, res, chip = 0, skip, dir;
+ uint32_t bits, offs, sft, sftmsk, bbtoffs;
+- uint64_t startblock, numblocks, page, i64;
++ int64_t startblock, numblocks, page, i64;
+ int nrchips, pageoffs, ooboffs;
+ uint8_t msk[4];
+ uint8_t rcode = td->reserved_block_code;
+@@ -690,6 +799,7 @@ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ loff_t to;
+ struct mtd_oob_ops ops;
+
++bbt_outofspace_retry:
+
+ DEBUG(MTD_DEBUG_LEVEL3, "-->%s\n", __FUNCTION__);
+ ops.ooblen = mtd->oobsize;
+@@ -714,7 +824,8 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s\n", __FUNCTION__);
+ nrchips = 1;
+ }
+
+-PRINTK("numblocks=%d, nrchips=%d\n", numblocks, nrchips);
++PRINTK("%s Creating %c%c%c%c numblocks=%d, nrchips=%d, td->pages[0]=%llx\n",
++__FUNCTION__, td->pattern[0],td->pattern[1], td->pattern[2], td->pattern[3] , numblocks, nrchips, td->pages[0]);
+
+ /* Loop through the chips */
+ for (; chip < nrchips; chip++) {
+@@ -723,7 +834,7 @@ PRINTK("numblocks=%d, nrchips=%d\n", numblocks, nrchips);
+ * This applies for absolute placement too, as we have the
+ * page nr. in td->pages.
+ */
+- if (td->pages[chip] != -1LL) {
++ if (td->pages[chip] != BBT_NULL_PAGE) {
+ page = td->pages[chip];
+ PRINTK("There is already a version of the table, go ahead and write it\n");
+ goto write;
+@@ -741,11 +852,12 @@ PRINTK("There is already a version of the table, go ahead and write it\n");
+ skip = 0;
+
+ write_retry:
+-printk("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
++PRINTK("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
+ __FUNCTION__, startblock, dir, td->maxblocks, skip);
+
+ for (i = skip; i < td->maxblocks; i++) {
+- uint64_t block = startblock + dir * i;
++ uint64_t block = startblock + (int64_t) (dir * i);
++ // THT One byte contains 4 set of 2-bits, so divide block by 4 to index the BBT byte
+ uint32_t blockindex = (uint32_t) (block >> 2);
+
+ /* Check, if the block is bad */
+@@ -753,18 +865,36 @@ printk("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
+ PRINTK("%s: Checking BBT: i=%d, block=%0llx, BBT=%08x\n",
+ __FUNCTION__, i, block, this->bbt[blockindex]);
+
+- switch ((this->bbt[blockindex] >>
+- (2 * (block & 0x03))) & 0x03) {
++ // THT: bbt[blockindex] is the byte we are looking for, now get the 2 bits that
++ // is the BBT for the block (Shift (0,1,2,3) *2 positions depending on the block modulo 4)
++ switch ((this->bbt[blockindex] >> (2 * (block & 0x03)))
++ & 0x03) {
+ case 0x01:
+ case 0x03:
+ continue;
+ }
+ page = block << (this->bbt_erase_shift - this->page_shift);
++
++PRINTK("%s: Checking BBT2: page=%llx, md->pages[chip]=%llx\n",
++ __FUNCTION__, page, md->pages[chip]);
++
+ /* Check, if the block is used by the mirror table */
+ if (!md || md->pages[chip] != page)
+ goto write;
+ }
+- printk (KERN_ERR "No space left to write bad block table\n");
++
++#ifdef DEBUG_BBT
++ if (!do_printk) { // If we get here then turn on debugging and retry
++ do_printk=1;
++ chip = 0;
++ len = 0;
++ uint8_t rcode = td->reserved_block_code;
++ goto bbt_outofspace_retry;
++ }
++#endif
++ printk (KERN_ERR "No space left to write bad block table %c%c%c%c\n",
++ td->pattern[0], td->pattern[1], td->pattern[2], td->pattern[3]);
++ brcmnand_post_mortem_dump(mtd, page<<this->page_shift);
+ return -ENOSPC;
+ write:
+
+@@ -840,6 +970,11 @@ PRINTK("%s: Not NAND_BBT_SAVECONTENT\n", __FUNCTION__);
+ ooboffs = len;
+ /* Pattern is located in oob area of first page */
+ memcpy(&buf[ooboffs + td->offs], td->pattern, td->len);
++
++ // Write the version number (1 byte)
++ if (td->options & NAND_BBT_VERSION) {
++ buf[ooboffs + td->veroffs]=td->version[0];
++ }
+ }
+
+ /* walk through the memory table */
+@@ -955,21 +1090,30 @@ static int brcmnand_check_create (struct mtd_info *mtd, uint8_t *buf, struct nan
+ rd2 = NULL;
+ /* Per chip or per device ? */
+ chipsel = (td->options & NAND_BBT_PERCHIP) ? i : -1;
++
++ /*
++ * THT: Reset version to 0 if 0xff
++ */
++ if ((td->options & NAND_BBT_VERSION) && (td->version[i]==0xff) && td->pages[i] != BBT_NULL_PAGE)
++ td->version[i] = 0;
++ if ((md->options & NAND_BBT_VERSION) && (md->version[i]==0xff) && md->pages[i] != BBT_NULL_PAGE)
++ md->version[i] = 0;
++
+ /* Mirrored table available ? */
+ if (md) {
+- if (td->pages[i] == -1 && md->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE && md->pages[i] == BBT_NULL_PAGE) {
+ writeops = 0x03;
+ goto create;
+ }
+
+- if (td->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE) {
+ rd = md;
+ td->version[i] = md->version[i];
+ writeops = 1;
+ goto writecheck;
+ }
+
+- if (md->pages[i] == -1) {
++ if (md->pages[i] == BBT_NULL_PAGE) {
+ rd = td;
+ md->version[i] = td->version[i];
+ writeops = 2;
+@@ -996,7 +1140,7 @@ static int brcmnand_check_create (struct mtd_info *mtd, uint8_t *buf, struct nan
+ goto writecheck;
+
+ } else {
+- if (td->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE) {
+ writeops = 0x01;
+ goto create;
+ }
+@@ -1015,25 +1159,46 @@ create:
+ if (md)
+ md->version[i] = 1;
+ writecheck:
++ res = 0;
++
+ /* read back first ? */
+- if (rd)
+- brcmnand_read_abs_bbt (mtd, buf, rd, chipsel);
++ if (rd) {
++ res = brcmnand_read_abs_bbt (mtd, buf, rd, chipsel);
++ }
+ /* If they weren't versioned, read both. */
+- if (rd2)
+- brcmnand_read_abs_bbt (mtd, buf, rd2, chipsel);
++ if (rd2) {
++ if (res != 0) {
++ int bbtlen = (uint32_t) (this->mtdSize >> (this->bbt_erase_shift + 2));
++ /* Clear the in-memory BBT first */
++PRINTK("%s: Discarding previously read BBT %c%c%c%c, res=%d\n",
++__FUNCTION__, rd->pattern[0], rd->pattern[1], rd->pattern[2], rd->pattern[3], res);
++ memset(this->bbt, 0, bbtlen);
++ }
++ res = brcmnand_read_abs_bbt (mtd, buf, rd2, chipsel);
++ if (res != 0) {
++PRINTK("%s: Read BBT %c%c%c%c returns res=%d, discarding\n",
++__FUNCTION__, rd2->pattern[0], rd2->pattern[1], rd2->pattern[2], rd2->pattern[3], res);
++ }
++ }
+
+ /* Write the bad block table to the device ? */
+ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
+ res = brcmnand_write_bbt (mtd, buf, td, md, chipsel);
+- if (res < 0)
++ if (res < 0) {
++ if (res ==-ENOSPC)
++ outofspace_bbt |= 1;
+ return res;
++ }
+ }
+
+ /* Write the mirror bad block table to the device ? */
+ if ((writeops & 0x02) && md && (md->options & NAND_BBT_WRITE)) {
+ res = brcmnand_write_bbt (mtd, buf, md, td, chipsel);
+- if (res < 0)
++ if (res < 0) {
++ if (res ==-ENOSPC)
++ outofspace_bbt |= 2;
+ return res;
++ }
+ }
+ }
+ return 0;
+@@ -1067,7 +1232,7 @@ static void mark_bbt_region (struct mtd_info *mtd, struct nand_bbt_descr *td)
+ for (i = 0; i < chips; i++) {
+ if ((td->options & NAND_BBT_ABSPAGE) ||
+ !(td->options & NAND_BBT_WRITE)) {
+- if (td->pages[i] == -1)
++ if (td->pages[i] == BBT_NULL_PAGE)
+ continue;
+ block = td->pages[i] >> (this->bbt_erase_shift - this->page_shift);
+ block <<= 1;
+@@ -1231,9 +1396,14 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s offs=%0llx\n", __FUNCTION__, offs);
+ chipsel = -1;
+ }
+
+- td->version[chip]++;
++ (td->version[chip])++;
++ // THT Roll over
++ if (td->version[chip] == 0xff)
++ td->version[chip] =1;
+ if (md)
+- md->version[chip]++;
++ (md->version[chip])++;
++ if (md->version[chip] == 0xff)
++ md->version[chip] =1;
+
+ /* Write the bad block table to the device ? */
+ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
+@@ -1251,6 +1421,219 @@ out:
+ return res;
+ }
+
++/**
++ * brcmnand_reconstruct_bbt - [private] recreate bad block table(s)
++ * @mtd: MTD device structure
++ * @whichbbt: 1 = TD, 2 = MD
++ *
++ * The function reconstruct the bad block table(s) from the BI indicators.
++*/
++int brcmnand_reconstruct_bbt (struct mtd_info *mtd, int whichbbt)
++{
++ struct brcmnand_chip *this = mtd->priv;
++ int len, res = 0, writeops = 0;
++ int chip, chipsel;
++ uint8_t *buf = NULL;
++ struct nand_bbt_descr *td = this->bbt_td;
++ struct nand_bbt_descr *md = this->bbt_md;
++ uint32_t bbtSize;
++ uint32_t block;
++ uint64_t bOffset, startBlock, badBlock = 0;
++ int modified = 0;
++
++PRINTK( "-->%s whichBBT=%x\n", __FUNCTION__, whichbbt);
++
++ if (!this->bbt || !td)
++ return -EINVAL;
++
++
++ len = (uint32_t) (this->mtdSize >> (this->bbt_erase_shift + 2));
++ /* Allocate a temporary buffer for one eraseblock incl. oob */
++ len = (1 << this->bbt_erase_shift);
++ len += (len >> this->page_shift) * mtd->oobsize;
++ buf = vmalloc (len);
++ if (!buf) {
++ printk (KERN_ERR "brcmnand_update_bbt: Out of memory\n");
++ return -ENOMEM;
++ }
++
++ /*
++ * Wipe out the BBT entries for the BBT space, and reconstruct it,
++ * but do not modify the other entries outside the BBT
++ */
++ if (this->mtdSize <= (512<<20)) {
++ bbtSize = 1<<20;
++ }
++ else {
++ bbtSize = 4<<20;
++ }
++
++ /* Here we unset the entries in the BBT for the BBT region */
++ startBlock = this->mtdSize - bbtSize;
++ for (bOffset = startBlock; bOffset < this->mtdSize; bOffset += mtd->erasesize) {
++ // Calculate index into BBT and wipe it out.
++ uint32_t byteIndex = (uint32_t) bOffset >> 2;
++ uint8_t byte = this->bbt[byteIndex];
++ uint8_t byte0 = byte;
++
++ /* Clear the 2 bits for this block, then assign it back */
++ byte &= ~(0x03 << (2 * (bOffset & 0x03)));
++
++ /* If the contents changed, mark it */
++ if (byte != byte0) {
++ modified = 1;
++ badBlock = bOffset;
++ }
++
++ }
++
++ /* Now erase the BBT region, adding to bad block if erase fail */
++
++ if (modified) {
++ int64_t goodBlock = BBT_NULL_PAGE;
++
++ switch (writeops & 0x03) {
++ case 0x1: goodBlock = md->pages[0] >> this->page_shift; break;
++ case 0x2: goodBlock = td->pages[0] >> this->page_shift; break;
++ case 0x3: goodBlock = BBT_NULL_PAGE; break;
++ case 0: /* Impossible */ goodBlock = BBT_NULL_PAGE; break;
++ }
++
++#if 0
++ static char buf[512+58]; // 31 for alignment, +27 for OOB size
++ uint8_t* all0;
++ uint8_t* oob0;
++
++ all0 = (uint8_t*) ((((unsigned int) &buf[0]) + 31) & (~31));
++ oob0 = &all0[512];
++
++ memset(all0, 0, 512);
++ memset(oob0, 0, 27);
++#endif
++ for (bOffset = startBlock; bOffset < this->mtdSize; bOffset += mtd->erasesize) {
++ int needBBT = 0;
++
++
++ /* Skip over the good BBT */
++
++ if (bOffset == goodBlock)
++ continue;
++
++ PRINTK("Erasing block at %0llx\n", bOffset);
++ this->ctrl_writeAddr(this, bOffset, 0);
++
++ this->ctrl_write(BCHP_NAND_CMD_START, OP_BLOCK_ERASE);
++ // Wait until flash is ready
++ (void) this->write_is_complete(mtd, &needBBT);
++ if (needBBT) {
++ printk(KERN_WARNING "%s: Erase failure, marking bad block @%016llx\n", __FUNCTION__, bOffset);
++ modified = 1;
++ badBlock = bOffset;
++ (void) this->block_markbad(mtd, bOffset);
++ }
++ }
++ /* TBD: We should follow this with an ECC-disable write with all-0, ECC-enable then a re-erase
++ * But that is too dangerous for AC-on-off tests, especially for the BBT area
++ */
++#if 0
++
++ /* Disable ECC */
++ acc = bbt_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);
++ bbt_ctrl_write(BCHP_NAND_ACC_CONTROL, acc0);
++
++ chip->ctrl_writeAddr(chip, offset, 0);
++ PLATFORM_IOFLUSH_WAR();
++ chip->ctrl_write(BCHP_NAND_CMD_START, OP_PAGE_PROGRAM);
++
++ // Wait until cache is filled up, disabling ECC checking
++ (void) brcmnand_spare_is_valid(mtd, FL_READING, 1);
++
++ // Restore acc
++ bbt_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++#endif
++ }
++
++
++
++
++ writeops = whichbbt;
++ if (modified) writeops = 3; // Do both
++
++#if 0 // THT: TBD when we have per chip BBT
++ /* Do we have a bbt per chip ? */
++ if (td->options & NAND_BBT_PERCHIP) {
++ chip = (int) (offs >> this->chip_shift);
++ chipsel = chip;
++ } else {
++ chip = 0;
++ chipsel = -1;
++ }
++#endif
++
++ /* Warning this codes only support 1 NAND chip */
++do_both:
++ if (((writeops & 3) == 3) && (td->options & NAND_BBT_WRITE)) {
++ int res2 = 0;
++
++PRINTK("%s: Reconstructing both BBTs\n", __FUNCTION__);
++ res = 0;
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++ res = brcmnand_write_bbt (mtd, buf, td, md, 0);
++
++ res2 = brcmnand_write_bbt (mtd, buf, md, td, 0);
++
++ if (!res && res2) /* At least one table write succeed. */
++ res = res2;
++
++ goto out;
++ }
++
++
++ /* Write the bad block table to the device */
++
++ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
++PRINTK("%s: Recreating Bbt0\n", __FUNCTION__);
++ // Reset BBT0
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++
++ // Look for the location of 1BBT
++ res = brcmnand_search_bbt(mtd, buf, md);
++
++ if (res) { // Mirror not found
++ PRINTK("%s: Re-creating Bbt0, but 1bBT is also bad, rescan for both\n", __FUNCTION__);
++ writeops = 3;
++ goto do_both;
++ }
++
++PRINTK("%s: Reconstructing both BBT0 from BBT1 at %08x\n", __FUNCTION__, md->pages[0]);
++ res = brcmnand_write_bbt (mtd, buf, td, md, 0);
++ if (res < 0)
++ goto out;
++ }
++ /* Write the mirror bad block table to the device ? */
++ if ((writeops & 0x02) && md && (md->options & NAND_BBT_WRITE)) {
++PRINTK("%s: Recreating 1bBT\n", __FUNCTION__);
++ // Reset BBT0
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++
++ // Look for the location of Bbt0:
++ res = brcmnand_search_bbt(mtd, buf, td);
++
++ if (res) { // Mirror not found
++ PRINTK("%s: Re-creating Bbt0, but 1bBT is also bad, rescan for both\n", __FUNCTION__);
++ writeops = 3;
++ goto do_both;
++ }
++PRINTK("%s: Reconstructing both BBT1 from BBT0 at %08x\n", __FUNCTION__, td->pages[0]);
++ res = brcmnand_write_bbt (mtd, buf, md, td, 0);
++ }
++
++out:
++ vfree (buf);
++ return res;
++}
++
+ /* Define some generic bad / good block scan pattern which are used
+ * while scanning a device for factory marked good / bad blocks. */
+ static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
+@@ -1388,11 +1771,17 @@ static int brcmnand_displayBBT(struct mtd_info* mtd)
+ //unsigned char oobbuf[64];
+ //struct nand_oobinfo oobsel;
+ int res;
++#ifdef DEBUG_BBT
++ int dbg=do_printk;
++#endif
+ // Size of BBT is 1MB if total flash is less than 512MB, 4MB otherwise
+ int bbtSize = this->mtdSize > (512<<20) ? 4 << 20 : 1 << 20;
+
+ bOffsetStart = 0;
+- bOffsetEnd = this->mtdSize - bbtSize; // Skip BBT itself
++ bOffsetEnd = (loff_t)(this->mtdSize - bbtSize); // Skip BBT itself
++#ifdef DEBUG_BBT
++ do_printk=1;
++#endif
+
+ printk(KERN_INFO "----- Contents of BBT -----\n");
+ for (bOffset=bOffsetStart; bOffset < bOffsetEnd; bOffset = bOffset + mtd->erasesize) {
+@@ -1402,12 +1791,50 @@ static int brcmnand_displayBBT(struct mtd_info* mtd)
+ }
+ }
+ printk(KERN_INFO "----- END Contents of BBT -----\n");
++
++#ifdef DEBUG_BBT
++ do_printk=dbg;
++#endif
+ return 0;
+ }
+
+ #if 1
+ // Remove this block in production builds.
+
++
++//#define TEST_CLEAR_BBT1
++//#define TEST_INVALIDATE_BBT0
++
++#ifdef TEST_INVALIDATE_BBT0
++static uint32_t bbt_ctrl_read(uint32_t nandCtrlReg)
++{
++ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
++ + nandCtrlReg - BCHP_NAND_REVISION);
++
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ (nandCtrlReg & 0x3) != 0) {
++ printk("bbt_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);
++}
++
++
++static void bbt_ctrl_write(uint32_t nandCtrlReg, uint32_t val)
++{
++ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
++ + nandCtrlReg - BCHP_NAND_REVISION);
++
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ (nandCtrlReg & 0x3) != 0) {
++ printk( "bbt_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);
++}
++#endif
++
++
+ /*
+ * Process brcmnand= kernel command arg, BEFORE building/reading BBT table.
+ * Currently, the only accepted command is CLEARBBT, which in itself is a dangerous activity.
+@@ -1424,6 +1851,7 @@ static void brcmnand_preprocessKernelArg(struct mtd_info *mtd)
+ //int page;
+
+
++
+ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n", __FUNCTION__, gClearBBT, device_size(mtd), mtd->erasesize);
+
+
+@@ -1431,10 +1859,48 @@ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n", __FUNCTION__, gClearB
+
+ case NANDCMD_CLEARBBT: // Force rescan of BBT (DANGEROUS, may lose Mfg's BIs).
+
++#ifdef TEST_CLEAR_BBT1
++ bOffsetStart = 0x7ff00000;
++ bOffsetEnd = 0x7ff00000;
++printk("%s: gClearBBT=clearbbt, start=%0llx, end=%0llx\n", __FUNCTION__,
++ bOffsetStart, bOffsetEnd);
++#elif defined(TEST_INVALIDATE_BBT0)
++{
++uint32_t oob0[32];
++uint8_t* oob = (uint8_t*) &oob0[0];
++uint32_t acc0;
++uint64_t bbt0Page = ((uint64_t) 0x7ff80000) >> this->page_shift;
++int res;
++
++ bOffsetStart = 0x7ff80000; // FOrce it to skip erase
++ bOffsetEnd = 0x7ff00000;
++ res = this->read_page_oob(mtd, oob, bbt0Page);
++
++
++memset(&oob[9], 0, 4); // * Overwrite the ECC to force EBADMSG
++//bOffsetStart = 0x7ff80000;
++//bOffsetEnd = 0x7ff80000;
++
++ /* Disable ECC */
++ acc0 = brcmnand_disable_ecc();
++
++PRINTK("Invalidate ECC at page %llx\n", bbt0Page);
++
++ res = this->write_page_oob(mtd, oob, bbt0Page);
++
++ if (res) PRINTK("%s: write_page_oob failed, res=%d\n", __FUNCTION__, res);
++
++ // Restore acc0
++ brcmnand_restore_ecc(acc0);
++}
++#else
++
+ bOffsetStart = this->mtdSize - bbtSize;
+ bOffsetEnd = this->mtdSize - mtd->erasesize;
+ printk("%s: gClearBBT=clearbbt, start=%0llx, end=%0llx\n", __FUNCTION__,
+ bOffsetStart, bOffsetEnd);
++#endif
++
+ break;
+
+ case NANDCMD_SHOWBBT:
+@@ -1634,7 +2100,12 @@ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n",
+
+ /* How many pages should we scan */
+ if (this->badblock_pattern->options & NAND_BBT_SCAN2NDPAGE) {
+- numpages = 2;
++ if (this->options & NAND_SCAN_BI_3RD_PAGE) {
++ numpages = 3;
++ }
++ else {
++ numpages = 2;
++ }
+ } else {
+ numpages = 1;
+ }
+@@ -1865,6 +2336,18 @@ PRINTK("%s: gClearBBT = %d\n", __FUNCTION__, gClearBBT);
+ (void) brcmnand_postprocessKernelArg(mtd);
+ }
+
++ /* TESTING 1 2 3: Once we fixed the bug, there is no longer need for this */
++ if (outofspace_bbt) {
++#ifdef DEBUG_BBT
++ do_printk=1;
++#endif
++ brcmnand_reconstruct_bbt(mtd, outofspace_bbt);
++ outofspace_bbt = 0;
++#ifdef DEBUG_BBT
++ do_printk=0;
++#endif
++ }
++
+ return res;
+ }
+
+diff --git a/drivers/mtd/brcmnand/brcmnand_priv.h b/drivers/mtd/brcmnand/brcmnand_priv.h
+index cc0f009..90ece32 100755
+--- a/drivers/mtd/brcmnand/brcmnand_priv.h
++++ b/drivers/mtd/brcmnand/brcmnand_priv.h
+@@ -313,11 +313,20 @@ extern void* get_brcmnand_handle(void);
+ extern void print_oobbuf(const unsigned char* buf, int len);
+ extern void print_databuf(const unsigned char* buf, int len);
+
+-#if CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
++#ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+ extern int brcmnand_cet_update(struct mtd_info *mtd, loff_t from, int *status);
+ extern int brcmnand_cet_prepare_reboot(struct mtd_info *mtd);
+ extern int brcmnand_cet_erasecallback(struct mtd_info *mtd, u_int32_t addr);
+ extern int brcmnand_create_cet(struct mtd_info *mtd);
+ #endif
+
++/*
++ * Disable ECC, and return the original ACC register (for restore)
++ */
++uint32_t brcmnand_disable_ecc(void);
++
++void brcmnand_restore_ecc(uint32_t orig_acc0);
++
++void brcmnand_post_mortem_dump(struct mtd_info* mtd, loff_t offset);
++
+ #endif
+diff --git a/drivers/mtd/maps/bcm9xxxx-flash.c b/drivers/mtd/maps/bcm9xxxx-flash.c
+index ef050d2..adf8854 100644
+--- a/drivers/mtd/maps/bcm9xxxx-flash.c
++++ b/drivers/mtd/maps/bcm9xxxx-flash.c
+@@ -176,7 +176,7 @@ struct map_info bcm9XXXX_map
+ #define AVAIL1_PART (-1)
+ #endif
+ // DEFAULT_SIZE_MB will be defined later based on platforms.
+-#define DEFAULT_ROOTFS_SIZE (DEFAULT_SIZE_MB - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
++#define DEFAULT_ROOTFS_SIZE (((DEFAULT_SIZE_MB)<<20) - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
+
+
+ static struct mtd_partition bcm9XXXX_parts[] = {
+@@ -213,7 +213,7 @@ static struct mtd_partition bcm9XXXX_parts[] = {
+
+ /* default for 32MB+ platforms */
+
+-#define DEFAULT_SIZE_MB 32 /* 32MB flash */
++#define DEFAULT_SIZE_MB 64 /* 32MB flash */
+ #if defined( CONFIG_MTD_ECM_PARTITION)
+ { name: "rootfs", offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ { name: "avail1", offset: DEFAULT_ROOTFS_SIZE, size: DEFAULT_AVAIL1_SIZE },
+@@ -249,12 +249,27 @@ void (*gInitialize_Nor_Partition)(void) = (void (*)(void)) 0;
+ EXPORT_SYMBOL(gInitialize_Nor_Partition);
+ #endif
+
++
++
++#if 1 // Debugging
++static void print_partition(void)
++{
++ int i;
++
++ for (i=0; i<gNumParts; i++) {
++ PRINTK("i=%d, name=%s, start=%0llx, size=%0llx\n",
++ i, bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].offset,
++ bcm9XXXX_parts[i].size);
++ }
++}
++#endif
++
+ int __init init_bcm9XXXX_map(void)
+ {
+ unsigned int avail1_size = DEFAULT_AVAIL1_SIZE;
+ int i;
+ struct cfi_private *cfi;
+- u_int64_t ACTUAL_FLASH_SIZE = (u_int64_t) WINDOW_SIZE;
++ unsigned long ACTUAL_FLASH_SIZE = (unsigned long) WINDOW_SIZE;
+ unsigned long FLASH_BASE = WINDOW_ADDR;
+
+ #ifdef CONFIG_MTD_ECM_PARTITION
+@@ -284,6 +299,7 @@ int __init init_bcm9XXXX_map(void)
+
+ //bcm9XXXX_map.size = WINDOW_SIZE;
+ ACTUAL_FLASH_SIZE = 1 << cfi->cfiq->DevSize;
++
+ if (ACTUAL_FLASH_SIZE >= (4<<20)) {
+ FLASH_BASE = 0x20000000 - ACTUAL_FLASH_SIZE;
+ }
+@@ -292,6 +308,8 @@ int __init init_bcm9XXXX_map(void)
+ }
+
+
++PRINTK("%s: cfiq->DevSize=%08x, actual_flash_size=%08lx, Base=%08lx\n",
++ __FUNCTION__, cfi->cfiq->DevSize, ACTUAL_FLASH_SIZE, FLASH_BASE);
+ /*
+ * Now that we know the NOR flash size, map again with correct size and base address.
+ */
+@@ -316,6 +334,9 @@ int __init init_bcm9XXXX_map(void)
+ }
+ gNumParts = ARRAY_SIZE(bcm9XXXX_parts) - 2; /* Minus the 2 extra place holders */
+
++PRINTK("Before adjustment, gNumParts=%d, defaultSize=%dMB\n", gNumParts, DEFAULT_SIZE_MB);
++print_partition();
++
+
+ #ifdef CONFIG_MTD_BRCMNAND_NOR_ACCESS
+ /* If NOR flash is only 4MB, remove the NOR partition, leaving only CFE partition */
+@@ -329,7 +350,30 @@ int __init init_bcm9XXXX_map(void)
+ bcm9XXXX_parts[1].size = bcm9XXXX_parts[0].offset; // NOR flash ends where CFE starts.
+ bcm9XXXX_parts[1].offset = 0;
+
+-#elif defined( CONFIG_MTD_ECM_PARTITION )
++#else
++ /* NOR as only device */
++ #if defined (DEFAULT_SIZE_MB )
++ {
++ unsigned long defaultSize = DEFAULT_SIZE_MB << 20;
++ int i;
++
++ if (ACTUAL_FLASH_SIZE != defaultSize) {
++ // Adjust rootfs partition size, all others remain the same.
++ // rootfs
++ bcm9XXXX_parts[0].offset = 0; // CFE starts at 1FC00000H
++ bcm9XXXX_parts[0].size += (int64_t) (ACTUAL_FLASH_SIZE - defaultSize);
++ //avail1
++ for (i=1; i<gNumParts; i++) {
++ // Adjust partition offset, but only for non NULL partitions. Size remains the same.
++ if ((bcm9XXXX_parts[0].offset != 0 && bcm9XXXX_parts[0].size != 0))
++ {
++ bcm9XXXX_parts[i].offset += (int64_t) (ACTUAL_FLASH_SIZE - defaultSize);
++ }
++ }
++ }
++ }
++ #endif
++ #if defined( CONFIG_MTD_ECM_PARTITION )
+ if (ACTUAL_FLASH_SIZE < (64<<20)) {
+ ecm_size = DEFAULT_OCAP_SIZE;
+ avail1_size = 0;
+@@ -371,7 +415,7 @@ bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+
+
+-#elif defined( DEFAULT_SIZE_MB )
++ #elif defined( DEFAULT_SIZE_MB )
+ if (ACTUAL_FLASH_SIZE != (DEFAULT_SIZE_MB << 20)) {
+ int64_t diffSize = (uint64_t) ACTUAL_FLASH_SIZE - (uint64_t) (DEFAULT_SIZE_MB << 20);
+
+@@ -388,7 +432,8 @@ PRINTK("Part[0] After name=%s, size=%llx, offset=%llx\n", bcm9XXXX_parts[0].name
+ PRINTK("Part[%d] After: name=%s, size=%llx, offset=%llx\n", i, bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+ }
+-#endif
++ #endif // ECM_PARTITION ... else
++#endif // NOR+NAND ... else
+
+
+ if (gBcmSplash) {
+@@ -436,7 +481,8 @@ bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+
+
+-
++PRINTK("After adjustment\n");
++print_partition();
+
+ #if defined(CONFIG_MTD_BRCMNAND)
+ #if defined(CONFIG_MTD_BRCMNAND_NOR_ACCESS)
+diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
+index 0753e22..6ccc89d 100755
+--- a/include/linux/mtd/nand.h
++++ b/include/linux/mtd/nand.h
+@@ -184,6 +184,10 @@ typedef enum {
+ /* This option is defined if the board driver allocates its own buffers
+ (e.g. because it needs them DMA-coherent */
+ #define NAND_OWN_BUFFERS 0x00040000
++
++/* For Hynix MLC flashes, the BI are written to last and (last-2) pages. */
++#define NAND_SCAN_BI_3RD_PAGE 0x00100000
++
+ /* Options set by nand scan */
+ /* Nand scan has allocated controller struct */
+ #define NAND_CONTROLLER_ALLOC 0x80000000
+@@ -492,9 +496,11 @@ extern struct nand_manufacturers nand_manuf_ids[];
+ * that the pattern and the version count are always located in the oob area
+ * of the first block.
+ */
++#define BBT_NULL_PAGE (-1LL)
+ struct nand_bbt_descr {
+ int options;
+- int pages[NAND_MAX_CHIPS];
++
++ int64_t pages[NAND_MAX_CHIPS];
+ int offs;
+ int veroffs;
+ uint8_t version[NAND_MAX_CHIPS];
+@@ -534,6 +540,8 @@ struct nand_bbt_descr {
+ #define NAND_BBT_SAVECONTENT 0x00002000
+ /* Search good / bad pattern on the first and the second page */
+ #define NAND_BBT_SCAN2NDPAGE 0x00004000
++/* For Hynix MLC flashes BI are marked on last and (last-2) pages */
++#define NAND_BBT_SCAN3RDPAGE 0x00008000
+
+ /* The maximum number of blocks to scan for a bbt */
+ #define NAND_BBT_SCAN_MAXBLOCKS 4
--- /dev/null
+diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
+index 0a5babf..d5299d9 100644
+--- a/arch/mips/Kconfig
++++ b/arch/mips/Kconfig
+@@ -157,7 +157,6 @@ config MIPS_BCM7405DX_NAND
+ select BMIPS4380
+ select MTD_BRCMNAND
+ select MTD_BRCMNAND_VERIFY_WRITE
+- select MTD_BLOCK_ROMBLOCK
+
+ config MIPS_BCM97459BX_NAND
+ bool "Support for BCM97459Bx with NAND flash"
+diff --git a/arch/mips/brcmstb/common/cfe_call.c b/arch/mips/brcmstb/common/cfe_call.c
+index 56f2bc9..38c2f77 100644
+--- a/arch/mips/brcmstb/common/cfe_call.c
++++ b/arch/mips/brcmstb/common/cfe_call.c
+@@ -34,6 +34,7 @@
+
+ extern unsigned int cfe_seal;
+
++#if 0 // by doliyu, to fixed mtd block
+ cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
+ { "LINUX_FFS_STARTAD", "LINUX_FFS_SIZE" },
+ { "SPLASH_PART_STARTAD", "SPLASH_PART_SIZE" },
+@@ -45,6 +46,13 @@ cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
+ */
+ { NULL, NULL },
+ };
++#else
++cfeEnvVarPairs_t gCfeEnvVarPairs[] = {
++
++ { NULL, NULL },
++};
++
++#endif
+ EXPORT_SYMBOL(gCfeEnvVarPairs);
+
+ /*
+diff --git a/drivers/mtd/brcmnand/bcm7xxx-nand.c b/drivers/mtd/brcmnand/bcm7xxx-nand.c
+index 6cea6bf..d1cddfd 100644
+--- a/drivers/mtd/brcmnand/bcm7xxx-nand.c
++++ b/drivers/mtd/brcmnand/bcm7xxx-nand.c
+@@ -46,12 +46,13 @@ when who what
+ #include <linux/mtd/brcmnand.h>
+ #include "brcmnand_priv.h"
+
+-#define PRINTK(...)
+-//#define PRINTK printk
++//#define PRINTK(...)
++#define PRINTK printk
+
+ #define DRIVER_NAME "bcm7xxx-nand"
+ #define DRIVER_INFO "Broadcom STB NAND controller"
+
++
+ //#ifdef CONFIG_MTD_PARTITIONS
+ //static const char *part_probes[] = { "cmdlinepart", NULL, };
+ //#endif
+@@ -74,7 +75,9 @@ when who what
+ * start of flash 1f7f_ffff flashSize-8MB rootfs Linux File System
+ */
+ #define SMALLEST_FLASH_SIZE (16<<20)
+-#define DEFAULT_RESERVED_SIZE (8<<20)
++//#define DEFAULT_RESERVED_SIZE (8<<20)
++#define DEFAULT_RESERVED_SIZE (14<<20) //doliyu
++
+ #define DEFAULT_SPLASH_SIZE (1<<20)
+ #define DEFAULT_BBT0_SIZE_MB (1)
+ #define DEFAULT_BBT1_SIZE_MB (4)
+@@ -176,6 +179,7 @@ static struct mtd_partition bcm7XXX_new_partition[] =
+
+ static struct mtd_partition bcm7XXX_old_partition[] =
+ {
++#if 0
+ { 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,8 +193,66 @@ static struct mtd_partition bcm7XXX_old_partition[] =
+ /* 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 /* by doliyu : for splash init*/
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07200000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07200000, size: 4<<20 },
++ { name: "boot", offset: 0x07600000, size: 4<<20 },
++ { name: "splash", offset: 0x07A00000, size: 2<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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},
++ {name: NULL, offset: 0, size: 0}
++ #endif
++};
++
++
++static struct mtd_partition bcm7XXX_marusys_partition[] =
++{
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07400000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07400000, size: 4<<20 },
++ { name: "boot", offset: 0x07800000, size: 4<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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_marusys_splash_partition[] =
++{
++ /* name offset size */
++ { name: "rootfs", offset: 0, size:0x07200000 /* DEFAULT_ROOTFS_SIZE*/ }, /* rootfs is total nand size - 6 M Bytes. referr to cfe. bcm97335_devs.c */
++ { name: "kernel", offset: 0x07200000, size: 4<<20 },
++ { name: "boot", offset: 0x07600000, size: 4<<20 },
++ { name: "splash", offset: 0x07A00000, size: 2<<20 },
++ { name: "cfe", offset: 0x07C00000, size: 1<<20 },
++ { name: "mac", offset: 0x07D00000, size: 1<<19 },
++ { name: "env", offset: 0x07D80000, size: 1<<19 },
++ { name: "nvm", offset: 0x07E00000, 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 */
++ /* 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;
+
+@@ -198,7 +260,9 @@ static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+ static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_new_partition;
+
+ #else
+-static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
++//static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_old_partition;
++static struct mtd_partition* bcm7XXX_nand_parts = bcm7XXX_marusys_splash_partition;
++
+ #endif
+
+ struct brcmnand_info {
+@@ -261,7 +325,7 @@ brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int *numParts)
+ /*
+ * Is XOR disabled? if so use the new partition.
+ */
+- if (nandinfo->brcmnand.xor_disable) {
++ if (nandinfo->brcmnand.xor_disable[0]) { //by doliyu
+ bcm7XXX_nand_parts = bcm7XXX_no_xor_partition;
+
+ if (device_size(mtd) <= (512ULL <<20)) {
+@@ -309,7 +373,7 @@ brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int *numParts)
+
+ 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",
+@@ -375,7 +439,7 @@ print_partition(*numParts);
+ 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("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);
+
+diff --git a/drivers/mtd/brcmnand/brcmnand_base.c b/drivers/mtd/brcmnand/brcmnand_base.c
+index 3bc428a..a43cb1f 100644
+--- a/drivers/mtd/brcmnand/brcmnand_base.c
++++ b/drivers/mtd/brcmnand/brcmnand_base.c
+@@ -537,7 +537,7 @@ static brcmnand_chip_Id brcmnand_chips[] = {
+ .chipId = HYNIX_HY27UT088G2A,
+ .mafId = FLASHTYPE_HYNIX,
+ .chipIdStr = "HYNIX_HY27UT088G2A",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
++ .options = NAND_USE_FLASH_BBT|NAND_SCAN_BI_3RD_PAGE, /* BBT on flash + BI on (last-2) page */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+ .timing1 = 0,
+@@ -550,7 +550,7 @@ static brcmnand_chip_Id brcmnand_chips[] = {
+ .chipId = HYNIX_HY27UAG8T2M,
+ .mafId = FLASHTYPE_HYNIX,
+ .chipIdStr = "HYNIX_HY27UAG8T2M",
+- .options = NAND_USE_FLASH_BBT, /* Use BBT on flash */
++ .options = NAND_USE_FLASH_BBT|NAND_SCAN_BI_3RD_PAGE, /* BBT on flash + BI on (last-2) page */
+ //| NAND_COMPLEX_OOB_WRITE /* Write data together with OOB for write_oob */
+ .idOptions = BRCMNAND_ID_EXT_BYTES,
+ .timing1 = 0,
+@@ -605,13 +605,43 @@ static const unsigned char ffchars[] = {
+
+ //static unsigned char eccmask[128]; // Will be initialized during probe
+
++//static unsigned char eccmask[128]; // Will be initialized during probe
++
++#define BCHP_NAND_LAST_REG BCHP_NAND_BLK_WR_PROTECT
++static uint32_t brcmnand_registerHoles[] = {
++
++ // 3.3 and earlier
++ 0x281c,
++ 0x2844, 0x284c,
++ 0x285c,
++ 0x2888, 0x288c,
++ 0x28b8, 0x28bc,
++#if CONFIG_MTD_BRCMNAND_VERSION > CONFIG_MTD_BRCMNAND_VERS_3_3
++#error "Not supported in 2.6.18 kernels"
++ 0x28c4, 0x28c8, 0x28cc,
++ 0x2910, 0x2914, 0x2918, 0x291c,
++ 0x2920, 0x2924, 0x2928, 0x292c,
++#endif
++};
++
++// Is there a register at the location
++static int inRegisterHoles(uint32_t reg)
++{
++ int i;
++
++ for (i=0; i < ARRAY_SIZE(brcmnand_registerHoles); i++) {
++ if (reg == brcmnand_registerHoles[i])
++ return 1; // In register hole
++ }
++ return 0; // Not in hole
++}
+
+ static uint32_t brcmnand_ctrl_read(uint32_t nandCtrlReg)
+ {
+ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
+ + nandCtrlReg - BCHP_NAND_REVISION);
+
+- if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_LAST_REG ||
+ (nandCtrlReg & 0x3) != 0) {
+ printk("brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+@@ -625,7 +655,7 @@ static void brcmnand_ctrl_write(uint32_t nandCtrlReg, uint32_t val)
+ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
+ + nandCtrlReg - BCHP_NAND_REVISION);
+
+- if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_LAST_REG ||
+ (nandCtrlReg & 0x3) != 0) {
+ printk( "brcmnand_ctrl_read: Invalid register value %08x\n", nandCtrlReg);
+ }
+@@ -689,6 +719,30 @@ if (gdebug > 3) printk("%s: offset=%0llx cs=%d ldw = %08x, udw = %08x\n", __FUN
+ return (ldw); //(ldw ^ 0x1FC00000);
+ }
+
++/*
++ * Disable ECC, and return the original ACC register (for restore)
++ */
++uint32_t brcmnand_disable_ecc(void)
++{
++ uint32_t acc0;
++ uint32_t acc;
++
++ /* Disable ECC */
++ acc0 = brcmnand_ctrl_read(BCHP_NAND_ACC_CONTROL);
++ acc = acc0 & ~(BCHP_NAND_ACC_CONTROL_RD_ECC_EN_MASK | BCHP_NAND_ACC_CONTROL_RD_ECC_BLK0_EN_MASK);
++ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++
++ return acc0;
++}
++
++
++void brcmnand_restore_ecc(uint32_t orig_acc0)
++{
++ brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, orig_acc0);
++}
++
++ // Restore acc
++
+ #if 1
+ /* Dont delete, may be useful for debugging */
+
+@@ -739,7 +793,7 @@ static void print_config_regs(void)
+ 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))
++#define NUM_NAND_REGS (1+((BCHP_NAND_LAST_REG-BCHP_NAND_REVISION)/4))
+
+ static void print_nand_ctrl_regs(void)
+ {
+@@ -1533,7 +1587,7 @@ void dump_nand_regs(struct brcmnand_chip* chip, loff_t offset, uint32_t pa, int
+ uint32_t reg = BCHP_NAND_REVISION+(i*4);
+ uint32_t regval;
+
+- if (reg == 0x281c) { // No NAND register at 0x281c
++ if (inRegisterHoles(reg)) { // No NAND register at 0x281c
+ regval = 0;
+ }
+ else {
+@@ -1603,6 +1657,7 @@ static int brcmnand_EDU_write_is_complete(struct mtd_info *mtd, int* outp_needBB
+ if (hif_err != 0) // No timeout
+ {
+ uint32_t flashStatus; // = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ int retries = 20;
+
+ #if 0
+ if (!(hif_err & HIF_INTR2_EDU_DONE))
+@@ -1612,11 +1667,7 @@ printk("hif_err=%08x\n", hif_err);
+ /******************* 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;
++
+
+ //Clear interrupt:
+ //EDU_volatileWrite(EDU_BASE_ADDRESS + EDU_DONE, 0x00000000);
+@@ -1624,28 +1675,36 @@ printk("hif_err=%08x\n", hif_err);
+ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+
+ /* Just to be dead sure */
+- 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);
++ while (!(flashStatus & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK) && retries-- > 0) {
++ // Cant call the ctrl version, we are in ISR context
++ // ret = brcmnand_ctrl_write_is_complete(mtd, outp_needBBT);
++ udelay(5000); // Wait for a total of 100 usec
+ //dump_nand_regs(chip, 0, 0, numDumps++);
+- goto out;
++ flashStatus = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
+ }
+
+-#ifdef EDU_DEBUG_5
+-/* else */ {
++ //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;
+
+-// 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 */
++ /* sanity check on last cmd status */
++ if ((edu_err & EDU_ERR_STATUS_NandWrite) && !(flashStatus & 0x1)) {
++ int cmd = chip->ctrl_read(BCHP_NAND_CMD_START);
++ printk(KERN_ERR"%s: false EDU write error status (edu_err: 0x%08X, flashStatus: 0x%08X) for NAND CMD %x \n",
++ __FUNCTION__, edu_err, flashStatus, cmd);
++ edu_err = EDU_get_error_status_register();
++ }
++
++ /* we primarily rely on NAND controller FLASH_STATUS bit 0, since EDU error may not be cleared yet */
++ if ((edu_err & EDU_ERR_STATUS_NandWrite) && (flashStatus & 0x01)) {
++ /* // Write is complete, but not successful, flash error, will mark block bad */
+ *outp_needBBT = 1;
+- printk("EDU_write_is_complete(): error 0x%08X\n", edu_err);
+- ret = 0;
++ printk(KERN_ERR"%s: flash write error (edu_err: 0x%08X, flashStatus: 0x%08X)\n",
++ __FUNCTION__, edu_err, flashStatus);
++ ret = 1; // Write is complete, but not successful
++
+ goto out;
+ }
+ else if (edu_err) {
+@@ -1743,6 +1802,42 @@ printk("%s: AUTO: oob=%p, chip->oob_poi=%p, ooboffs=%d, len=%d, bytes=%d, boffs=
+ }
+
+
++
++
++#define DEBUG_UNCERR
++#ifdef DEBUG_UNCERR
++static uint32_t uncErrOob[7];
++static u_char uncErrData[512];
++#endif
++
++void brcmnand_post_mortem_dump(struct mtd_info* mtd, loff_t offset)
++{
++ int i;
++
++ printk("%s at offset %llx\n", __FUNCTION__, offset);
++ dump_stack();
++
++ printk("NAND registers snapshot \n");
++ for (i=0; i<NUM_NAND_REGS; i++) {
++ uint32_t reg = BCHP_NAND_REVISION+(i*4);
++ uint32_t regval;
++
++ if (inRegisterHoles(reg)) { // No NAND register at 0x281c
++ regval = 0;
++ }
++ else {
++ regval = brcmnand_ctrl_read(reg);
++ }
++ if ((i % 4) == 0) {
++ printk("\n%08x:", reg);
++ }
++ printk(" %08x", regval);
++ }
++
++}
++
++
++
+ /*
+ * Returns 0 on success
+ * Expect a controller read was done before hand, and that the OOB data are read into NAND registers.
+@@ -1769,7 +1864,7 @@ static int brcmnand_handle_false_read_ecc_unc_errors(
+ //u_char oobbuf[16];
+ int erased, allFF;
+ int i;
+- uint32_t acc, acc0;
++ uint32_t acc0;
+ //int valid;
+
+ /*
+@@ -1779,19 +1874,17 @@ static int brcmnand_handle_false_read_ecc_unc_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);
++ acc0 = brcmnand_disable_ecc();
+
+ chip->ctrl_writeAddr(chip, offset, 0);
+ PLATFORM_IOFLUSH_WAR();
+- chip->ctrl_write(BCHP_NAND_CMD_START, OP_SPARE_AREA_READ);
++ chip->ctrl_write(BCHP_NAND_CMD_START, OP_PAGE_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);
++ brcmnand_restore_ecc(acc0);
+ #endif
+
+ for (i = 0; i < 4; i++) {
+@@ -1815,8 +1908,10 @@ print_oobbuf(p8, 16);
+ if (!erased) {
+ printk("p8[%d]=%02x\n", i, p8[i]);
+ break;
++ }
+ }
+- }
++
++
+ 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,
+@@ -1847,6 +1942,25 @@ chip->eccOobSize, chip->eccbytes, erased, allFF);}
+ /* Real error: Disturb read returns uncorrectable errors */
+ ret = -EBADMSG;
+ if (gdebug > 3 ) {printk("<-- %s: ret -EBADMSG\n", __FUNCTION__);}
++
++#ifdef DEBUG_UNCERR
++
++ // Copy the data buffer
++ brcmnand_from_flash_memcpy32(chip, uncErrData, offset, mtd->eccsize);
++ for (i = 0; i < 4; i++) {
++ uncErrOob[i] = p32[i];
++ }
++
++ printk("%s: Uncorrectable error at offset %llx\n", __FUNCTION__, offset);
++
++ printk("Data:\n");
++ print_databuf(uncErrData, mtd->eccsize);
++ printk("Spare Area\n");
++ print_oobbuf((u_char*) uncErrOob, 16);
++
++ brcmnand_post_mortem_dump(mtd, offset);
++
++#endif
+ }
+
+ return ret;
+@@ -2027,16 +2141,14 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ struct brcmnand_chip* chip = mtd->priv;
+ static uint32_t ucdata[128];
+ u_char* uncorr_data = (u_char*) ucdata;
+- uint32_t acc, acc0;
++ uint32_t acc0;
+ int valid;
+ unsigned long irqflags;
+
+ int ret = 0, retries=2;
+
+ /* 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);
++ acc0 = brcmnand_disable_ecc();
+
+ while (retries >= 0) {
+ // Resubmit the read-op
+@@ -2070,7 +2182,7 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ }
+
+ if (retries < 0) {
+- return ret;
++ goto restore_ecc;
+ }
+
+ // Reread the uncorrected buffer.
+@@ -2098,8 +2210,10 @@ static int brcmnand_Hamming_WAR(struct mtd_info* mtd, loff_t offset, void* buffe
+ offset, inp_hwECC[0], inp_hwECC[1], inp_hwECC[2],
+ inoutp_swECC[0], inoutp_swECC[1], inoutp_swECC[2]);
+ }
++
++restore_ecc:
+ // Restore acc
+- brcmnand_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++ brcmnand_restore_ecc(acc0);
+ return ret;
+ }
+ #endif
+@@ -2432,15 +2546,22 @@ brcmnand_edu_read_comp_intr(struct mtd_info* mtd,
+ 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 retries=20;
+
+ if (intr_status & HIF_INTR2_EDU_ERR) {
+ printk("%s: Should not call me with EDU ERR\n", __FUNCTION__);
+ BUG();
+ }
+ 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();
++ while (!(intfc_status & BCHP_NAND_INTFC_STATUS_CTLR_READY_MASK) && retries > 0) {
++ retries--;
++ udelay(5); // NAND guaranteed to finish read within 90us, this should be plenty of time
++ intfc_status = chip->ctrl_read(BCHP_NAND_INTFC_STATUS);
++ }
++ if (retries <= 0) {
++ printk("%s: Impossible, HIF_INTR2_CTRL_READY already asserted, intr_status=%08x, offset=%llx\n",
++ __FUNCTION__, intr_status, offset);
++ //BUG(); Should assert here, but don't want to crash. HW guy guaranteed that it is set!!!!
+ }
+
+ // Remember last good sector read. Needed for HIF_INTR2 workaround.
+@@ -3905,6 +4026,7 @@ static int brcmnand_refresh_blk(struct mtd_info *mtd, loff_t from)
+ * EDU ISR Implementation
+ */
+
++extern void EDU_issue_command(uint32_t dram_addr, uint32_t ext_addr,uint8 cmd);
+
+ /*
+ * Submit the read op, then return immediately, without waiting for completion.
+@@ -4437,7 +4559,7 @@ static int brcmnand_do_read_ops(struct mtd_info *mtd, loff_t from,
+ 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);
++ numPages = min(MAX_JOB_QUEUE_SIZE, (int) (readlen>>chip->page_shift));
+
+ // Only do Batch mode if all 3 conditions are satisfied.
+ if (!aligned || !buffer_aligned || numPages <= 1) {
+@@ -4935,22 +5057,26 @@ if (gdebug > 3) printk("-->%s: addr=%0llx\n", __FUNCTION__, addr);
+ * (2) OOB area is included in ECC calculation for BCH, so no need to check it
+ * separately.
+ */
+- if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
+- return 0;
+- }
++
+
+ #if 1
+ page = ((uint64_t) addr) >> chip->page_shift;
+ // Must read entire page
+ ret = chip->read_page(mtd, vbuf, oobbuf, page);
+ if (ret) {
+- printk(KERN_ERR "%s: brcmnand_read_page at %08x failed ret=%d\n",
++ printk(KERN_ERR "%s: read_page at %08x failed ret=%d\n",
+ __FUNCTION__, (unsigned int) addr, ret);
++ brcmnand_post_mortem_dump(mtd, addr);
+ return ret;
+ }
+
++
+ #endif
+
++ if (chip->ecclevel != BRCMNAND_ECC_HAMMING) {
++ return ret; // We won't verify the OOB if not Hamming
++ }
++
+ /*
+ * If there are no Input Buffer, there is nothing to verify.
+ * Reading the page should be enough.
+@@ -5087,6 +5213,7 @@ printk("-->%s, offset=%0llx\n", __FUNCTION__, offset);}
+ if (ret < 0) {
+ printk(KERN_ERR "%s: brcmnand_posted_write_cache failed at offset=%0llx, ret=%d\n",
+ __FUNCTION__, offset + dataWritten, ret);
++ dataWritten = 0;
+ return ret;
+ }
+ dataWritten += chip->eccsize;
+@@ -5142,7 +5269,7 @@ printk("-->%s, page=%0llx\n", __FUNCTION__, page);}
+ #endif
+
+
+- if (unlikely(!EDU_buffer_OK(inp_buf, EDU_WRITE)))
++ if (unlikely(!EDU_buffer_OK((void*) 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 */
+@@ -5186,6 +5313,9 @@ if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, tryin
+ while (!list_empty(&gJobQ.jobQ)) {
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+ ret = ISR_wait_for_queue_completion();
++ if (ret) {
++ dataWritten = 0;
++ }
+ spin_lock_irqsave(&gJobQ.lock, flags);
+ }
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+@@ -5267,6 +5397,9 @@ if (gdebug>3) printk("++++++++++++++++++++++++ %s: buffer not 32B aligned, tryin
+ while (!list_empty(&gJobQ.jobQ)) {
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+ ret = ISR_wait_for_queue_completion();
++ if (ret) {
++ dataWritten = 0;
++ }
+ spin_lock_irqsave(&gJobQ.lock, flags);
+ }
+ spin_unlock_irqrestore(&gJobQ.lock, flags);
+@@ -5428,7 +5561,7 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+ /*
+ * Group several pages for submission for small page NAND
+ */
+- numPages = min(MAX_JOB_QUEUE_SIZE, writelen>>chip->page_shift);
++ numPages = min(MAX_JOB_QUEUE_SIZE, (int) (writelen>>chip->page_shift));
+
+ // If Batch mode
+ if (buffer_aligned && numPages > 1 && chip->pageSize == chip->eccsize) {
+@@ -5455,6 +5588,10 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s, offset=%0llx\n", __FUNCTION__, to);
+ }
+
+ ret = brcmnand_isr_write_pages(mtd, buf, chip->oob_poi, realpage, numPages);
++ if (ret) {
++ ops->retlen = 0;
++ return ret;
++ }
+
+ }
+
+@@ -5520,8 +5657,8 @@ printk("-->%s, offset=%0llx\n", __FUNCTION__, to);}
+
+ /* Do not allow writes past end of device */
+ if (unlikely((to + len) > device_size(mtd))) {
+- DEBUG(MTD_DEBUG_LEVEL0, "%s: ", __FUNCTION__,
+- "Attempt to write beyond end of device\n");
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write beyond end of device\n",
++ __FUNCTION__);
+ printk("Attempt to write beyond end of device\n");
+ }
+ if (!len)
+@@ -5674,8 +5811,8 @@ printk("-->%s, offset=%0llx, len=%08x\n", __FUNCTION__, to, (int) ops->len);}
+
+ if (unlikely((to + ops->len) > device_size(mtd)))
+ {
+- DEBUG(MTD_DEBUG_LEVEL0, "%s: ", __FUNCTION__,
+- "Attempt to write beyond end of device\n");
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt to write beyond end of device\n",
++ __FUNCTION__);
+ printk("Attempt to write beyond end of device\n");
+ return -EINVAL;
+ }
+@@ -6137,8 +6274,9 @@ if (gdebug > 3 ) {printk( "%s: Erase past end of device, instr_addr=%016llx, in
+ */
+ /* Check if we have a bad block, we do not erase bad blocks */
+ if (brcmnand_block_checkbad(mtd, addr, 0, allowbbt)) {
+- printk (KERN_ERR "%s: attempt to erase a bad block at addr 0x%08x\n", __FUNCTION__, (unsigned int) addr);
++ printk (KERN_ERR "%s: attempt to erase a bad block at addr 0x%llx\n", __FUNCTION__, addr);
+ instr->state = MTD_ERASE_FAILED;
++dump_stack();
+ goto erase_one_block;
+ }
+
+@@ -6898,11 +7036,11 @@ static int brcmnand_probe(struct mtd_info *mtd, unsigned int chipSelect)
+ if (chip->cellinfo) {
+ unsigned long devIdExt = chip->ctrl_read(BCHP_NAND_FLASH_DEVICE_ID_EXT);
+ unsigned char devId5thByte = (devIdExt & 0xff000000) >> 24;
+- unsigned int nbrPlanes;
+- unsigned int planeSizeMB, chipSizeMB, nandConfigChipSize;
++ unsigned int nbrPlanes = 0;
++ unsigned int planeSizeMB = 0, chipSizeMB, nandConfigChipSize;
+ unsigned char devId4thdByte = (chip->device_id & 0xff);
+- unsigned int pageSize, pageSizeBits;
+- unsigned int blockSize, blockSizeBits;
++ unsigned int pageSize = 0, pageSizeBits = 0;
++ unsigned int blockSize = 0, blockSizeBits = 0;
+ //unsigned int oobSize;
+
+
+@@ -7043,7 +7181,7 @@ PRINTK("nandConfigChipSize = %04x\n", nandConfigChipSize);
+ else if ((brcmnand_chips[i].idOptions & BRCMNAND_ID_EXT_BYTES_TYPE2) ==
+ BRCMNAND_ID_EXT_BYTES_TYPE2)
+ {
+- unsigned int oobSize, oobSizePerPage;
++ unsigned int oobSize, oobSizePerPage = 0;
+ //uint32_t nandconfig, chipSizeShift;
+
+ /*---------------- 4th ID byte: page size, block size and OOB size ---------------- */
+@@ -7663,11 +7801,6 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ return (-EINVAL);
+ cs = chip->CS[chip->numchips - 1];
+ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+-
+-
+-
+-
+-
+ }
+
+ /*
+@@ -7678,6 +7811,7 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ printk("NAND_CS_NAND_XOR=%08x\n", nand_xor);
+ //
+ #ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
++#error ""
+ /* 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);
+@@ -7699,6 +7833,11 @@ PRINTK("gNumNand=%d, cs=%d\n", gNumNand, cs);
+ printk("Disabling XOR on CS#%1d\n", chip->CS[i]);
+ chip->xor_disable[i] = 1;
+ }
++ else
++ {
++ printk("Enable XOR on CS#%1d\n", chip->CS[i]);
++ chip->xor_disable[i] = 0;
++ }
+ }
+ }
+ #else
+@@ -8021,7 +8160,7 @@ printk("Corrected ECC to Hamming for SLC flashes: ACC_CONTROL = %08lx from %08lx
+ int corr_threshold;
+
+ if ( chip->ecclevel >= BRCMNAND_ECC_BCH_4) {
+- corr_threshold = 2;
++ corr_threshold = 3; // Changed from 2, since refresh is costly and vulnerable to AC-ON/OFF tests.
+ }
+ else {
+ corr_threshold = 1; // 1 , default for Hamming
+@@ -8227,6 +8366,13 @@ printk(KERN_INFO "ECC layout=%s\n", "brcmnand_oob_bch8_4k");
+ chip->ecclayout = &brcmnand_oob_bch8_4k;
+ break;
+ }
++ else if (NAND_IS_MLC(chip) && mtd->oobsize >= 216 &&
++ chip->ecclevel == BRCMNAND_ECC_BCH_4 && mtd->writesize == 4096)
++ {
++printk(KERN_INFO "ECC layout=%s\n", "brcmnand_oob_bch4_4k");
++ chip->ecclayout = &brcmnand_oob_bch4_4k;
++ break;
++ }
+
+ printk(KERN_WARNING "No oob scheme defined for oobsize %d\n", mtd->oobsize);
+ BUG();
+@@ -8389,8 +8535,8 @@ printk(KERN_INFO "%s, eccsize=%d, writesize=%d, eccsteps=%d, ecclevel=%d, eccbyt
+
+
+
+-#ifdef CONFIG_MTD_BRCMNAND_DISABLE_XOR
+-gdebug=4;
++#if 0
++//gdebug=4;
+ printk("-----------------------------------------------------\n");
+ print_nand_ctrl_regs();
+ printk("-----------------------------------------------------\n");
+@@ -8411,7 +8557,6 @@ gdebug=4;
+ }
+ #endif
+
+-//gdebug=0;
+ PRINTK("%s 99\n", __FUNCTION__);
+
+ return err;
+diff --git a/drivers/mtd/brcmnand/brcmnand_bbt.c b/drivers/mtd/brcmnand/brcmnand_bbt.c
+index 91e8510..d8924de 100644
+--- a/drivers/mtd/brcmnand/brcmnand_bbt.c
++++ b/drivers/mtd/brcmnand/brcmnand_bbt.c
+@@ -67,6 +67,7 @@ when who what
+ */
+
+
++#include <linux/kernel.h>
+ #include <linux/slab.h>
+ #include <linux/types.h>
+ #include <linux/mtd/mtd.h>
+@@ -76,6 +77,7 @@ when who what
+ #include <linux/bitops.h>
+ #include <linux/delay.h>
+ #include <linux/vmalloc.h>
++#include <linux/syscalls.h>
+
+ #include "brcmnand_priv.h"
+
+@@ -84,10 +86,50 @@ when who what
+ #define PRINTK(...)
+ //#define PRINTK printk
+
++char brcmNandBBTMsg[1024];
++// #define BBT_DEBUG
++#ifdef BBT_DEBUG // Bypass quiet flag
++
++static int do_printk = 0; // To be turned on when we hit BBT out of space
++asmlinkage int bbt_vprintk(const char *fmt, va_list args)
++{
++ //unsigned long flags;
++ int printed_len;
++ //char *p;
++ //static char printk_buf[1024];
++ //static int log_level_unknown = 1;
++
++ extern void uart_puts(const char *);
++
++ printed_len = vsprintf(brcmNandBBTMsg, fmt, args);
++ uart_puts(brcmNandBBTMsg);
++
++ return printed_len;
++
++}
++asmlinkage int bbt_printk(const char *fmt, ...)
++{
++ va_list args;
++ int r;
++
++ if (!do_printk)
++ return 0;
++
++ va_start(args, fmt);
++ r = bbt_vprintk(fmt, args);
++ va_end(args);
++
++ return r;
++}
++
++#define PRINTK bbt_printk
++//#define printk bbt_printk
++
++#endif
++
+ extern int gClearBBT;
+ extern int gdebug;
+
+-char brcmNandBBTMsg[1024];
+
+ /* brcmnand=
+ * rescan: 1. Rescan for bad blocks, and update existing BBT
+@@ -204,7 +246,7 @@ __FUNCTION__,i, i, td->pattern[i], td->offs+i, p[td->offs + i]);
+ * Read the bad block table starting from page.
+ *
+ */
+-static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int num,
++static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, uint64_t page, int num,
+ int bits, int offs, int reserved_block_code)
+ {
+ int res, i, j, act = 0;
+@@ -212,7 +254,9 @@ static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int
+ size_t retlen, len, totlen;
+ loff_t from;
+ uint8_t msk = (uint8_t) ((1 << bits) - 1);
+-
++#ifdef BBT_DEBUG
++int save_do_printk = do_printk;
++#endif
+ totlen = (num * bits) >> 3;
+ from = ((loff_t)page) << this->page_shift;
+
+@@ -222,6 +266,8 @@ static int brcmnand_read_bbt (struct mtd_info *mtd, uint8_t *buf, int page, int
+ this->ctrl_write(BCHP_NAND_ECC_CORR_ADDR, 0);
+ this->ctrl_write(BCHP_NAND_ECC_UNC_ADDR, 0);
+
++//do_printk=1;
++
+
+ while (totlen) {
+ len = min (totlen, (size_t) (1 << this->bbt_erase_shift));
+@@ -229,10 +275,14 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ res = mtd->read(mtd, from, len, &retlen, buf);
+ if (res < 0) {
+ if (retlen != len) {
+- printk (KERN_INFO "brcmnand_bbt: Error reading bad block table\n");
++ printk (KERN_ERR "%s: Error reading bad block table, retlen=%d\n", __FUNCTION__);
+ return res;
+ }
+- printk (KERN_WARNING "brcmnand_bbt: ECC error while reading bad block table\n");
++ printk (KERN_ERR "%s: ECC error while reading bad block table\n", __FUNCTION__);
++PRINTK ("%s: ECC error while reading bad block table, res=%d\n", __FUNCTION__, res);
++
++ /* THT 11/10/09: If read fails, we should ignore the data, so return w/o analyzing it */
++ return res;
+ }
+
+ /* Analyse data */
+@@ -245,6 +295,8 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ if (reserved_block_code && (tmp == reserved_block_code)) {
+ printk (KERN_DEBUG "nand_read_bbt: Reserved block at 0x%08x\n",
+ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
++PRINTK ( "nand_read_bbt: Reserved block at 0x%08x\n",
++ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06);
+ mtd->ecc_stats.bbtblocks++;
+ continue;
+@@ -253,6 +305,8 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ * message to MTD_DEBUG_LEVEL0 */
+ printk (KERN_DEBUG "nand_read_bbt: Bad block at 0x%08x\n",
+ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
++PRINTK ( "nand_read_bbt: Bad block at 0x%08x\n",
++ ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ /* Factory marked bad or worn out ? */
+ if (tmp == 0)
+ this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06);
+@@ -261,8 +315,11 @@ PRINTK("%s: calling read_ecc len=%d, bits=%d, num=%d, totallen=%d\n", __FUNCTION
+ mtd->ecc_stats.badblocks++;
+ }
+ }
++#ifdef DEBUG_BBT
++do_printk=save_do_printk;
++#endif
+ totlen -= len;
+- from += len;
++ from += (loff_t)len;
+ }
+ return 0;
+ }
+@@ -283,6 +340,12 @@ static int brcmnand_read_abs_bbt (struct mtd_info *mtd, uint8_t *buf, struct nan
+ struct brcmnand_chip *this = mtd->priv;
+ int res = 0, i;
+ int bits;
++#ifdef DEBUG_BBT
++int save_do_printk = do_printk;
++do_printk = 1;
++#endif
++PRINTK("-->brcmnand_read_abs_bbt td=%c%c%c%c, td->pages[0]=%llx\n",
++ td->pattern[0], td->pattern[1],td->pattern[2], td->pattern[3], td->pages[0]);
+
+ PRINTK("-->brcmnand_read_abs_bbt\n");
+ bits = td->options & NAND_BBT_NRBITS_MSK;
+@@ -293,6 +356,9 @@ PRINTK("-->brcmnand_read_abs_bbt\n");
+ res = brcmnand_read_bbt (mtd, buf, td->pages[i], this->chipSize >> this->bbt_erase_shift, bits, offs, td->reserved_block_code);
+ if (res) {
+ PRINTK("<-- brcmnand_read_abs_bbt ret = %d\n", res);
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return res;
+ }
+ offs += this->chipSize >> (this->bbt_erase_shift + 2);
+@@ -302,10 +368,16 @@ PRINTK("<-- brcmnand_read_abs_bbt ret = %d\n", res);
+ (uint32_t) (this->mtdSize >> this->bbt_erase_shift), bits, 0, td->reserved_block_code);
+ if (res) {
+ PRINTK("<-- brcmnand_read_abs_bbt 2 ret = %d\n", res);
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return res;
+ }
+ }
+ PRINTK("<-- brcmnand_read_abs_bbt ret 0\n");
++#ifdef DEBUG_BBT
++do_printk = save_do_printk;
++#endif
+ return 0;
+ }
+
+@@ -316,15 +388,23 @@ static int brcmnand_scan_read_raw(struct mtd_info *mtd, uint8_t *buf, loff_t off
+ size_t len)
+ {
+ struct mtd_oob_ops ops;
++ int ret;
+
+ ops.mode = MTD_OOB_RAW;
+ ops.ooboffs = 0;
+ ops.ooblen = mtd->oobsize;
+- ops.oobbuf = buf;
++ ops.oobbuf = &buf[mtd->writesize];
+ ops.datbuf = buf;
+ ops.len = len;
+
+- return mtd->read_oob(mtd, offs, &ops);
++ ret = mtd->read_oob(mtd, offs, &ops);
++
++PRINTK("%s: Reading BBT Sig @%0llx, OOB=\n", __FUNCTION__, offs);
++#ifdef DEBUG_BBT
++if (do_printk || gdebug)
++ print_oobbuf(ops.oobbuf, mtd->oobsize);
++#endif
++ return ret;
+ }
+
+ /*
+@@ -377,7 +457,9 @@ PRINTK("read primary version\n");
+ brcmnand_scan_read_raw(mtd, buf, td->pages[0] << this->page_shift,
+ mtd->writesize);
+ td->version[0] = buf[mtd->writesize + td->veroffs];
+- printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
++ printk(KERN_DEBUG "Bad block table at page %llx, version 0x%02X\n",
++ td->pages[0], td->version[0]);
++PRINTK( "Bad block table at page %llx, version 0x%02X\n",
+ td->pages[0], td->version[0]);
+ }
+
+@@ -387,8 +469,10 @@ PRINTK("read mirror version\n");
+ brcmnand_scan_read_raw(mtd, buf, md->pages[0] << this->page_shift,
+ mtd->writesize);
+ md->version[0] = buf[mtd->writesize + md->veroffs];
+- printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
++ printk(KERN_DEBUG "Bad block table at page %llx, version 0x%02X\n",
+ md->pages[0], md->version[0]);
++PRINTK( "Bad block table at page %llx, version 0x%02X\n",
++ td->pages[0], td->version[0]);
+ }
+ PRINTK("<-- %s\n", __FUNCTION__);
+ return 1;
+@@ -434,7 +518,7 @@ static int brcmnand_scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr
+ int pagesPerBlock = mtd->erasesize/mtd->writesize;
+
+ dir = -1;
+- offs += (pagesPerBlock -1 ) * mtd->writesize;
++ offs += (loff_t)((pagesPerBlock -1 ) * mtd->writesize);
+ }
+ ops.len = mtd->oobsize;
+ ops.ooblen = mtd->oobsize;
+@@ -444,19 +528,26 @@ static int brcmnand_scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr
+ ops.mode = MTD_OOB_PLACE;
+
+ for (j=0; j < len; j++) {
+- /*
+- * Read the full oob until read_oob is fixed to
+- * handle single byte reads for 16 bit
+- * buswidth
+- */
+ ret = mtd->read_oob(mtd, offs, &ops);
++ if (ret == -EBADMSG) {// Uncorrectable errors
++ uint32_t acc0;
++
++ // Disable ECC
++ acc0 = brcmnand_disable_ecc();
++
++ // Re-read the OOB
++ ret = mtd->read_oob(mtd, offs, &ops);
++
++ // Enable ECC back
++ brcmnand_restore_ecc(acc0);
++ }
+ if (ret)
+ return ret;
+
+ if (check_short_pattern(buf, bd))
+ return 1;
+
+- offs += (dir * mtd->writesize);
++ offs += (loff_t)(dir * mtd->writesize);
+ }
+ return 0;
+ }
+@@ -489,8 +580,14 @@ PRINTK("-->brcmnand_create_bbt, bbt_erase_shift=%d, this->page_shift=%d\n", this
+ if (bd->options & NAND_BBT_SCANALLPAGES)
+ len = 1 << (this->bbt_erase_shift - this->page_shift);
+ else { // Also for MLC
+- if (bd->options & NAND_BBT_SCAN2NDPAGE)
+- len = 2;
++ if (bd->options & NAND_BBT_SCAN2NDPAGE) {
++ if (this->options & NAND_SCAN_BI_3RD_PAGE) {
++ len = 3; // For Hynix MLC chips
++ }
++ else {
++ len = 2;
++ }
++ }
+ else
+ len = 1;
+ }
+@@ -546,7 +643,7 @@ from, bd->options, mtd64_ll_low(startblock), mtd64_ll_low(numblocks));
+ }
+
+ i += 2;
+- from += (1 << this->bbt_erase_shift);
++ from += (loff_t)(1 << this->bbt_erase_shift);
+ }
+ return 0;
+ }
+@@ -577,6 +674,7 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ int scanlen = mtd->writesize + mtd->oobsize;
+ int bbtblocks;
+ int blocktopage = this->bbt_erase_shift - this->page_shift;
++ int ret = 0;
+
+ /* Search direction top -> down ? */
+ if (td->options & NAND_BBT_LASTBLOCK) {
+@@ -604,15 +702,22 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ for (i = 0; i < chips; i++) {
+ /* Reset version information */
+ td->version[i] = 0;
+- td->pages[i] = -1;
++ td->pages[i] = BBT_NULL_PAGE;
+ /* Scan the maximum number of blocks */
+ for (block = 0; block < td->maxblocks; block++) {
+
+- int actblock = startblock + dir * block;
++ int64_t actblock = startblock + dir * block;
+ loff_t offs = (uint64_t) actblock << this->bbt_erase_shift;
+
++
+ /* Read first page */
+- brcmnand_scan_read_raw(mtd, buf, offs, mtd->writesize);
++ ret = brcmnand_scan_read_raw(mtd, buf, offs, mtd->writesize);
++
++ /* Here if the read routine returns -77 then the BBT data is invalid, ignore it */
++
++ // Ignore BBT if not there.
++ if (ret)
++ continue;
+ if (!check_pattern(buf, scanlen, mtd->writesize, td)) {
+ td->pages[i] = actblock << blocktopage;
+ if (td->options & NAND_BBT_VERSION) {
+@@ -625,10 +730,12 @@ static int brcmnand_search_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_
+ }
+ /* Check, if we found a bbt for each requested chip */
+ for (i = 0; i < chips; i++) {
+- if (td->pages[i] == -1)
+- printk (KERN_WARNING "Bad block table not found for chip %d\n", i);
++ if (td->pages[i] == BBT_NULL_PAGE)
++ printk (KERN_WARNING "Bad block table %c%c%c%c not found for chip %d\n",
++ td->pattern[0], td->pattern[1], td->pattern[2], td->pattern[3], i);
++
+ else
+- printk(KERN_DEBUG "Bad block table found at page %d, version 0x%02X\n", td->pages[i],
++ printk(KERN_DEBUG "Bad block table found at page %llx, version 0x%02X\n", td->pages[i],
+ td->version[i]);
+ }
+ return 0;
+@@ -674,6 +781,8 @@ static int brcmnand_search_read_bbts (struct mtd_info *mtd, uint8_t *buf,
+ * for BBT.
+ *
+ */
++// 0 == OK, 1 = outofspace for BBT0, 2=outofspace for BBT1
++static int outofspace_bbt = 0;
+ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ struct nand_bbt_descr *td, struct nand_bbt_descr *md,
+ int chipsel)
+@@ -682,7 +791,7 @@ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ struct erase_info einfo;
+ int i, j, res, chip = 0, skip, dir;
+ uint32_t bits, offs, sft, sftmsk, bbtoffs;
+- uint64_t startblock, numblocks, page, i64;
++ int64_t startblock, numblocks, page, i64;
+ int nrchips, pageoffs, ooboffs;
+ uint8_t msk[4];
+ uint8_t rcode = td->reserved_block_code;
+@@ -690,6 +799,7 @@ static int brcmnand_write_bbt(struct mtd_info *mtd, uint8_t *buf,
+ loff_t to;
+ struct mtd_oob_ops ops;
+
++bbt_outofspace_retry:
+
+ DEBUG(MTD_DEBUG_LEVEL3, "-->%s\n", __FUNCTION__);
+ ops.ooblen = mtd->oobsize;
+@@ -714,7 +824,8 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s\n", __FUNCTION__);
+ nrchips = 1;
+ }
+
+-PRINTK("numblocks=%d, nrchips=%d\n", numblocks, nrchips);
++PRINTK("%s Creating %c%c%c%c numblocks=%d, nrchips=%d, td->pages[0]=%llx\n",
++__FUNCTION__, td->pattern[0],td->pattern[1], td->pattern[2], td->pattern[3] , numblocks, nrchips, td->pages[0]);
+
+ /* Loop through the chips */
+ for (; chip < nrchips; chip++) {
+@@ -723,7 +834,7 @@ PRINTK("numblocks=%d, nrchips=%d\n", numblocks, nrchips);
+ * This applies for absolute placement too, as we have the
+ * page nr. in td->pages.
+ */
+- if (td->pages[chip] != -1LL) {
++ if (td->pages[chip] != BBT_NULL_PAGE) {
+ page = td->pages[chip];
+ PRINTK("There is already a version of the table, go ahead and write it\n");
+ goto write;
+@@ -741,11 +852,12 @@ PRINTK("There is already a version of the table, go ahead and write it\n");
+ skip = 0;
+
+ write_retry:
+-printk("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
++PRINTK("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
+ __FUNCTION__, startblock, dir, td->maxblocks, skip);
+
+ for (i = skip; i < td->maxblocks; i++) {
+- uint64_t block = startblock + dir * i;
++ uint64_t block = startblock + (int64_t) (dir * i);
++ // THT One byte contains 4 set of 2-bits, so divide block by 4 to index the BBT byte
+ uint32_t blockindex = (uint32_t) (block >> 2);
+
+ /* Check, if the block is bad */
+@@ -753,18 +865,36 @@ printk("%s: write_retry: startblock=%0llx, dir=%d, td->maxblocks=%d, skip=%d\n",
+ PRINTK("%s: Checking BBT: i=%d, block=%0llx, BBT=%08x\n",
+ __FUNCTION__, i, block, this->bbt[blockindex]);
+
+- switch ((this->bbt[blockindex] >>
+- (2 * (block & 0x03))) & 0x03) {
++ // THT: bbt[blockindex] is the byte we are looking for, now get the 2 bits that
++ // is the BBT for the block (Shift (0,1,2,3) *2 positions depending on the block modulo 4)
++ switch ((this->bbt[blockindex] >> (2 * (block & 0x03)))
++ & 0x03) {
+ case 0x01:
+ case 0x03:
+ continue;
+ }
+ page = block << (this->bbt_erase_shift - this->page_shift);
++
++PRINTK("%s: Checking BBT2: page=%llx, md->pages[chip]=%llx\n",
++ __FUNCTION__, page, md->pages[chip]);
++
+ /* Check, if the block is used by the mirror table */
+ if (!md || md->pages[chip] != page)
+ goto write;
+ }
+- printk (KERN_ERR "No space left to write bad block table\n");
++
++#ifdef DEBUG_BBT
++ if (!do_printk) { // If we get here then turn on debugging and retry
++ do_printk=1;
++ chip = 0;
++ len = 0;
++ uint8_t rcode = td->reserved_block_code;
++ goto bbt_outofspace_retry;
++ }
++#endif
++ printk (KERN_ERR "No space left to write bad block table %c%c%c%c\n",
++ td->pattern[0], td->pattern[1], td->pattern[2], td->pattern[3]);
++ brcmnand_post_mortem_dump(mtd, page<<this->page_shift);
+ return -ENOSPC;
+ write:
+
+@@ -840,6 +970,11 @@ PRINTK("%s: Not NAND_BBT_SAVECONTENT\n", __FUNCTION__);
+ ooboffs = len;
+ /* Pattern is located in oob area of first page */
+ memcpy(&buf[ooboffs + td->offs], td->pattern, td->len);
++
++ // Write the version number (1 byte)
++ if (td->options & NAND_BBT_VERSION) {
++ buf[ooboffs + td->veroffs]=td->version[0];
++ }
+ }
+
+ /* walk through the memory table */
+@@ -955,21 +1090,30 @@ static int brcmnand_check_create (struct mtd_info *mtd, uint8_t *buf, struct nan
+ rd2 = NULL;
+ /* Per chip or per device ? */
+ chipsel = (td->options & NAND_BBT_PERCHIP) ? i : -1;
++
++ /*
++ * THT: Reset version to 0 if 0xff
++ */
++ if ((td->options & NAND_BBT_VERSION) && (td->version[i]==0xff) && td->pages[i] != BBT_NULL_PAGE)
++ td->version[i] = 0;
++ if ((md->options & NAND_BBT_VERSION) && (md->version[i]==0xff) && md->pages[i] != BBT_NULL_PAGE)
++ md->version[i] = 0;
++
+ /* Mirrored table available ? */
+ if (md) {
+- if (td->pages[i] == -1 && md->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE && md->pages[i] == BBT_NULL_PAGE) {
+ writeops = 0x03;
+ goto create;
+ }
+
+- if (td->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE) {
+ rd = md;
+ td->version[i] = md->version[i];
+ writeops = 1;
+ goto writecheck;
+ }
+
+- if (md->pages[i] == -1) {
++ if (md->pages[i] == BBT_NULL_PAGE) {
+ rd = td;
+ md->version[i] = td->version[i];
+ writeops = 2;
+@@ -996,7 +1140,7 @@ static int brcmnand_check_create (struct mtd_info *mtd, uint8_t *buf, struct nan
+ goto writecheck;
+
+ } else {
+- if (td->pages[i] == -1) {
++ if (td->pages[i] == BBT_NULL_PAGE) {
+ writeops = 0x01;
+ goto create;
+ }
+@@ -1015,25 +1159,46 @@ create:
+ if (md)
+ md->version[i] = 1;
+ writecheck:
++ res = 0;
++
+ /* read back first ? */
+- if (rd)
+- brcmnand_read_abs_bbt (mtd, buf, rd, chipsel);
++ if (rd) {
++ res = brcmnand_read_abs_bbt (mtd, buf, rd, chipsel);
++ }
+ /* If they weren't versioned, read both. */
+- if (rd2)
+- brcmnand_read_abs_bbt (mtd, buf, rd2, chipsel);
++ if (rd2) {
++ if (res != 0) {
++ int bbtlen = (uint32_t) (this->mtdSize >> (this->bbt_erase_shift + 2));
++ /* Clear the in-memory BBT first */
++PRINTK("%s: Discarding previously read BBT %c%c%c%c, res=%d\n",
++__FUNCTION__, rd->pattern[0], rd->pattern[1], rd->pattern[2], rd->pattern[3], res);
++ memset(this->bbt, 0, bbtlen);
++ }
++ res = brcmnand_read_abs_bbt (mtd, buf, rd2, chipsel);
++ if (res != 0) {
++PRINTK("%s: Read BBT %c%c%c%c returns res=%d, discarding\n",
++__FUNCTION__, rd2->pattern[0], rd2->pattern[1], rd2->pattern[2], rd2->pattern[3], res);
++ }
++ }
+
+ /* Write the bad block table to the device ? */
+ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
+ res = brcmnand_write_bbt (mtd, buf, td, md, chipsel);
+- if (res < 0)
++ if (res < 0) {
++ if (res ==-ENOSPC)
++ outofspace_bbt |= 1;
+ return res;
++ }
+ }
+
+ /* Write the mirror bad block table to the device ? */
+ if ((writeops & 0x02) && md && (md->options & NAND_BBT_WRITE)) {
+ res = brcmnand_write_bbt (mtd, buf, md, td, chipsel);
+- if (res < 0)
++ if (res < 0) {
++ if (res ==-ENOSPC)
++ outofspace_bbt |= 2;
+ return res;
++ }
+ }
+ }
+ return 0;
+@@ -1067,7 +1232,7 @@ static void mark_bbt_region (struct mtd_info *mtd, struct nand_bbt_descr *td)
+ for (i = 0; i < chips; i++) {
+ if ((td->options & NAND_BBT_ABSPAGE) ||
+ !(td->options & NAND_BBT_WRITE)) {
+- if (td->pages[i] == -1)
++ if (td->pages[i] == BBT_NULL_PAGE)
+ continue;
+ block = td->pages[i] >> (this->bbt_erase_shift - this->page_shift);
+ block <<= 1;
+@@ -1231,9 +1396,14 @@ DEBUG(MTD_DEBUG_LEVEL3, "-->%s offs=%0llx\n", __FUNCTION__, offs);
+ chipsel = -1;
+ }
+
+- td->version[chip]++;
++ (td->version[chip])++;
++ // THT Roll over
++ if (td->version[chip] == 0xff)
++ td->version[chip] =1;
+ if (md)
+- md->version[chip]++;
++ (md->version[chip])++;
++ if (md->version[chip] == 0xff)
++ md->version[chip] =1;
+
+ /* Write the bad block table to the device ? */
+ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
+@@ -1251,6 +1421,219 @@ out:
+ return res;
+ }
+
++/**
++ * brcmnand_reconstruct_bbt - [private] recreate bad block table(s)
++ * @mtd: MTD device structure
++ * @whichbbt: 1 = TD, 2 = MD
++ *
++ * The function reconstruct the bad block table(s) from the BI indicators.
++*/
++int brcmnand_reconstruct_bbt (struct mtd_info *mtd, int whichbbt)
++{
++ struct brcmnand_chip *this = mtd->priv;
++ int len, res = 0, writeops = 0;
++ int chip, chipsel;
++ uint8_t *buf = NULL;
++ struct nand_bbt_descr *td = this->bbt_td;
++ struct nand_bbt_descr *md = this->bbt_md;
++ uint32_t bbtSize;
++ uint32_t block;
++ uint64_t bOffset, startBlock, badBlock = 0;
++ int modified = 0;
++
++PRINTK( "-->%s whichBBT=%x\n", __FUNCTION__, whichbbt);
++
++ if (!this->bbt || !td)
++ return -EINVAL;
++
++
++ len = (uint32_t) (this->mtdSize >> (this->bbt_erase_shift + 2));
++ /* Allocate a temporary buffer for one eraseblock incl. oob */
++ len = (1 << this->bbt_erase_shift);
++ len += (len >> this->page_shift) * mtd->oobsize;
++ buf = vmalloc (len);
++ if (!buf) {
++ printk (KERN_ERR "brcmnand_update_bbt: Out of memory\n");
++ return -ENOMEM;
++ }
++
++ /*
++ * Wipe out the BBT entries for the BBT space, and reconstruct it,
++ * but do not modify the other entries outside the BBT
++ */
++ if (this->mtdSize <= (512<<20)) {
++ bbtSize = 1<<20;
++ }
++ else {
++ bbtSize = 4<<20;
++ }
++
++ /* Here we unset the entries in the BBT for the BBT region */
++ startBlock = this->mtdSize - bbtSize;
++ for (bOffset = startBlock; bOffset < this->mtdSize; bOffset += mtd->erasesize) {
++ // Calculate index into BBT and wipe it out.
++ uint32_t byteIndex = (uint32_t) bOffset >> 2;
++ uint8_t byte = this->bbt[byteIndex];
++ uint8_t byte0 = byte;
++
++ /* Clear the 2 bits for this block, then assign it back */
++ byte &= ~(0x03 << (2 * (bOffset & 0x03)));
++
++ /* If the contents changed, mark it */
++ if (byte != byte0) {
++ modified = 1;
++ badBlock = bOffset;
++ }
++
++ }
++
++ /* Now erase the BBT region, adding to bad block if erase fail */
++
++ if (modified) {
++ int64_t goodBlock = BBT_NULL_PAGE;
++
++ switch (writeops & 0x03) {
++ case 0x1: goodBlock = md->pages[0] >> this->page_shift; break;
++ case 0x2: goodBlock = td->pages[0] >> this->page_shift; break;
++ case 0x3: goodBlock = BBT_NULL_PAGE; break;
++ case 0: /* Impossible */ goodBlock = BBT_NULL_PAGE; break;
++ }
++
++#if 0
++ static char buf[512+58]; // 31 for alignment, +27 for OOB size
++ uint8_t* all0;
++ uint8_t* oob0;
++
++ all0 = (uint8_t*) ((((unsigned int) &buf[0]) + 31) & (~31));
++ oob0 = &all0[512];
++
++ memset(all0, 0, 512);
++ memset(oob0, 0, 27);
++#endif
++ for (bOffset = startBlock; bOffset < this->mtdSize; bOffset += mtd->erasesize) {
++ int needBBT = 0;
++
++
++ /* Skip over the good BBT */
++
++ if (bOffset == goodBlock)
++ continue;
++
++ PRINTK("Erasing block at %0llx\n", bOffset);
++ this->ctrl_writeAddr(this, bOffset, 0);
++
++ this->ctrl_write(BCHP_NAND_CMD_START, OP_BLOCK_ERASE);
++ // Wait until flash is ready
++ (void) this->write_is_complete(mtd, &needBBT);
++ if (needBBT) {
++ printk(KERN_WARNING "%s: Erase failure, marking bad block @%016llx\n", __FUNCTION__, bOffset);
++ modified = 1;
++ badBlock = bOffset;
++ (void) this->block_markbad(mtd, bOffset);
++ }
++ }
++ /* TBD: We should follow this with an ECC-disable write with all-0, ECC-enable then a re-erase
++ * But that is too dangerous for AC-on-off tests, especially for the BBT area
++ */
++#if 0
++
++ /* Disable ECC */
++ acc = bbt_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);
++ bbt_ctrl_write(BCHP_NAND_ACC_CONTROL, acc0);
++
++ chip->ctrl_writeAddr(chip, offset, 0);
++ PLATFORM_IOFLUSH_WAR();
++ chip->ctrl_write(BCHP_NAND_CMD_START, OP_PAGE_PROGRAM);
++
++ // Wait until cache is filled up, disabling ECC checking
++ (void) brcmnand_spare_is_valid(mtd, FL_READING, 1);
++
++ // Restore acc
++ bbt_ctrl_write(BCHP_NAND_ACC_CONTROL, acc);
++#endif
++ }
++
++
++
++
++ writeops = whichbbt;
++ if (modified) writeops = 3; // Do both
++
++#if 0 // THT: TBD when we have per chip BBT
++ /* Do we have a bbt per chip ? */
++ if (td->options & NAND_BBT_PERCHIP) {
++ chip = (int) (offs >> this->chip_shift);
++ chipsel = chip;
++ } else {
++ chip = 0;
++ chipsel = -1;
++ }
++#endif
++
++ /* Warning this codes only support 1 NAND chip */
++do_both:
++ if (((writeops & 3) == 3) && (td->options & NAND_BBT_WRITE)) {
++ int res2 = 0;
++
++PRINTK("%s: Reconstructing both BBTs\n", __FUNCTION__);
++ res = 0;
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++ res = brcmnand_write_bbt (mtd, buf, td, md, 0);
++
++ res2 = brcmnand_write_bbt (mtd, buf, md, td, 0);
++
++ if (!res && res2) /* At least one table write succeed. */
++ res = res2;
++
++ goto out;
++ }
++
++
++ /* Write the bad block table to the device */
++
++ if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
++PRINTK("%s: Recreating Bbt0\n", __FUNCTION__);
++ // Reset BBT0
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++
++ // Look for the location of 1BBT
++ res = brcmnand_search_bbt(mtd, buf, md);
++
++ if (res) { // Mirror not found
++ PRINTK("%s: Re-creating Bbt0, but 1bBT is also bad, rescan for both\n", __FUNCTION__);
++ writeops = 3;
++ goto do_both;
++ }
++
++PRINTK("%s: Reconstructing both BBT0 from BBT1 at %08x\n", __FUNCTION__, md->pages[0]);
++ res = brcmnand_write_bbt (mtd, buf, td, md, 0);
++ if (res < 0)
++ goto out;
++ }
++ /* Write the mirror bad block table to the device ? */
++ if ((writeops & 0x02) && md && (md->options & NAND_BBT_WRITE)) {
++PRINTK("%s: Recreating 1bBT\n", __FUNCTION__);
++ // Reset BBT0
++ td->pages[0] = md->pages[0] = BBT_NULL_PAGE;
++
++ // Look for the location of Bbt0:
++ res = brcmnand_search_bbt(mtd, buf, td);
++
++ if (res) { // Mirror not found
++ PRINTK("%s: Re-creating Bbt0, but 1bBT is also bad, rescan for both\n", __FUNCTION__);
++ writeops = 3;
++ goto do_both;
++ }
++PRINTK("%s: Reconstructing both BBT1 from BBT0 at %08x\n", __FUNCTION__, td->pages[0]);
++ res = brcmnand_write_bbt (mtd, buf, md, td, 0);
++ }
++
++out:
++ vfree (buf);
++ return res;
++}
++
+ /* Define some generic bad / good block scan pattern which are used
+ * while scanning a device for factory marked good / bad blocks. */
+ static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
+@@ -1388,11 +1771,17 @@ static int brcmnand_displayBBT(struct mtd_info* mtd)
+ //unsigned char oobbuf[64];
+ //struct nand_oobinfo oobsel;
+ int res;
++#ifdef DEBUG_BBT
++ int dbg=do_printk;
++#endif
+ // Size of BBT is 1MB if total flash is less than 512MB, 4MB otherwise
+ int bbtSize = this->mtdSize > (512<<20) ? 4 << 20 : 1 << 20;
+
+ bOffsetStart = 0;
+- bOffsetEnd = this->mtdSize - bbtSize; // Skip BBT itself
++ bOffsetEnd = (loff_t)(this->mtdSize - bbtSize); // Skip BBT itself
++#ifdef DEBUG_BBT
++ do_printk=1;
++#endif
+
+ printk(KERN_INFO "----- Contents of BBT -----\n");
+ for (bOffset=bOffsetStart; bOffset < bOffsetEnd; bOffset = bOffset + mtd->erasesize) {
+@@ -1402,12 +1791,50 @@ static int brcmnand_displayBBT(struct mtd_info* mtd)
+ }
+ }
+ printk(KERN_INFO "----- END Contents of BBT -----\n");
++
++#ifdef DEBUG_BBT
++ do_printk=dbg;
++#endif
+ return 0;
+ }
+
+ #if 1
+ // Remove this block in production builds.
+
++
++//#define TEST_CLEAR_BBT1
++//#define TEST_INVALIDATE_BBT0
++
++#ifdef TEST_INVALIDATE_BBT0
++static uint32_t bbt_ctrl_read(uint32_t nandCtrlReg)
++{
++ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
++ + nandCtrlReg - BCHP_NAND_REVISION);
++
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ (nandCtrlReg & 0x3) != 0) {
++ printk("bbt_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);
++}
++
++
++static void bbt_ctrl_write(uint32_t nandCtrlReg, uint32_t val)
++{
++ volatile unsigned long* pReg = (volatile unsigned long*) (BRCMNAND_CTRL_REGS
++ + nandCtrlReg - BCHP_NAND_REVISION);
++
++ if (nandCtrlReg < BCHP_NAND_REVISION || nandCtrlReg > BCHP_NAND_BLK_WR_PROTECT ||
++ (nandCtrlReg & 0x3) != 0) {
++ printk( "bbt_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);
++}
++#endif
++
++
+ /*
+ * Process brcmnand= kernel command arg, BEFORE building/reading BBT table.
+ * Currently, the only accepted command is CLEARBBT, which in itself is a dangerous activity.
+@@ -1424,6 +1851,7 @@ static void brcmnand_preprocessKernelArg(struct mtd_info *mtd)
+ //int page;
+
+
++
+ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n", __FUNCTION__, gClearBBT, device_size(mtd), mtd->erasesize);
+
+
+@@ -1431,10 +1859,48 @@ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n", __FUNCTION__, gClearB
+
+ case NANDCMD_CLEARBBT: // Force rescan of BBT (DANGEROUS, may lose Mfg's BIs).
+
++#ifdef TEST_CLEAR_BBT1
++ bOffsetStart = 0x7ff00000;
++ bOffsetEnd = 0x7ff00000;
++printk("%s: gClearBBT=clearbbt, start=%0llx, end=%0llx\n", __FUNCTION__,
++ bOffsetStart, bOffsetEnd);
++#elif defined(TEST_INVALIDATE_BBT0)
++{
++uint32_t oob0[32];
++uint8_t* oob = (uint8_t*) &oob0[0];
++uint32_t acc0;
++uint64_t bbt0Page = ((uint64_t) 0x7ff80000) >> this->page_shift;
++int res;
++
++ bOffsetStart = 0x7ff80000; // FOrce it to skip erase
++ bOffsetEnd = 0x7ff00000;
++ res = this->read_page_oob(mtd, oob, bbt0Page);
++
++
++memset(&oob[9], 0, 4); // * Overwrite the ECC to force EBADMSG
++//bOffsetStart = 0x7ff80000;
++//bOffsetEnd = 0x7ff80000;
++
++ /* Disable ECC */
++ acc0 = brcmnand_disable_ecc();
++
++PRINTK("Invalidate ECC at page %llx\n", bbt0Page);
++
++ res = this->write_page_oob(mtd, oob, bbt0Page);
++
++ if (res) PRINTK("%s: write_page_oob failed, res=%d\n", __FUNCTION__, res);
++
++ // Restore acc0
++ brcmnand_restore_ecc(acc0);
++}
++#else
++
+ bOffsetStart = this->mtdSize - bbtSize;
+ bOffsetEnd = this->mtdSize - mtd->erasesize;
+ printk("%s: gClearBBT=clearbbt, start=%0llx, end=%0llx\n", __FUNCTION__,
+ bOffsetStart, bOffsetEnd);
++#endif
++
+ break;
+
+ case NANDCMD_SHOWBBT:
+@@ -1634,7 +2100,12 @@ PRINTK("%s: gClearBBT=%d, size=%016llx, erasesize=%08x\n",
+
+ /* How many pages should we scan */
+ if (this->badblock_pattern->options & NAND_BBT_SCAN2NDPAGE) {
+- numpages = 2;
++ if (this->options & NAND_SCAN_BI_3RD_PAGE) {
++ numpages = 3;
++ }
++ else {
++ numpages = 2;
++ }
+ } else {
+ numpages = 1;
+ }
+@@ -1865,6 +2336,18 @@ PRINTK("%s: gClearBBT = %d\n", __FUNCTION__, gClearBBT);
+ (void) brcmnand_postprocessKernelArg(mtd);
+ }
+
++ /* TESTING 1 2 3: Once we fixed the bug, there is no longer need for this */
++ if (outofspace_bbt) {
++#ifdef DEBUG_BBT
++ do_printk=1;
++#endif
++ brcmnand_reconstruct_bbt(mtd, outofspace_bbt);
++ outofspace_bbt = 0;
++#ifdef DEBUG_BBT
++ do_printk=0;
++#endif
++ }
++
+ return res;
+ }
+
+diff --git a/drivers/mtd/brcmnand/brcmnand_priv.h b/drivers/mtd/brcmnand/brcmnand_priv.h
+index cc0f009..90ece32 100755
+--- a/drivers/mtd/brcmnand/brcmnand_priv.h
++++ b/drivers/mtd/brcmnand/brcmnand_priv.h
+@@ -313,11 +313,20 @@ extern void* get_brcmnand_handle(void);
+ extern void print_oobbuf(const unsigned char* buf, int len);
+ extern void print_databuf(const unsigned char* buf, int len);
+
+-#if CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
++#ifdef CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING
+ extern int brcmnand_cet_update(struct mtd_info *mtd, loff_t from, int *status);
+ extern int brcmnand_cet_prepare_reboot(struct mtd_info *mtd);
+ extern int brcmnand_cet_erasecallback(struct mtd_info *mtd, u_int32_t addr);
+ extern int brcmnand_create_cet(struct mtd_info *mtd);
+ #endif
+
++/*
++ * Disable ECC, and return the original ACC register (for restore)
++ */
++uint32_t brcmnand_disable_ecc(void);
++
++void brcmnand_restore_ecc(uint32_t orig_acc0);
++
++void brcmnand_post_mortem_dump(struct mtd_info* mtd, loff_t offset);
++
+ #endif
+diff --git a/drivers/mtd/maps/bcm9xxxx-flash.c b/drivers/mtd/maps/bcm9xxxx-flash.c
+index ef050d2..adf8854 100644
+--- a/drivers/mtd/maps/bcm9xxxx-flash.c
++++ b/drivers/mtd/maps/bcm9xxxx-flash.c
+@@ -176,7 +176,7 @@ struct map_info bcm9XXXX_map
+ #define AVAIL1_PART (-1)
+ #endif
+ // DEFAULT_SIZE_MB will be defined later based on platforms.
+-#define DEFAULT_ROOTFS_SIZE (DEFAULT_SIZE_MB - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
++#define DEFAULT_ROOTFS_SIZE (((DEFAULT_SIZE_MB)<<20) - DEFAULT_RESERVED_SIZE - DEFAULT_ECM_SIZE)
+
+
+ static struct mtd_partition bcm9XXXX_parts[] = {
+@@ -213,7 +213,7 @@ static struct mtd_partition bcm9XXXX_parts[] = {
+
+ /* default for 32MB+ platforms */
+
+-#define DEFAULT_SIZE_MB 32 /* 32MB flash */
++#define DEFAULT_SIZE_MB 64 /* 32MB flash */
+ #if defined( CONFIG_MTD_ECM_PARTITION)
+ { name: "rootfs", offset: 0, size: DEFAULT_ROOTFS_SIZE },
+ { name: "avail1", offset: DEFAULT_ROOTFS_SIZE, size: DEFAULT_AVAIL1_SIZE },
+@@ -249,12 +249,27 @@ void (*gInitialize_Nor_Partition)(void) = (void (*)(void)) 0;
+ EXPORT_SYMBOL(gInitialize_Nor_Partition);
+ #endif
+
++
++
++#if 1 // Debugging
++static void print_partition(void)
++{
++ int i;
++
++ for (i=0; i<gNumParts; i++) {
++ PRINTK("i=%d, name=%s, start=%0llx, size=%0llx\n",
++ i, bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].offset,
++ bcm9XXXX_parts[i].size);
++ }
++}
++#endif
++
+ int __init init_bcm9XXXX_map(void)
+ {
+ unsigned int avail1_size = DEFAULT_AVAIL1_SIZE;
+ int i;
+ struct cfi_private *cfi;
+- u_int64_t ACTUAL_FLASH_SIZE = (u_int64_t) WINDOW_SIZE;
++ unsigned long ACTUAL_FLASH_SIZE = (unsigned long) WINDOW_SIZE;
+ unsigned long FLASH_BASE = WINDOW_ADDR;
+
+ #ifdef CONFIG_MTD_ECM_PARTITION
+@@ -284,6 +299,7 @@ int __init init_bcm9XXXX_map(void)
+
+ //bcm9XXXX_map.size = WINDOW_SIZE;
+ ACTUAL_FLASH_SIZE = 1 << cfi->cfiq->DevSize;
++
+ if (ACTUAL_FLASH_SIZE >= (4<<20)) {
+ FLASH_BASE = 0x20000000 - ACTUAL_FLASH_SIZE;
+ }
+@@ -292,6 +308,8 @@ int __init init_bcm9XXXX_map(void)
+ }
+
+
++PRINTK("%s: cfiq->DevSize=%08x, actual_flash_size=%08lx, Base=%08lx\n",
++ __FUNCTION__, cfi->cfiq->DevSize, ACTUAL_FLASH_SIZE, FLASH_BASE);
+ /*
+ * Now that we know the NOR flash size, map again with correct size and base address.
+ */
+@@ -316,6 +334,9 @@ int __init init_bcm9XXXX_map(void)
+ }
+ gNumParts = ARRAY_SIZE(bcm9XXXX_parts) - 2; /* Minus the 2 extra place holders */
+
++PRINTK("Before adjustment, gNumParts=%d, defaultSize=%dMB\n", gNumParts, DEFAULT_SIZE_MB);
++print_partition();
++
+
+ #ifdef CONFIG_MTD_BRCMNAND_NOR_ACCESS
+ /* If NOR flash is only 4MB, remove the NOR partition, leaving only CFE partition */
+@@ -329,7 +350,30 @@ int __init init_bcm9XXXX_map(void)
+ bcm9XXXX_parts[1].size = bcm9XXXX_parts[0].offset; // NOR flash ends where CFE starts.
+ bcm9XXXX_parts[1].offset = 0;
+
+-#elif defined( CONFIG_MTD_ECM_PARTITION )
++#else
++ /* NOR as only device */
++ #if defined (DEFAULT_SIZE_MB )
++ {
++ unsigned long defaultSize = DEFAULT_SIZE_MB << 20;
++ int i;
++
++ if (ACTUAL_FLASH_SIZE != defaultSize) {
++ // Adjust rootfs partition size, all others remain the same.
++ // rootfs
++ bcm9XXXX_parts[0].offset = 0; // CFE starts at 1FC00000H
++ bcm9XXXX_parts[0].size += (int64_t) (ACTUAL_FLASH_SIZE - defaultSize);
++ //avail1
++ for (i=1; i<gNumParts; i++) {
++ // Adjust partition offset, but only for non NULL partitions. Size remains the same.
++ if ((bcm9XXXX_parts[0].offset != 0 && bcm9XXXX_parts[0].size != 0))
++ {
++ bcm9XXXX_parts[i].offset += (int64_t) (ACTUAL_FLASH_SIZE - defaultSize);
++ }
++ }
++ }
++ }
++ #endif
++ #if defined( CONFIG_MTD_ECM_PARTITION )
+ if (ACTUAL_FLASH_SIZE < (64<<20)) {
+ ecm_size = DEFAULT_OCAP_SIZE;
+ avail1_size = 0;
+@@ -371,7 +415,7 @@ bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+
+
+-#elif defined( DEFAULT_SIZE_MB )
++ #elif defined( DEFAULT_SIZE_MB )
+ if (ACTUAL_FLASH_SIZE != (DEFAULT_SIZE_MB << 20)) {
+ int64_t diffSize = (uint64_t) ACTUAL_FLASH_SIZE - (uint64_t) (DEFAULT_SIZE_MB << 20);
+
+@@ -388,7 +432,8 @@ PRINTK("Part[0] After name=%s, size=%llx, offset=%llx\n", bcm9XXXX_parts[0].name
+ PRINTK("Part[%d] After: name=%s, size=%llx, offset=%llx\n", i, bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+ }
+-#endif
++ #endif // ECM_PARTITION ... else
++#endif // NOR+NAND ... else
+
+
+ if (gBcmSplash) {
+@@ -436,7 +481,8 @@ bcm9XXXX_parts[i].name, bcm9XXXX_parts[i].size, bcm9XXXX_parts[i].offset);
+ }
+
+
+-
++PRINTK("After adjustment\n");
++print_partition();
+
+ #if defined(CONFIG_MTD_BRCMNAND)
+ #if defined(CONFIG_MTD_BRCMNAND_NOR_ACCESS)
+diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
+index 0753e22..6ccc89d 100755
+--- a/include/linux/mtd/nand.h
++++ b/include/linux/mtd/nand.h
+@@ -184,6 +184,10 @@ typedef enum {
+ /* This option is defined if the board driver allocates its own buffers
+ (e.g. because it needs them DMA-coherent */
+ #define NAND_OWN_BUFFERS 0x00040000
++
++/* For Hynix MLC flashes, the BI are written to last and (last-2) pages. */
++#define NAND_SCAN_BI_3RD_PAGE 0x00100000
++
+ /* Options set by nand scan */
+ /* Nand scan has allocated controller struct */
+ #define NAND_CONTROLLER_ALLOC 0x80000000
+@@ -492,9 +496,11 @@ extern struct nand_manufacturers nand_manuf_ids[];
+ * that the pattern and the version count are always located in the oob area
+ * of the first block.
+ */
++#define BBT_NULL_PAGE (-1LL)
+ struct nand_bbt_descr {
+ int options;
+- int pages[NAND_MAX_CHIPS];
++
++ int64_t pages[NAND_MAX_CHIPS];
+ int offs;
+ int veroffs;
+ uint8_t version[NAND_MAX_CHIPS];
+@@ -534,6 +540,8 @@ struct nand_bbt_descr {
+ #define NAND_BBT_SAVECONTENT 0x00002000
+ /* Search good / bad pattern on the first and the second page */
+ #define NAND_BBT_SCAN2NDPAGE 0x00004000
++/* For Hynix MLC flashes BI are marked on last and (last-2) pages */
++#define NAND_BBT_SCAN3RDPAGE 0x00008000
+
+ /* The maximum number of blocks to scan for a bbt */
+ #define NAND_BBT_SCAN_MAXBLOCKS 4
--- /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/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
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18-7.4
+# Mon Aug 16 19:39:36 2010
+#
+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=y
+# CONFIG_MIPS_BCM97459BX_NAND is not set
+# CONFIG_MIPS_BCM7335BX is not set
+# CONFIG_MIPS_BCM7335BX_NAND is not set
+# CONFIG_MIPS_BCM7340AX is not set
+# CONFIG_MIPS_BCM7336AX is not set
+# CONFIG_MIPS_BCM7420AX is not set
+# CONFIG_MIPS_BCM7420BX is not set
+# CONFIG_MIPS_BCM7420AX_NAND is not set
+# CONFIG_MIPS_BCM7420BX_NAND 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 is not set
+# 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_BCM7635AX_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=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_BCM7405D0=y
+CONFIG_MIPS_BCM7405=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_NODES_SHIFT=6
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=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 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_CPUSETS 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_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
+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=9
+CONFIG_MTD_BRCMNAND_CORRECTABLE_ERR_HANDLING=y
+# CONFIG_MTD_BRCMNAND_DISABLE_XOR is not set
+
+#
+# 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=y
+#CONFIG_BLK_DEV_RAM_COUNT=16
+#CONFIG_BLK_DEV_RAM_SIZE=8704
+#CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# 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=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=m
+
+#
+# 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=y
+# 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=m
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_SMIVGX is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO 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=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# 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=m
+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=m
+# 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 is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS 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_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=m
+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 is not set
+# 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=m
+CONFIG_SQUASHFS=m
+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=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS 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 is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+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=15
+# CONFIG_DEBUG_FS is not set
+# CONFIG_WANT_EXTRA_DEBUG_INFORMATION is not set
+CONFIG_CROSSCOMPILE=y
+CONFIG_CMDLINE="rw console=uart,mmio,0x10400b00,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
+require linux-vuplus-2.6.18.inc
+
+PR = "r9"
+
+SRC_URI += "\
+ file://vuuno_defconfig \
+ file://linux_vuuno_nand2.patch;patch=1;pnum=1 \
+ file://linux_vuuno_proc.patch;patch=1;pnum=0 \
+ file://linux_vuuno_serial.patch;patch=1;pnum=0 \
+ "
+
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
+
--- /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
SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz"
S = "${WORKDIR}/openssl-${PV}"
-INC_PR = "r12"
+INC_PR = "r13"
AR_append = " r"
CFLAG = "${@base_conditional('SITEINFO_ENDIANESS', 'le', '-DL_ENDIAN', '-DB_ENDIAN', d)} \
# disable unused algos
EXTRA_OECONF = "${@base_contains('DISTRO', 'opendreambox', ' no-idea no-mdc2 no-rc5', '', d)}"
+EXTRA_OECONF = "${@base_contains('DISTRO', 'vuplus', ' no-idea no-mdc2 no-rc5', '', d)}"
do_configure () {
cd util
--- /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/
--- /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/
LDFLAGS_append = " -Wl,--as-needed"
PV_opendreambox = "0.1.7+svnr${SRCPV}"
+PV_vuplus = "0.1.7+svnr${SRCPV}"
SRC_URI_append_opendreambox = " \
file://remove_pyc_pyo_hack.patch;patch=1 \
file://r531-fix-remove.patch;patch=1 \
file://r599-fix-depmod.patch;patch=1 \
"
+SRC_URI_append_vuplus = " \
+ file://remove_pyc_pyo_hack.patch;patch=1 \
+ file://r531-fix-remove.patch;patch=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}.2"
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}"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_opendreambox = "1"
+DEFAULT_PREFERENCE_vuplus = "1"
FILESPATHPKG .= ":qt-${PV}"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_opendreambox = "1"
+DEFAULT_PREFERENCE_vuplus = "1"
require qt4-tools-native.inc
LICENSE = "LGPLv2.1 GPLv3"
--- /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.)
+ unix extensions = no
+
+[Configuration]
+ comment = Configuration files - take care!
+ path = /var
+ wide links = yes
+ read only = no
+ public = yes
+ guest ok = yes
+
+[Harddisk]
+ comment = The harddisk
+ path = /hdd
+ wide links = yes
+ 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
+}
+
--- /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
--- /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
DESCRIPTION = "Basic task to get a device booting"
-PR = "r58"
+PR = "r60"
inherit task
--- /dev/null
+DESCRIPTION = "Vuplus: Base Task for the Vuplus Distribution"
+SECTION = "vuplus/base"
+LICENSE = "MIT"
+PR = "r5"
+
+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 \
+ openvpn \
+ zeroconf \
+"
+VUPLUS_BASE_RECOMMENDS_append_vuuno = " vuplus-fpga-update"
+VUPLUS_BASE_RECOMMENDS_append_vuultimo = " vuplus-fpga-update"
+
+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 = "r1"
+
+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-streamproxy \
+ tuxbox-tuxtxt-32bpp \
+ enigma2-meta \
+ enigma2-plugins-meta \
+ enigma2-skins-meta \
+"
+
+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)} \
+"
+
+RDEPENDS_task-vuplus-enigma2_append_bm750 = "\
+ enigma2-plugin-systemplugins-fancontrol \
+"
+
+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-ecb \
+ kernel-module-cryptomgr \
+ kernel-module-crypto-hash \
+ kernel-module-aead \
+ kernel-module-pcompress \
+ kernel-module-crypto-blkcipher \
+ kernel-module-crypto-algapi \
+"
+
+WLAN_PCI_MODULES = "\
+ kernel-module-ath5k \
+"
+
+WLAN_USB_MODULES = "\
+ kernel-module-rt73usb \
+ kernel-module-zd1211rw \
+ rt73-firmware \
+ zd1211-firmware \
+"
+
+WLAN_USB_MODULES_LEGACY = "\
+ zd1211b \
+ wlan-rt73 \
+ r8712u \
+ rt3070 \
+"
+
+RDEPENDS_${PN}_append_bm750 = "\
+ ${@base_contains('PREFERRED_VERSION_linux-bm750', '2.6.18', '${WLAN_USB_MODULES_LEGACY}', '${WLAN_CRYPTO_MODULES} ${WLAN_USB_MODULES}', d)} \
+"
+
+RDEPENDS_${PN}_append_vusolo = "\
+ ${@base_contains('PREFERRED_VERSION_linux-vusolo', '2.6.18', '${WLAN_USB_MODULES_LEGACY}', '${WLAN_CRYPTO_MODULES} ${WLAN_USB_MODULES}', d)} \
+"
+
+RDEPENDS_${PN}_append_vuuno = "\
+ ${@base_contains('PREFERRED_VERSION_linux-vuuno', '2.6.18', '${WLAN_USB_MODULES_LEGACY}', '${WLAN_CRYPTO_MODULES} ${WLAN_USB_MODULES}', d)} \
+"
+
+RDEPENDS_${PN}_append_vuultimo = "\
+ ${@base_contains('PREFERRED_VERSION_linux-vuultimo', '2.6.18', '${WLAN_USB_MODULES_LEGACY}', '${WLAN_CRYPTO_MODULES} ${WLAN_USB_MODULES}', d)} \
+"
+
+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"
+
+SRC_URI_append_vuuno = " \
+ file://32bpp.diff;patch=1 \
+ file://resize_framebuffer.diff;patch=1 \
+ file://allow_different_demux.diff;patch=1"
+
+SRC_URI_append_vuultimo = " \
+ 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/tuxtxt.otb /usr/lib/enigma2/python/Plugins/Extensions/Tuxtxt /etc/tuxtxt"
# tuxtxt.ttf comes from enigma2 git now
--- /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
+
--- /dev/null
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %e the smallest number for that name which does not matches an existing node
+# %k the kernel name for the device
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute
+# %% the '%' char itself
+#
+
+# Media automounting
+#SUBSYSTEM=="block", ACTION=="add" RUN+="/etc/udev/scripts/mount.sh"
+#SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"
+
+# Handle network interface setup
+SUBSYSTEM=="net", ACTION=="add" RUN+="/etc/udev/scripts/network.sh"
+SUBSYSTEM=="net", ACTION=="remove" RUN+="/etc/udev/scripts/network.sh"
+
+# The first rtc device is symlinked to /dev/rtc
+KERNEL=="rtc0", SYMLINK+="rtc"
+
+# Try and modprobe for drivers for new hardware
+ACTION=="add", DEVPATH=="/devices/*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe $env{MODALIAS}"
+
+# Create a symlink to any touchscreen input device
+SUBSYSTEM=="input", KERNEL=="event[0-9]*", SYSFS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen0"
+SUBSYSTEM=="input", KERNEL=="event[0-9]*", SYSFS{modalias}=="ads7846", SYMLINK+="input/touchscreen0"
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_vuuno = " file://50-udev-default.rules "
+SRC_URI_append_vuultimo = " 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
+diff --git a/linux/drivers/media/dvb/dvb-core/dmxdev.c b/linux/drivers/media/dvb/dvb-core/dmxdev.c
+index 0eeb3e9..670456a 100644
+--- a/linux/drivers/media/dvb/dvb-core/dmxdev.c
++++ b/linux/drivers/media/dvb/dvb-core/dmxdev.c
+@@ -762,7 +762,7 @@ static int dvb_demux_open(struct inode *inode, struct file *file)
+ mutex_init(&dmxdevfilter->mutex);
+ file->private_data = dmxdevfilter;
+
+- dvb_ringbuffer_init(&dmxdevfilter->buffer, NULL, 8192);
++ dvb_ringbuffer_init(&dmxdevfilter->buffer, NULL, 8192*16);
+ dmxdevfilter->type = DMXDEV_TYPE_NONE;
+ dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED);
+ init_timer(&dmxdevfilter->timer);
+diff --git a/linux/drivers/media/dvb/dvb-core/dvb_demux.h b/linux/drivers/media/dvb/dvb-core/dvb_demux.h
+index 8567965..f0a448a 100644
+--- a/linux/drivers/media/dvb/dvb-core/dvb_demux.h
++++ b/linux/drivers/media/dvb/dvb-core/dvb_demux.h
+@@ -61,6 +61,11 @@ struct dvb_demux_filter {
+
+ u16 hw_handle;
+ struct timer_list timer;
++////////////////////////////////////////////////////
++ void *priv;
++ void *buf;
++ int is_recpump;
++ struct dvb_demux_filter *pre;
+ };
+
+ #define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+diff --git a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c
+index 9440b35..d1b642d 100644
+--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c
++++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c
+@@ -31,6 +31,7 @@
+ #include <linux/wait.h>
+ #include <linux/slab.h>
+ #include <linux/poll.h>
++#include "compat.h"
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+ #include <linux/semaphore.h>
+ #endif
+@@ -47,7 +48,7 @@
+
+ #include "dvb_frontend.h"
+ #include "dvbdev.h"
+-#include "compat.h"
++
+ #include <linux/dvb/version.h>
+
+ static int dvb_frontend_debug;
+@@ -1684,6 +1685,14 @@ static int dvb_frontend_ioctl_legacy(struct inode *inode, struct file *file,
+ err = fe->ops.read_ucblocks(fe, (__u32*) parg);
+ break;
+
++#ifndef SW_LOOP_THROUGH
++#define SW_LOOP_THROUGH _IOW('o',103,int)
++#endif
++
++ case SW_LOOP_THROUGH:
++ if (fe->ops.set_sw_loopthrough)
++ err = fe->ops.set_sw_loopthrough(fe, (int*) parg);
++ break;
+
+ case FE_DISEQC_RESET_OVERLOAD:
+ if (fe->ops.diseqc_reset_overload) {
+diff --git a/linux/drivers/media/dvb/dvb-core/dvb_frontend.h b/linux/drivers/media/dvb/dvb-core/dvb_frontend.h
+index bf0e6be..c992277 100644
+--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.h
++++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.h
+@@ -305,6 +305,8 @@ struct dvb_frontend_ops {
+
+ int (*set_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
+ int (*get_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
++
++ int (*set_sw_loopthrough)(struct dvb_frontend* fe, int* arg);
+ };
+
+ #define MAX_EVENT 8
+diff --git a/linux/drivers/media/dvb/dvb-core/dvbdev.c b/linux/drivers/media/dvb/dvb-core/dvbdev.c
+index 9720ec5..715e876 100644
+--- a/linux/drivers/media/dvb/dvb-core/dvbdev.c
++++ b/linux/drivers/media/dvb/dvb-core/dvbdev.c
+@@ -55,11 +55,14 @@ static const char * const dnames[] = {
+ #define MAX_DVB_MINORS 256
+ #define DVB_MAX_IDS MAX_DVB_MINORS
+ #else
+-#define DVB_MAX_IDS 4
+-#define nums2minor(num,type,id) ((num << 6) | (id << 4) | type)
++#define DVB_MAX_IDS 8
++#define nums2minor(num,type,id) ((num << 7) | (id << 4) | type)
+ #define MAX_DVB_MINORS (DVB_MAX_ADAPTERS*64)
+ #endif
+
++
++
++
+ static struct class *dvb_class;
+
+ static struct dvb_device *dvb_minors[MAX_DVB_MINORS];
SRCDATE = "20100904"
SRCREV = "6e0befab696a"
PV = "0.0+hg${SRCDATE}"
-PR = "r1"
+PR = "r2"
SRC_URI = "hg://linuxtv.org/hg/;module=v4l-dvb;rev=${SRCREV} \
file://defconfig \
--- /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 = "7"
+
+PV = "${BINARY_VERSION}.${IMAGES_VERSION}"
+PR = "r3"
+
+
+SRC_URI = "file://bootlogo.mvi file://backdrop.mvi file://bootlogo_wait.mvi file://switchoff.mvi"
+SRC_URI_append_vuuno = " file://splash_cfe_auto.bin"
+SRC_URI_append_vuultimo = " file://splash_cfe_auto.bin"
+
+S = "${WORKDIR}/"
+
+MVI = "bootlogo backdrop bootlogo_wait"
+
+do_install() {
+ 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;
+}
+
+do_install_vuuno() {
+ 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;
+ install -m 0755 ${S}/splash_cfe_auto.bin ${D}/boot/splash_cfe_auto.bin
+}
+do_install_vuultimo() {
+ 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;
+ install -m 0755 ${S}/splash_cfe_auto.bin ${D}/boot/splash_cfe_auto.bin
+}
+
+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}"
+PV_vuuno = "${KV}"
+PV_vuultimo = "${KV}"
+
+SRCDATE_bm750 = "20110321"
+SRCDATE_vusolo = "20110321"
+SRCDATE_vuuno = "20110404"
+SRCDATE_vuultimo = "20110404"
+
+CHIPSET_bm750 = "7335"
+CHIPSET_vusolo = "7325"
+CHIPSET_vuuno = "7413"
+CHIPSET_vuultimo = "7413"
+
+
+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}"
+
+#hack
+DEPENDS = " module-init-tools"
+RDEPENDS_append_vuplus = " module-init-tools-depmod"
+
+
+SRC_URI = "http://archive.vuplus.com/download/drivers/mbox-dvb-modules-${MACHINE}-${PV}-${PREFERRED_GCC_VERSION}-${SRCDATE}.tar.gz "
+
+SRC_URI_vuuno = "http://archive.vuplus.com/download/drivers/beta/vuplus-dvb-modules-${CHIPSET}-${PV}-${PREFERRED_GCC_VERSION}-${SRCDATE}.tar.gz "
+SRC_URI_vuultimo = "http://archive.vuplus.com/download/drivers/beta/vuplus-dvb-modules-${CHIPSET}-${PV}-${PREFERRED_GCC_VERSION}-${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 = "r4"
+
+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 = "vuplus fpga updater"
+SECTION = "base"
+PRIORITY = "required"
+LICENSE = "proprietary"
+
+PV = "1.0"
+PR = "r0"
+
+SRC_URI = "file://dp_user_fpga"
+
+
+S = "${WORKDIR}"
+
+INHIBIT_PACKAGE_STRIP = "1"
+
+do_install() {
+ install -d ${D}/usr/bin
+ install -m 0755 ${WORKDIR}/dp_user_fpga ${D}/usr/bin/dp_user_fpga
+}
+
+PACKAGE_ARCH := "${MACHINE_ARCH}"
+FILES_${PN} = "/"
--- /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}"
file://driver-zydas.patch;patch=1 \
file://driver-ralink.patch;patch=1"
+SRC_URI_append_vuplus = " \
+ file://driver-zydas.patch;patch=1 \
+ file://driver-ralink.patch;patch=1"
+
DEPENDS_dm8000_append = "madwifi-ng"
TARGET_CFLAGS_dm8000_append = " -I${STAGING_INCDIR}/madwifi-ng"
echo "CONFIG_DRIVER_RALINK=y" >> .config
echo "CONFIG_DRIVER_ZYDAS=y" >> .config
}
+do_configure_append_vuplus() {
+ echo "CONFIG_DRIVER_RALINK=y" >> .config
+ echo "CONFIG_DRIVER_ZYDAS=y" >> .config
+}
do_compile () {
make
LICENSE = "GPL"
PR = "r1"
DEPENDS_opendreambox = "libcddb"
+DEPENDS_vuplus = "libcddb"
SRC_URI = "http://ftp.gnu.org/gnu/libcdio/libcdio-${PV}.tar.gz"
SRC_URI_append_opendreambox = " file://libcdio-0.81-add-cdtextinfo.patch;patch=1"
+SRC_URI_append_vuplus = " file://libcdio-0.81-add-cdtextinfo.patch;patch=1"
inherit autotools